
Ciao a tutti!
È così che la nostra piccola squadra, non da poco tempo e, di certo, non all'improvviso, è arrivata a migrare alcuni (e nel futuro tutti) i prodotti su Kubernetes.
Ci sono stati molti motivi, ma la nostra storia non riguarda polemiche.
Avevamo pochi fondamenti infrastrutturali. vCloud Director e vCloud Director. Abbiamo scelto quello più aggiornato e deciso di cominciare.
Sfogliando ancora una volta "The Hard Way", sono giunto rapidamente alla conclusione che uno strumento per automatizzare almeno i processi di base, come il deployment e il sizing, era necessario da ieri. Un'immersione profonda in Google ha rivelato un prodotto chiamato VMware Container Service Extension (CSE) — un prodotto open source che consente di automatizzare la creazione e il sizing dei cluster k8s per chi sta usando vCloud.
Disclaimer: CSE ha le sue limitazioni, ma per i nostri scopi era perfetto. Inoltre, la soluzione deve essere supportata dal fornitore di cloud, ma poiché la parte server è anch'essa open-source, richiedetene la disponibilità al manager più vicino 🙂
Per iniziare, è necessario un account amministratore nell'organizzazione vCloud e una rete routata pre-creata per il cluster (durante il processo di deployment è necessaria l'accesso a Internet da questa rete, non dimenticate di configurare il Firewall/NAT). L'indirizzamento non ha importanza. In questo esempio utilizzeremo 10.0.240.0/24.
![]()
Dato che dopo la creazione, sarà necessario gestire il cluster, si consiglia di avere una VPN con routing sulla rete creata. Noi utilizziamo una SSL-VPN standard, configurata sull'Edge Gateway della nostra organizzazione.
Successivamente è necessario installare il client CSE da cui verranno gestiti i cluster k8s. Nel mio caso, questo è un laptop aziendale e un paio di contenitori ben nascosti che gestiscono l'automazione.
Il client richiede Python versione 3.7.3 o superiore e l'installazione del modulo , quindi installeremo entrambi.
pip3 install vcd-cli
pip3 install container-service-extension
Dopo l'installazione, controlliamo la versione di CSE e otteniamo quanto segue:
# vcd cse version
Error: No such command "cse".
Inaspettato, ma correggibile. Come si è rivelato, è necessario integrare CSE come modulo a vcd-cli.
Per fare ciò, è necessario prima accedere a vcd-cli nella nostra organizzazione:
# vcd login MyCloud.provider.com org-dev admin
Password:
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'
Successivamente, vcd-cli creerà un file di configurazione ~/.vcd-cli/profiles.yaml
Alla fine di questo file è necessario aggiungere quanto segue:
extensions:
- container_service_extension.client.cse
Dopo di che, verifichiamo di nuovo:
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
Fase di installazione del cliente completata. Proviamo a distribuire il primo cluster.
CSE ha diversi set di parametri di utilizzo, tutti visibili
Per cominciare, creiamo le chiavi per l'accesso senza password al futuro cluster. Questo è un aspetto importante, poiché per impostazione predefinita l'accesso tramite password alle nodi sarà disabilitato e, se non si impostano le chiavi, sarà necessario eseguire molte operazioni tramite la console delle macchine virtuali, il che non è proprio comodo.
# 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.
Proviamo a avviare la creazione del cluster:
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/ .ssh/ id_rsa.pub --nodes 3 --enable-nfsSe otteniamo un errore Error: Session has expired or user not logged in. Please re-login. — effettuiamo nuovamente il login in vcd-cli su vCloud come descritto sopra e riprovando.
Questa volta va tutto bene e il compito di creazione del cluster è stato avviato.
operazione del cluster: Creazione del vApp del cluster 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) da template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)
Il completamento del compito richiederà circa 20 minuti, nel frattempo analizziamo i principali parametri di avvio.
—network — rete creata in precedenza.
—ssh-key — chiavi che abbiamo creato, che saranno scritte sui nodi del cluster.
—nodes n — Numero di nodi Worker del cluster. Il Master sarà sempre uno, è una limitazione di CSE.
—enable-nfs — creare un nodo aggiuntivo per la condivisione NFS per i volumi persistenti. Un'opzione leggermente pedante, per un affinamento di ciò che fa, ci torneremo più tardi.
Nel frattempo, su vCloud possiamo osservare visivamente la creazione del cluster.

Una volta completato il compito di creazione del cluster, esso è pronto per l'uso.
Verifichiamo la correttezza del deployment con il comando vcd cse cluster info MyCluster

Dopodiché dobbiamo ottenere la configurazione del cluster per l'uso. kubectl
# vcd cse cluster config MyCluster > ./.kube/config
E possiamo controllare lo stato del cluster già utilizzando essa:

A questo punto, il cluster può essere considerato sostanzialmente operativo, se non fosse per la questione dei volumi persistenti. Poiché siamo in vCloud, non possiamo utilizzare il fornitore vSphere. L'opzione —enable-nfs è stata pensata per mitigare questo inconveniente, ma non è completamente efficace. È necessaria una configurazione manuale.
Per cominciare, al nostro nodo è necessario creare un disco indipendente separato in vCloud. Questo garantisce che i nostri dati non scompaiano insieme al cluster nel caso venga eliminato. Inoltre, colleghiamo il disco a NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
Dopo di che, accediamo via ssh (vero, che avete creato le chiavi?) al nostro nodo NFS e colleghiamo definitivamente il disco:
root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Attenzione: L'etichetta esistente sul disco /dev/sdb verrà distrutta e tutti i dati su
questo disco verranno persi. Vuoi continuare?
Sì/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Modello: VMware Virtual disk (scsi)
Disco /dev/sdb: 100GB
Dimensione del settore (logico/fisico): 512B/512B
Tabella delle partizioni: gpt
Flag del disco:
Numero Inizio Fine Dimensione File system Nome Flag
1 0.00GB 100GB 100GB primary
(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creazione del filesystem con 24413696 blocchi da 4k e 6111232 inode
UUID del filesystem: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Backup del superblocchi salvati nei blocchi:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Allocazione delle tabelle di gruppo: completato
Scrittura delle tabelle inode: completato
Creazione del journal (32768 blocchi): completato
Scrittura dei superblocchi e delle informazioni di contabilità del filesystem: completato
Creiamo una directory per i dati e montiamo lì la nuova partizione:
mkdir /export
echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
mount -a
Creiamo cinque partizioni di prova e le condividiamo per il cluster:
>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Aggiungiamo questo alla fine del file
/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! ;)
#Successivamente - esportiamo le partizioni
>exportfs -r
Dopo tutta questa magia, possiamo creare PV e PVC nel nostro cluster in questo modo:
PV:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
# Stessa IP dell'host NFS a cui ci siamo connessi prima.
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
Con questo si conclude la storia della creazione di un cluster e inizia la sua storia di vita. Come bonus, ecco altre due comandi utili CSE, che a volte possono far risparmiare o meno risorse:
#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8
#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes
Grazie a tutti per il tempo dedicato, se avete domande - chiedete nei commenti.
Fonte: habr.com
