CSE: Kubernetes para quienes están en vCloud

CSE: Kubernetes para quienes están en vCloud
Hola a todos!

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

Hubo muchas razones para esto, pero nuestra historia no trata sobre Holívar.

En cuanto a la base de infraestructura, no teníamos muchas opciones. vCloud Director y vCloud Director. Elegimos el más nuevo y decidimos empezar.

Una vez más, mirando “de la manera difícil”, rápidamente llegué a la conclusión de que ayer se necesitaba una herramienta para automatizar al menos procesos básicos, como la implementación y el dimensionamiento. Una inmersión profunda en Google sacó a la luz un producto como VMware Container Service Extension (CSE), un producto de código abierto que permite automatizar la creación y el dimensionamiento de clústeres k8 para aquellos en vCloud.

Descargo de responsabilidad: CSE tiene sus limitaciones, pero para nuestros propósitos fue perfecto. Además, la solución debe ser compatible con el proveedor de la nube, pero como la parte del servidor también es de código abierto, pídele a tu administrador más cercano que la tenga disponible :)

Para comenzar a usarlo, necesita una cuenta de administrador en la organización vCloud y una red enrutada previamente creada para el clúster (durante el proceso de implementación, necesita acceso a Internet desde esta red, no olvide configurar Firewall/NAT). No importa el abordaje. En este ejemplo, tomemos 10.0.240.0/24

CSE: Kubernetes para quienes están en vCloud

Dado que después de la creación el clúster deberá administrarse de alguna manera, se recomienda tener una VPN con enrutamiento a la red creada. Usamos una VPN SSL estándar configurada en Edge Gateway de nuestra organización.

A continuación, debe instalar el cliente CSE donde se administrarán los clústeres k8s. En mi caso, se trata de una computadora portátil que funciona y un par de contenedores bien escondidos que impulsan la automatización.

El cliente requiere Python versión 3.7.3 y superior instalado y el módulo instalado vcd-cli, así que instalemos ambos.

pip3 install vcd-cli

pip3 install container-service-extension

Después de la instalación, verificamos la versión CSE y obtenemos lo siguiente:

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

Inesperado, pero reparable. Al final resultó que, CSE debe conectarse como módulo a 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'

Después de esto, vcd-cli creará un archivo de configuración. ~/.vcd-cli/profiles.yaml
Al final debes agregar lo siguiente:

extensions:
  - container_service_extension.client.cse

Luego comprobamos de nuevo:

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

Se completa la fase de instalación del cliente. Intentemos implementar el primer clúster.
CSE tiene varios conjuntos de parámetros de uso, todos ellos se pueden ver aquí.

Primero, creemos claves para el acceso sin contraseña al futuro clúster. Este punto es importante, ya que de forma predeterminada el inicio de sesión con contraseña en los nodos estará deshabilitado y, si no configura las claves, puede trabajar mucho a través de las consolas 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.

Intentemos 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

Si recibimos un error Error: la sesión expiró o el usuario no inició sesión. Por favor vuelva a iniciar sesión. — Vuelva a iniciar sesión en vcd-cli en vCloud como se describe arriba y vuelva a intentarlo.

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

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

Tardará unos 20 minutos en completar la tarea; mientras tanto, veamos los parámetros básicos de lanzamiento.

—red: la red que creamos anteriormente.
—ssh-key: las claves que creamos, que se escribirán en los nodos del clúster
—nodes n: número de nodos trabajadores en el clúster. Siempre habrá un maestro, esto es una limitación del CSE
—enable-nfs: crea un nodo adicional para recursos compartidos NFS en volúmenes persistentes. Es una especie de opción de pedal; volveremos a afinar lo que hace un poco más adelante.

Mientras tanto, en vCloud puedes monitorear visualmente la creación de un cluster
CSE: Kubernetes para quienes están en vCloud

Una vez completada la tarea de crear un clúster, estará listo para su uso.

Comprobemos la corrección del despliegue con el comando. información del clúster vcd cse MyCluster

CSE: Kubernetes para quienes están en vCloud

A continuación necesitamos obtener la configuración del clúster para usar. kubectl

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

Y puedes verificar el estado del clúster usándolo:

CSE: Kubernetes para quienes están en vCloud

En este punto, se puede considerar que el clúster funciona condicionalmente, si no fuera por la historia con volúmenes persistentes. Como estamos en vCloud, usar vSphere Provider no funcionará. Opción --enable-nfs diseñado para suavizar esta molestia, pero no funcionó del todo. Se requiere ajuste manual.

Para comenzar, nuestro nodo necesita crear un disco independiente separado en vCloud. Esto garantiza que nuestros datos no desaparecerán junto con el clúster si este se elimina. Además, conecte el disco a NFS.

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

Después de eso, vamos vía 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

Cree un directorio para datos y monte una partición nueva allí:

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

Creemos cinco particiones de prueba y compartámoslas 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

Después de toda esta magia, podemos crear PV y PVC en nuestro clúster de esta manera:
VP:

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

CLORURO DE POLIVINILO:

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

Aquí es donde termina la historia de la creación de un grupo y comienza la historia de su ciclo de vida. Como beneficio adicional, hay dos comandos CSE más útiles que en ocasiones te permiten ahorrar recursos 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 alguna pregunta, pregunten en los comentarios.

Fuente: habr.com

Añadir un comentario