CSE: Kubernetes para cualquier persona en vCloud


Hola a todos!

Dio la casualidad de que nuestro pequeño equipo de desarrollo, por no decir que recientemente, y ciertamente no de repente, ha crecido para transferir algunos (y en el futuro, todos) productos a Kubernetes.

Había muchas razones para esto, pero nuestra historia no es sobre holivar.

Desde el punto de vista de la infraestructura, teníamos pocas opciones. vCloud Director y vCloud Director. Elegimos una versión más nueva y decidimos comenzar.

Una vez más, mirando a través de "The Hard Way", llegué rápidamente a la conclusión de que ayer se necesitaba una herramienta para automatizar al menos los procesos básicos, como la implementación y el dimensionamiento. La profunda inmersión en Google sacó a la luz un producto como VMware Container Service Extension (CSE), un producto de código abierto que le permite automatizar la creación y dimensionamiento de clústeres k8s para aquellos en vCloud.
Descargo de responsabilidad: CSE tiene sus limitaciones, pero para nuestros propósitos surgió perfectamente. Además, la solución debe ser compatible con el proveedor de la nube, pero dado que la parte del servidor también es de código abierto, solicítela al administrador más cercano :)

Instalación del cliente CSE


  1. Para comenzar, necesitará una cuenta de administrador en la organización vCloud y una red enrutada creada de antemano para el clúster. Importante: durante el proceso de implementación necesita acceso a Internet desde esta red, no olvide configurar Firewall / NAT.

    El direccionamiento no importa. En este ejemplo, tome 10.0.240.0/24:


    Dado que después de crear el clúster, deberá administrarlo de alguna manera, se recomienda que tenga una VPN enrutada a la red creada. Utilizamos SSL-VPN estándar configurado en Edge Gateway de nuestra organización.
  2. A continuación, debe instalar el cliente CSE en el que se administrarán los clústeres de k8s. En mi caso, esta es una computadora portátil que funciona y un par de contenedores bien escondidos que controlan la automatización.

    El cliente requiere Python instalado versión 3.7.3 y superior y un módulo vcd-cli instalado, por lo que instalaremos ambos.

    pip3 install vcd-cli pip3 install container-service-extension 
  3. Después de la instalación, verifique la versión de CSE y obtenga lo siguiente:

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

    Inesperadamente, pero reparable.
  4. Al final resultó que, CSE necesita ser atornillado como un módulo para vcd-cli.
    Para hacer esto, primero debe iniciar sesión vcd-cli en nuestra organización:

     # vcd login MyCloud.provider.com org-dev admin Password: admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01' 
  5. Después de eso, vcd-cli creará el archivo de configuración ~ / .vcd-cli / profiles.yaml
    Al final, debe agregar lo siguiente:

     extensions: - container_service_extension.client.cse 
  6. Luego verificamos nuevamente:

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

La fase de instalación del cliente está completa. Intentemos implementar el primer clúster.

Despliegue de clúster


CSE tiene varios conjuntos de parámetros de uso, todos los cuales se pueden ver aquí.

  1. Primero, cree las claves para el acceso sin contraseña al futuro clúster. Este punto es importante, porque de forma predeterminada, la entrada de contraseña en los nodos estará deshabilitada. Y, si no especifica las claves, puede obtener mucho trabajo a través de la consola de la máquina virtual, lo cual no es 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. Intentamos comenzar a crear un clúster:

     vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs 
  3. Si recibimos un error: la sesión ha expirado o el usuario no ha iniciado sesión. Por favor, vuelva a iniciar sesión. - Vuelva a iniciar sesión en vcd-cli en vCloud, como se describió anteriormente, e intente nuevamente.

    Esta vez, todo está bien y la tarea de crear un clúster ha comenzado.

     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. Tardará unos 20 minutos en completar la tarea. Mientras tanto, analizaremos los principales parámetros de lanzamiento.
    • --network - la red que creamos anteriormente.
    • --ssh-key - claves creadas por nosotros, que se escribirán en los nodos del clúster.
    • --nodes n - El número de nodos de trabajo del clúster. Siempre habrá un asistente, esta es una limitación CSE.
    • --enable-nfs: crea un nodo adicional para bolas NFS en volúmenes persistentes. Como una opción de pedal, volveremos un poco más tarde para ajustar lo que hace.

  5. Mientras tanto, en vCloud, puede observar visualmente la creación de un clúster.

  6. Una vez que se completa la tarea de crear un clúster, está listo para comenzar.
  7. Verifique la implementación con el comando vcd cse cluster info MyCluster .

  8. Luego, necesitamos obtener la configuración del clúster para usar kubectl .

     # vcd cse cluster config MyCluster > ./.kube/config 
  9. Y puede verificar el estado del clúster usándolo:


No tan simple


En este punto, el clúster puede considerarse condicionalmente operativo, si no fuera por la historia con volúmenes persistentes. Dado que estamos en vCloud, el uso de vSphere Provider fallará. La opción --enable-nfs está diseñada para suavizar este problema, pero no funcionó hasta el final. Se requiere sintonización manual.

  1. Para comenzar, nuestro nodo necesita crear un disco independiente independiente en vCloud. Esto garantiza que nuestros datos no desaparezcan con el clúster si se eliminan. Además, conecte la unidad a NFS.

     # vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares' # vcd vapp attach mycluster nfsd-9604 nfs-shares-1 
  2. Después de eso, pasamos por ssh (¿realmente creaste las claves?) A nuestro nodo NFS y finalmente conectamos el 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. Cree un directorio para los datos y monte una nueva sección allí:

     mkdir /export echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab mount -a 
  4. Creemos cinco secciones de prueba y compártalas para el clúster:

     >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. Después de toda esta magia, puede crear PV y PVC en nuestro clúster de esta manera:

    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 

En esto, la historia de crear un grupo termina y comienza la historia de su ciclo de vida. Como beneficio adicional, hay dos comandos CSE más útiles que le permiten ahorrar recursos a veces o no :

 #    8   >cse cluster resize MyCluster --network k8s_cluster_net --nodes 8 #         >vcd cse node delete MyCluster node-1a2v node-6685 --yes 

Gracias a todos por su tiempo, si tienen preguntas, pregunten en los comentarios.

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


All Articles