Olá pessoal!Aconteceu que nossa pequena equipe de desenvolvimento, para não dizer que recentemente, e certamente não de repente, cresceu para transferir alguns (e no futuro, todos) produtos para o Kubernetes.
Havia muitas razões para isso, mas nossa história não é sobre holivar.
Do ponto de vista da infraestrutura, tivemos poucas opções. Diretor do vCloud e Diretor do vCloud. Escolhemos uma versão mais recente e decidimos começar.
Mais uma vez, examinando The Hard Way, cheguei rapidamente à conclusão de que uma ferramenta para automatizar pelo menos processos básicos, como implantação e dimensionamento, era necessária ontem. A imersão profunda no Google trouxe à tona 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 os do vCloud.
Isenção de responsabilidade: a CSE tem suas limitações, mas, para nossos propósitos, surgiu perfeitamente. 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, solicite-a ao gerente mais próximo :)
Instalação do cliente CSE
- Para começar, você precisará de uma conta de administrador na organização do vCloud e de uma rede roteada criada previamente para o cluster. Importante: durante o processo de implantação, você precisa de acesso à Internet a partir desta rede, não esqueça de configurar o Firewall / NAT.
O endereçamento não importa. Neste exemplo, pegue 10.0.240.0/24:

Como após a criação do cluster, será necessário gerenciar de alguma forma, a presença de uma VPN com roteamento para a rede criada é recomendada. Usamos SSL-VPN padrão configurado no Edge Gateway da nossa organização.
- Em seguida, você precisa instalar o cliente CSE no local onde os clusters k8s serão gerenciados. No meu caso, este é um laptop funcional e alguns contêineres
bem ocultos que orientam a automação.
O cliente requer o Python instalado versão 3.7.3 e superior e um módulo vcd-cli instalado, portanto, instalaremos os dois.
pip3 install vcd-cli pip3 install container-service-extension
- Após a instalação, verifique a versão do CSE e obtenha o seguinte:
# vcd cse version Error: No such command "cse".
Inesperadamente, mas corrigível. - Como se viu, o CSE precisa ser parafusado como um módulo para vcd-cli.
Para fazer isso, você deve primeiro fazer login 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, o vcd-cli criará o arquivo de configuração ~ / .vcd-cli / profiles.yaml
No final, você deve adicionar o seguinte:
extensions: - container_service_extension.client.cse
- Em seguida, 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.
Implantação de Cluster
O CSE possui vários conjuntos de parâmetros de uso, todos os quais podem ser visualizados
aqui.- Primeiro, crie as chaves para acesso sem senha ao futuro cluster. Este ponto é importante, porque, por padrão, a entrada de senha nos nós será desativada. E, se você não especificar as chaves, poderá trabalhar bastante no console da máquina virtual, 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.
- Tentamos 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 recebermos o erro: A sessão expirou ou o usuário não está logado. Por favor, faça o login novamente. - efetue login no vcd-cli no vCloud novamente, conforme descrito acima, e tente novamente.
Desta vez, está tudo bem, e a tarefa de criar 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)
- Levará cerca de 20 minutos para concluir a tarefa. Enquanto isso, analisaremos os principais parâmetros de inicialização.
- --network - a rede que criamos anteriormente.
- --ssh-key - chaves criadas por nós, que serão gravadas nos nós do cluster.
- --nodes n - O número de nós de trabalho do cluster. Sempre haverá um assistente, essa é uma limitação do CSE.
- --enable-nfs - cria um nó adicional para as esferas do NFS em volumes persistentes. Como uma opção de pedal, retornaremos um pouco mais tarde para ajustar o que ela faz.
- Enquanto isso, no vCloud, você pode observar visualmente a criação de um cluster.

- Depois que a tarefa de criar um cluster estiver concluída, ela estará pronta.
- Verifique a implantação com o comando vcd cse cluster info MyCluster .

- Em seguida, precisamos obter a configuração do cluster para usar o kubectl .
# vcd cse cluster config MyCluster > ./.kube/config
- E você pode verificar o status do cluster usando-o:

Não é tão simples
Nesse ponto, o cluster pode ser considerado condicionalmente operacional, se não for para a história com volumes persistentes. Como estamos no vCloud, o uso do vSphere Provider falhará. A opção
--enable-nfs foi projetada para amenizar esse problema, mas não deu certo até o fim. É necessário o ajuste manual.
- Para começar, nosso nó precisa criar um disco independente separado no vCloud. Isso garante que nossos dados não desapareçam com o cluster se forem excluídos. Além disso, conecte a unidade ao NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares' # vcd vapp attach mycluster nfsd-9604 nfs-shares-1
- Depois disso, passamos pelo ssh (você realmente criou as chaves?) Para o 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 os dados e monte uma nova seção lá:
mkdir /export echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab mount -a
- Vamos criar cinco seções de teste e compartilhá-las no cluster:
>cd /export >mkdir vol1 vol2 vol3 vol4 vol5 >vi /etc/exports
- Depois de toda essa mágica, você pode criar PV e PVC em nosso cluster assim:
PV
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolume metadata: name: nfs-vol1 spec: capacity: storage: 10Gi accessModes: - ReadWriteMany nfs:
PVC
cat <<EOF | kubectl apply -f - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: nfs-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 10Gi EOF
Com isso, a história de criação de um cluster termina e a história de seu ciclo de vida começa. Como bônus, existem mais dois comandos CSE úteis que permitem economizar recursos às vezes
ou não :
Obrigado a todos pelo seu tempo, se você tiver dúvidas - pergunte nos comentários.