CSE: Kubernetes para qualquer pessoa no vCloud


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


  1. 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.
  2. 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 
  3. 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.
  4. 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' 
  5. 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 
  6. 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.

  1. 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. 
  2. 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 
  3. 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) 
  4. 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.

  5. Enquanto isso, no vCloud, você pode observar visualmente a criação de um cluster.

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

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

     # vcd cse cluster config MyCluster > ./.kube/config 
  9. 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.

  1. 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 
  2. 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 
  3. 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 
  4. Vamos criar cinco seções de teste e compartilhá-las no 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 
  5. 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: # 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 

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 :

 #    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 você tiver dúvidas - pergunte nos comentários.

Source: https://habr.com/ru/post/pt472752/


All Articles