
Bonjour à tous !
Il s'est avéré que notre petite équipe, pas vraiment récemment, et certainement pas de manière inattendue, a grandi jusqu'à déplacer certains (et potentiellement tous) de nos produits vers Kubernetes.
Il y a eu de nombreuses raisons, mais notre histoire n'est pas une question de mécontentement.
Quant aux infrastructures, notre choix était limité. vCloud Director et vCloud Director. Nous avons choisi le plus récent et décidé de commencer.
En feuilletant à nouveau « The Hard Way », j'ai rapidement réalisé qu'un outil d'automatisation pour au moins les processus de base, tels que le déploiement et le dimensionnement, était nécessaire dès hier. Une immersion profonde dans Google a révélé un produit tel que VMware Container Service Extension (CSE) — un produit open-source permettant d'automatiser la création et le dimensionnement de clusters k8s pour ceux qui sont dans vCloud.
Avertissement : Le CSE a ses limites, mais il convient parfaitement à nos objectifs. La solution doit également être prise en charge par le fournisseur de cloud, mais puisque la partie serveur est également open-source, demandez sa disponibilité à votre gestionnaire le plus proche 🙂
Pour commencer, un compte administrateur dans l'organisation vCloud est nécessaire et un réseau routé préalablement créé pour le cluster (un accès Internet depuis ce réseau est nécessaire lors du déploiement, 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.
![]()
Étant donné qu'après la création, le cluster devra être géré d'une certaine manière, il est recommandé d'avoir un VPN avec routage vers le réseau créé. Nous utilisons un SSL-VPN standard, configuré sur l'Edge Gateway de notre organisation.
Ensuite, il est nécessaire d'installer le client CSE là d'où la gestion des clusters k8s sera effectuée. Dans mon cas, c'est mon ordinateur portable de travail et quelques conteneurs bien cachés qui gèrent l'automatisation.
Le client nécessite une version Python installée de 3.7.3 ou supérieure et le module , donc nous allons installer les deux.
pip3 install vcd-cli
pip3 install container-service-extension
Après l'installation, vérifions la version du CSE et obtenons ce qui suit :
# vcd cse version
Error: No such command "cse".
Surprise, mais cela peut être corrigé. Il s'avère que le CSE doit être intégré comme un module au vcd-cli.
Pour cela, il faut d'abord se connecter à vcd-cli dans 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 de celui-ci, il est nécessaire d'ajouter ce qui suit :
extensions:
- container_service_extension.client.cse
Ensuite, nous vérifions à nouveau :
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
L'étape d'installation du client est terminée. Essayons de déployer le premier cluster.
CSE dispose de plusieurs ensembles de paramètres d'utilisation, que vous pouvez consulter
Pour commencer, créons des clés pour un accès sans mot de passe au futur cluster. Ce point est important, car par défaut, l'accès par mot de passe aux nœuds sera désactivé. Si les clés ne sont pas définies, cela pourrait entraîner beaucoup de travail via la console des machines virtuelles, ce qui n'est pas très 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 lancer la création du cluster :
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/ .ssh/id_rsa.pub --nodes 3 --enable-nfsSi nous obtenons une erreur Error: Session has expired or user not logged in. Please re-login. — reconnectons-nous à vCloud via vcd-cli comme décrit ci-dessus et réessayons.
Cette fois, tout s'est bien passé et la tâche de création du cluster a été lancée.
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 principaux paramètres de lancement.
—network — le réseau que nous avons créé précédemment.
—ssh-key — les clés que nous avons créées, qui seront enregistrées sur les nœuds du cluster.
—nodes n — Le nombre de nœuds de travail du cluster. Il y aura toujours un maître, c'est une limitation du CSE.
—enable-nfs — créer un nœud supplémentaire pour le partage NFS sous les volumes persistants. C'est une option un peu délicate, nous reviendrons un peu plus tard sur les réglages qu'elle implique.
En attendant, dans vCloud, vous pouvez observer visuellement la création du cluster.

Une fois la tâche de création du cluster terminée, il est prêt à fonctionner.
Vérifions la correction du déploiement avec la commande vcd cse cluster info MyCluster

Ensuite, nous devons obtenir la configuration du cluster pour l'utiliser. kubectl
# vcd cse cluster config MyCluster > ./.kube/config
Et nous pouvons vérifier l'état du cluster avec elle :

À ce stade, le cluster peut être considéré comme fonctionnel, si ce n'était l'historique avec les volumes persistants. Comme nous sommes dans vCloud, il ne sera pas possible d'utiliser vSphere Provider. L'option —enable-nfs vise à atténuer cette problématique, mais cela n'a pas complètement fonctionné. Un réglage manuel est nécessaire.
Pour commencer, notre nœud doit créer un disque indépendant dans vCloud. Cela garantit que nos données ne disparaîtront pas avec le cluster, s'il est supprimé. De plus, nous connecterons le disque au NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
Après cela, nous accédons par ssh (vous avez bien créé des clés ?) à notre nœud NFS et connectons définitivement le disque :
root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Avertissement : L'étiquette de disque existante sur /dev/sdb sera détruite et toutes les données sur
ce disque seront perdues. Voulez-vous continuer ?
Oui/Non ? oui
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Modèle : Disque virtuel VMware (scsi)
Disque /dev/sdb : 100 Go
Taille de secteur (logique/physique) : 512B/512B
Table de partition : gpt
Drapeaux de disque :
Numéro Début Fin Taille Système de fichiers Nom Drapeaux
1 0.00Go 100Go 100Go primaire
(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Création du système de fichiers avec 24413696 blocs de 4 Ko et 6111232 inodes
UUID du système de fichiers : 8622c0f5-4044-4ebf-95a5-0372256b34f0
Sauvegardes de superbloc stockées sur les blocs :
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocation des tables de groupes : terminé
Écriture des tables d'inodes : terminé
Création du journal (32768 blocs) : terminé
Écriture des superblocs et des informations de comptabilité du système de fichiers : terminé
Créons un répertoire pour les données et montons la 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
#Ajouter ceci à la fin du fichier
/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! ;)
#Ensuite - exporter les partitions
>exportfs -r
Après toute cette magie, nous pouvons créer un PV et un PVC dans notre cluster comme ceci :
PV :
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
# Même IP que l'hôte NFS auquel nous avons accédé par ssh précédemment.
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
Ainsi se termine l'histoire de la création d'un cluster et commence celle de son cycle de vie. En bonus – deux commandes CSE utiles, permettant parfois de faire des économies d'énergie ou de ressources :
#Увеличиваем размер кластера до 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
