CSE: Kubernetes per chi è in vCloud

CSE: Kubernetes per chi è in vCloud
Ciao a tutti!

È successo così che il nostro piccolo team, per non dire che recentemente, e certamente non all'improvviso, sia cresciuto per spostare alcuni (e in futuro tutti) prodotti su Kubernetes.

C'erano molte ragioni per questo, ma la nostra storia non riguarda l'holivar.

Avevamo poca scelta per quanto riguarda l’infrastruttura di base. vCloud Director e vCloud Director. Abbiamo scelto quello più nuovo e abbiamo deciso di iniziare.

Ancora una volta, esaminando "The Hard Way", sono giunto molto rapidamente alla conclusione che ieri era necessario uno strumento per automatizzare almeno i processi di base, come la distribuzione e il dimensionamento. Un'analisi approfondita di Google ha portato alla luce un prodotto come VMware Container Service Extension (CSE), un prodotto open source che consente di automatizzare la creazione e il dimensionamento dei cluster k8 per quelli in vCloud.

Disclaimer: CSE ha i suoi limiti, ma per i nostri scopi era perfetto. Inoltre la soluzione deve essere supportata dal cloud provider, ma visto che anche la parte server è open source chiedi al tuo responsabile più vicino di averla a disposizione :)

Per iniziare a utilizzarlo, è necessario un account amministratore nell'organizzazione vCloud e una rete instradata creata in precedenza per il cluster (durante il processo di distribuzione, è necessario l'accesso a Internet da questa rete, non dimenticare di configurare Firewall/NAT). L'indirizzo non ha importanza. In questo esempio, prendiamo 10.0.240.0/24

CSE: Kubernetes per chi è in vCloud

Poiché dopo la creazione il cluster dovrà essere gestito in qualche modo, si consiglia di disporre di una VPN con instradamento alla rete creata. Utilizziamo una VPN SSL standard configurata sull'Edge Gateway della nostra organizzazione.

Successivamente è necessario installare il client CSE dove verranno gestiti i cluster k8s. Nel mio caso, si tratta di un laptop funzionante e di un paio di contenitori ben nascosti che guidano l'automazione.

Il client richiede Python versione 3.7.3 e successive installate e il modulo installato vcd-cli, quindi installiamoli entrambi.

pip3 install vcd-cli

pip3 install container-service-extension

Dopo l'installazione, controlliamo la versione CSE e otteniamo quanto segue:

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

Inaspettato, ma risolvibile. Come si è scoperto, CSE deve essere collegato come modulo a vcd-cli.
Per fare ciò, devi 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 è necessario aggiungere quanto segue:

extensions:
  - container_service_extension.client.cse

Quindi controlliamo di nuovo:

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

La fase di installazione del client è completata. Proviamo a distribuire il primo cluster.
CSE ha diversi set di parametri di utilizzo, tutti possono essere visualizzati qui.

Innanzitutto, creiamo le chiavi per l'accesso senza password al futuro cluster. Questo punto è importante, poiché per impostazione predefinita l'accesso tramite password ai nodi sarà disabilitato e se non si impostano le chiavi, è possibile ottenere molto lavoro attraverso le console delle macchine virtuali, il che non è 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.

Proviamo a iniziare a creare un cluster:

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

Se riceviamo un errore Errore: la sessione è scaduta o l'utente non ha effettuato l'accesso. Effettua nuovamente l'accesso. — accedi nuovamente a vcd-cli su vCloud come descritto sopra e riprova.

Questa volta va tutto bene e il compito di creare un cluster è iniziato.

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

Ci vorranno circa 20 minuti per portare a termine l'operazione; nel frattempo diamo un'occhiata ai parametri base di lancio.

—rete: la rete che abbiamo creato in precedenza.
—ssh-key — le chiavi che abbiamo creato, che verranno scritte sui nodi del cluster
—nodes n — Numero di nodi di lavoro nel cluster. Ci sarà sempre un master, questa è una limitazione CSE
—enable-nfs: crea un nodo aggiuntivo per le condivisioni NFS nei volumi persistenti. È un po' un'opzione del pedale; torneremo ad accordare ciò che fa un po' più tardi.

Intanto in vCloud puoi monitorare visivamente la creazione di un cluster
CSE: Kubernetes per chi è in vCloud

Una volta completata l'attività di creazione di un cluster, questo è pronto per l'uso.

Verifichiamo la correttezza della distribuzione con il comando informazioni sul cluster vcd cse MyCluster

CSE: Kubernetes per chi è in vCloud

Successivamente dobbiamo ottenere la configurazione del cluster da utilizzare kubectl

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

E puoi controllare lo stato del cluster utilizzandolo:

CSE: Kubernetes per chi è in vCloud

A questo punto, il cluster può essere considerato condizionatamente funzionante, se non fosse per la storia con volumi persistenti. Dato che siamo in vCloud, non saremo in grado di utilizzare vSphere Provider. Opzione --enable-nfs progettato per appianare questo fastidio, ma non ha funzionato completamente. È necessaria la regolazione manuale.

Per iniziare, il nostro nodo deve creare un disco indipendente separato in vCloud. Ciò garantisce che i nostri dati non scompariranno insieme al cluster se viene eliminato. Inoltre, collega il disco a NFS

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

Dopodiché andiamo via ssh (hai davvero creato le chiavi?) al nostro nodo NFS e infine colleghiamo il 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

Crea una directory per i dati e monta lì una nuova partizione:

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

Creiamo cinque partizioni di test e condividile per il 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

Dopo tutta questa magia, possiamo creare PV e PVC nel nostro cluster in questo modo:
Reporter:

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

È qui che finisce la storia della creazione di un cluster e inizia la storia del suo ciclo di vita. Come bonus, ci sono altri due utili comandi CSE che ti consentono a volte di risparmiare risorse o meno:

#Увеличиваем размер кластера до 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 vostro tempo, se avete domande, fatele nei commenti.

Fonte: habr.com

Aggiungi un commento