CSE: Kubernetes para quem usa vCloud

CSE: Kubernetes para quem usa vCloud
Olá a todos!

Acontece que nossa pequena equipe, para não dizer que recentemente, e certamente não de repente, cresceu para migrar alguns (e no futuro todos) produtos para o Kubernetes.

Houve muitas razões para isso, mas a nossa história não é sobre holivar.

Tínhamos pouca escolha em relação à base de infraestrutura. vCloud Director e vCloud Director. Escolhemos o mais novo e decidimos começar.

Mais uma vez, examinando “The Hard Way”, rapidamente cheguei à conclusão de que ontem era necessária uma ferramenta para automatizar pelo menos processos básicos, como implantação e dimensionamento. Um mergulho profundo no Google trouxe à luz um produto como o VMware Container Service Extension (CSE) – um produto de código aberto que permite automatizar a criação e o dimensionamento de clusters k8s para aqueles no vCloud.

Isenção de responsabilidade: o CSE tem suas limitações, mas para nossos propósitos foi perfeito. Além disso, a solução deve ser suportada pelo provedor de nuvem, mas como a parte do servidor também é de código aberto, peça ao gerente mais próximo para disponibilizá-la :)

Para começar a utilizá-lo, você precisa de uma conta de administrador na organização vCloud e de uma rede roteada previamente criada para o cluster (durante o processo de implantação, você precisa de acesso à Internet a partir desta rede, não se esqueça de configurar o Firewall/NAT). O endereço não importa. Neste exemplo, vamos pegar 10.0.240.0/24

CSE: Kubernetes para quem usa vCloud

Como após a criação o cluster precisará ser gerenciado de alguma forma, é recomendável ter uma VPN com roteamento para a rede criada. Usamos uma VPN SSL padrão configurada no Edge Gateway da nossa organização.

Em seguida, você precisa instalar o cliente CSE onde os clusters k8s serão gerenciados. No meu caso, este é um laptop funcional e alguns contêineres bem escondidos que impulsionam a automação.

O cliente requer Python versão 3.7.3 e superior instalado e o módulo instalado vcd-cli, então vamos instalar ambos.

pip3 install vcd-cli

pip3 install container-service-extension

Após a instalação, verificamos a versão do CSE e obtemos o seguinte:

# vcd cse version
Error: No such command "cse".

Inesperado, mas corrigível. Acontece que o CSE precisa ser anexado como um módulo ao vcd-cli.
Para fazer isso, você deve primeiro fazer login no vcd-cli em nossa organização:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

Depois disso, vcd-cli criará um arquivo de configuração ~/.vcd-cli/profiles.yaml
No final você precisa adicionar o seguinte:

extensions:
  - container_service_extension.client.cse

Então verificamos novamente:

# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0

A fase de instalação do cliente está concluída. Vamos tentar implantar o primeiro cluster.
O CSE possui vários conjuntos de parâmetros de uso, todos eles podem ser visualizados aqui.

Primeiro, vamos criar chaves para acesso sem senha ao futuro cluster. Este ponto é importante, pois por padrão o login por senha nos nós estará desabilitado, e se você não definir as chaves poderá ter muito trabalho através dos consoles das máquinas virtuais, o que não é conveniente.

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

Vamos tentar começar a criar um cluster:

vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs

Se obtivermos um erro Erro: A sessão expirou ou o usuário não fez login. Faça login novamente. - faça login novamente no vcd-cli no vCloud conforme descrito acima e tente novamente.

Desta vez está tudo bem e a tarefa de criação de um cluster foi iniciada.

cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)

A tarefa levará cerca de 20 minutos; enquanto isso, vamos dar uma olhada nos parâmetros básicos de inicialização.

—network — a rede que criamos anteriormente.
—ssh-key — as chaves que criamos, que serão gravadas nos nós do cluster
—nodes n — Número de nós de trabalho no cluster. Sempre haverá um mestre, esta é uma limitação do CSE
—enable-nfs — cria um nó adicional para compartilhamentos NFS em volumes persistentes. É uma espécie de opção de pedal; voltaremos a afinar o que ele faz um pouco mais tarde.

Enquanto isso, no vCloud você pode monitorar visualmente a criação de um cluster
CSE: Kubernetes para quem usa vCloud

Assim que a tarefa de criação de um cluster for concluída, ele estará pronto para uso.

Vamos verificar a exatidão da implantação com o comando informações do cluster vcd cse MyCluster

CSE: Kubernetes para quem usa vCloud

Em seguida, precisamos obter a configuração do cluster para usar kubectl

# vcd cse cluster config MyCluster > ./.kube/config

E você pode verificar o status do cluster usando-o:

CSE: Kubernetes para quem usa vCloud

Neste ponto, o cluster pode ser considerado funcional condicionalmente, se não fosse pela história com volumes persistentes. Como estamos no vCloud, não poderemos usar o vSphere Provider. Opção --enable-nfs projetado para amenizar esse incômodo, mas não funcionou completamente. É necessário ajuste manual.

Para começar, nosso nó precisa criar um disco independente separado no vCloud. Isso garante que nossos dados não desaparecerão junto com o cluster caso sejam excluídos. Além disso, conecte o disco ao NFS

# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1

Depois disso, vamos via ssh (você realmente criou as chaves?) para o nosso nó NFS e finalmente conectamos o disco:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Crie um diretório para dados e monte uma nova partição lá:

mkdir /export
echo '/dev/sdb1  /export   ext4  defaults   0 0' >> /etc/fstab
mount -a

Vamos criar cinco partições de teste e compartilhá-las para o cluster:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/export/vol1 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol2 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol3 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol4 *(rw,sync,no_root_squash,no_subtree_check)
/export/vol5 *(rw,sync,no_root_squash,no_subtree_check)
#:wq! ;)
#Далее - экспортируем разделы
>exportfs -r

Depois de toda essa mágica, podemos criar PV e PVC em nosso cluster mais ou menos assim:
Repórter:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    server: 10.150.200.22
    path: "/export/vol1"
EOF

PVC:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: ""
  resources:
    requests:
      storage: 10Gi
EOF

É aqui que termina a história da criação de um cluster e começa a história do seu ciclo de vida. Como bônus, existem mais dois comandos CSE úteis que permitem às vezes economizar recursos ou não:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

Obrigado a todos pelo seu tempo, se tiverem alguma dúvida pergunte nos comentários.

Fonte: habr.com

Adicionar um comentário