CSE : Kubernetes pour ceux qui utilisent vCloud

CSE : Kubernetes pour ceux qui utilisent vCloud
Bonjour à tous!

Il se trouve que notre petite équipe, pour ne pas dire que récemment, et certainement pas soudainement, s'est agrandie pour migrer certains (et à l'avenir tous) des produits vers Kubernetes.

Il y a plusieurs raisons à cela, mais notre histoire ne concerne pas Holivar.

Nous n’avions guère de choix en ce qui concerne la base des infrastructures. vCloud Director et vCloud Director. Nous avons choisi le plus récent et avons décidé de commencer.

Une fois de plus, en parcourant « The Hard Way », je suis très vite arrivé à la conclusion qu'un outil permettant d'automatiser au moins les processus de base, tels que le déploiement et le dimensionnement, était nécessaire hier. Une plongée approfondie dans Google a mis en lumière un produit tel que VMware Container Service Extension (CSE) - un produit open source qui vous permet d'automatiser la création et le dimensionnement des clusters k8s pour ceux de vCloud.

Avertissement : CSE a ses limites, mais pour nos besoins, il était parfait. De plus, la solution doit être supportée par le fournisseur cloud, mais comme la partie serveur est également open-source, demandez à votre responsable le plus proche de la mettre à disposition :)

Pour commencer à l'utiliser, vous avez besoin d'un compte administrateur dans l'organisation vCloud et d'un réseau routé préalablement créé pour le cluster (pendant le processus de déploiement, vous avez besoin d'un accès Internet depuis ce réseau, n'oubliez pas de configurer le Pare-feu/NAT). L'adressage n'a pas d'importance. Dans cet exemple, prenons 10.0.240.0/24

CSE : Kubernetes pour ceux qui utilisent vCloud

Puisqu'après la création, le cluster devra être géré d'une manière ou d'une autre, il est recommandé de disposer d'un VPN avec routage vers le réseau créé. Nous utilisons un VPN SSL standard configuré sur la passerelle Edge de notre organisation.

Ensuite, vous devez installer le client CSE sur lequel les clusters k8s seront gérés. Dans mon cas, il s’agit d’un ordinateur portable fonctionnel et de quelques conteneurs bien cachés qui pilotent l’automatisation.

Le client nécessite Python version 3.7.3 et supérieure installée et le module installé vcd-cli, alors installons les deux.

pip3 install vcd-cli

pip3 install container-service-extension

Après l'installation, nous vérifions la version CSE et obtenons ce qui suit :

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

Inattendu, mais réparable. Il s'est avéré que CSE doit être attaché en tant que module à vcd-cli.
Pour ce faire, vous devez d'abord vous connecter vcd-cli à notre organisation :

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

Après cela, vcd-cli créera un fichier de configuration ~/.vcd-cli/profiles.yaml
À la fin, vous devez ajouter ce qui suit :

extensions:
  - container_service_extension.client.cse

Puis on vérifie à nouveau :

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

La phase d'installation du client est terminée. Essayons de déployer le premier cluster.
CSE dispose de plusieurs ensembles de paramètres d'utilisation, tous peuvent être consultés ici.

Tout d'abord, créons des clés pour un accès sans mot de passe au futur cluster. Ce point est important, car par défaut, la connexion par mot de passe aux nœuds sera désactivée et si vous ne définissez pas les clés, vous pouvez effectuer beaucoup de travail via les consoles des machines virtuelles, ce qui n'est pas pratique.

# 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.

Essayons de commencer à créer un cluster :

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

Si nous obtenons une erreur Erreur : la session a expiré ou l'utilisateur n'est pas connecté. Veuillez vous reconnecter. - connectez-vous à nouveau à vcd-cli à vCloud comme décrit ci-dessus et réessayez.

Cette fois, tout va bien et la tâche de création d'un cluster a commencé.

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

Il faudra environ 20 minutes pour terminer la tâche ; en attendant, examinons les paramètres de lancement de base.

—réseau — le réseau que nous avons créé plus tôt.
—ssh-key — les clés que nous avons créées, qui seront écrites sur les nœuds du cluster
—nodes n — Nombre de nœuds Worker dans le cluster. Il y aura toujours un maître, c'est une limitation du CSE
—enable-nfs — crée un nœud supplémentaire pour les partages NFS sous les volumes persistants. C'est un peu une option de pédale ; nous reviendrons sur le réglage de ce qu'elle fait un peu plus tard.

Pendant ce temps, dans vCloud, vous pouvez surveiller visuellement la création d'un cluster
CSE : Kubernetes pour ceux qui utilisent vCloud

Une fois la tâche de création d’un cluster terminée, celui-ci est prêt à être utilisé.

Vérifions l'exactitude du déploiement avec la commande informations sur le cluster vcd cse MyCluster

CSE : Kubernetes pour ceux qui utilisent vCloud

Ensuite, nous devons utiliser la configuration du cluster. kubectl

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

Et vous pouvez vérifier l'état du cluster en l'utilisant :

CSE : Kubernetes pour ceux qui utilisent vCloud

À ce stade, le cluster peut être considéré comme fonctionnant sous certaines conditions, s'il n'y a pas d'histoire avec des volumes persistants. Puisque nous sommes dans vCloud, nous ne pourrons pas utiliser vSphere Provider. Option --enable-nfs conçu pour atténuer cette nuisance, mais cela n’a pas fonctionné complètement. Ajustement manuel requis.

Pour commencer, notre nœud doit créer un disque indépendant distinct dans vCloud. Cela garantit que nos données ne disparaîtront pas avec le cluster s'il est supprimé. Connectez également le disque à NFS

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

Après cela, on passe via ssh (vous avez vraiment créé les clés ?) vers notre nœud NFS et enfin on connecte le disque :

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

Créez un répertoire pour les données et montez-y une nouvelle partition :

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

Créons cinq partitions de test et partageons-les pour le 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

Après toute cette magie, nous pouvons créer du PV et du PVC dans notre cluster quelque chose comme ceci :
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

C'est là que se termine l'histoire de la création d'un cluster et que commence l'histoire de son cycle de vie. En bonus, il existe deux autres commandes CSE utiles qui permettent parfois d'économiser des ressources ou non :

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

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

Merci à tous pour votre temps, si vous avez des questions, posez-les dans les commentaires.

Source: habr.com

Ajouter un commentaire