
Salut tuturor!
Așa s-a întâmplat că mica noastră echipă, nu tocmai recent și cu siguranță nu dintr-o dată, a ajuns să transfere unele (iar pe termen lung, toate) produse în Kubernetes.
Cauzele au fost multe, dar povestea noastră nu este despre polemică.
Din punct de vedere al infrastructurii, opțiunile noastre au fost limitate. vCloud Director și vCloud Director. Am ales varianta mai recentă și am decis să începem.
Răsfoind din nou «The Hard Way», am ajuns foarte repede la concluzia că un instrument pentru automatizarea măcar a proceselor de bază, cum ar fi desfășurarea și dimensionarea, era necesar încă de ieri. O cercetare profundă pe Google a revelat un produs numit VMware Container Service Extension (CSE) — un produs open-source care permite automatizarea creării și dimensionării clustere k8s pentru cei care folosesc vCloud.
Disclaimer: CSE are limitările sale, dar pentru scopurile noastre s-a potrivit perfect. De asemenea, soluția trebuie să fie suportată de furnizorul de cloud, dar din moment ce partea server este de asemenea open-source, cereți-i prezența de la cel mai apropiat manager 🙂
Pentru a începe utilizarea, este necesar un cont de administrator în organizația vCloud și o rețea routată creată din timp pentru cluster (în timpul desfășurării, este necesar acces la internet din această rețea, nu uitați să configurați Firewall/NAT). Adresarea nu are importanță. În acest exemplu vom lua 10.0.240.0/24.
![]()
Deoarece după creare, cluster-ul trebuie gestionat într-un fel, este recomandată existența unei conexiuni VPN cu rutare către rețeaua creată. Folosim un SSL-VPN standard, configurat pe Edge Gateway-ul organizației noastre.
În continuare, trebuie să instalăm clientul CSE acolo de unde va fi gestionat clusterul k8s. În cazul meu, este un laptop de lucru și câteva containere bine ascunse, care se ocupă de automatizare.
Clientul necesită instalarea Python, versiunea 3.7.3 sau mai recentă și instalarea modulului , așa că vom instala ambele.
pip3 install vcd-cli
pip3 install container-service-extension
După instalare, verificăm versiunea CSE și obținem următoarele:
# vcd cse version
Error: No such command "cse".
Pe neașteptate, dar rezolvabil. Se pare că CSE trebuie integrat ca modul în vcd-cli.
Pentru aceasta, trebuie mai întâi să ne conectăm cu vcd-cli la organizația noastră:
# vcd login MyCloud.provider.com org-dev admin
Password:
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'
După aceasta, vcd-cli va crea un fișier de configurație ~/.vcd-cli/profiles.yaml
La finalul acestuia trebuie să adăugăm următoarele:
extensions:
- container_service_extension.client.cse
După care, verificăm din nou:
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
Pasul de instalare a clientului s-a încheiat. Să încercăm să desfășurăm primul cluster.
CSE are mai multe seturi de parametri de utilizare, toate pot fi vizionate.
Pentru început, să creăm chei pentru accesul fără parolă la viitorul cluster. Acest aspect este important, deoarece, implicit, accesul prin parolă pe noduri va fi dezactivat, iar dacă nu se stabilesc cheile, se pot genera multe activități prin consola mașinilor virtuale, ceea ce nu este tocmai convenabil.
# 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.
Încercăm să lansăm crearea clusterului:
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~\/\.ssh\/id_rsa.pub --nodes 3 --enable-nfsDacă primim o eroare Error: Session has expired or user not logged in. Please re-login. — ne logăm din nou în vcd-cli în vCloud așa cum am descris mai sus și repetăm încercarea.
De data aceasta totul a decurs bine și sarcina de creare a clusterului a fost lansată.
operațiune cluster: Crearea vApp-ului cluster 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) din template-ul 'photon-v2_k8-1.12_weave-2.3.0' (revizia 1)
Finalizarea sarcinii va dura aproximativ 20 de minute, între timp să examinăm parametrii de lansare principali.
—network — rețeaua creată de noi anterior.
—ssh-key — cheile create de noi, care vor fi înregistrate pe nodurile clusterului.
—nodes n — numărul de noduri Worker ale clusterului. Masterul va fi întotdeauna unul, aceasta este o limitare CSE.
—enable-nfs — crearea unui nod suplimentar pentru partajarea NFS pentru volume persistente. O opțiune puțin mai complexă, pentru optimizarea a ceea ce face, ne vom întoarce puțin mai târziu.
Între timp, în vCloud se poate observa vizual crearea clusterului.

Odată ce sarcina de creare a clusterului s-a finalizat, acesta este gata de utilizare.
Să verificăm corectitudinea deployment-ului cu comanda vcd cse cluster info MyCluster

Apoi, trebuie să obținem configurația clusterului pentru utilizare. kubectl
# vcd cse cluster config MyCluster > ./.kube/config
Și putem verifica starea clusterului folosind deja aceasta:

În acest punct, clusterul poate fi considerat funcțional, dacă nu ar fi povestea cu volumele persistente. Deoarece suntem în vCloud, nu vom putea folosi Provider-ul vSphere. Opțiunea —enable-nfs este destinată să atenueze această neplăcere, dar nu s-a realizat complet. Necesită o ajustare manuală.
Pentru început, nodului nostru îi este necesar să creeze un disc Independent separat în vCloud. Aceasta garantează că datele noastre nu vor dispărea odată cu clusterul, în cazul în care acesta este șters. De asemenea, vom conecta discul la NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
După aceasta, ne conectăm prin ssh (ați creat cu adevărat cheile?) la nodul nostru NFS și finalizăm conectarea discului:
root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: Eticheta de disc existentă de pe /dev/sdb va fi distrusă și toate datele de pe
acest disc vor fi pierdute. Vrei să continui?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disc /dev/sdb: 100GB
Dimensiunea sectorului (logica/fizica): 512B/512B
Tabelul de partiții: gpt
Bandiere disc:
Număr Început Sfârșit Dimensiune Sistem de fișiere Nume Bandiere
1 0.00GB 100GB 100GB primary
(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Crearea sistemului de fișiere cu 24413696 blocuri de 4k și 6111232 inode-uri
UUID-ul sistemului de fișiere: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Backups pentru superbloc stocate pe blocuri:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Alocarea tabelelor de grup: terminată
Scrierea tabelelor inode: terminată
Crearea jurnalului (32768 blocuri): terminată
Scrierea superblocurilor și informațiilor de contabilitate a sistemului de fișiere: terminată
Creăm un director pentru date și montăm acolo noua partiție:
mkdir /export
echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
mount -a
Vom crea cinci partiții de testare și le vom partaja pentru cluster:
>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Adaugă asta la sfârșitul fișierului
/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! ;)
#Apoi - exportăm partițiile
>exportfs -r
După toată această magie, putem crea PV și PVC în clusterul nostru astfel:
PV:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
# Același IP ca și gazda NFS la care ne-am conectat anterior.
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
Aici se încheie povestea creării unui cluster și începe povestea ciclului său de viață. Ca bonus — încă două comenzi utile CSE, care pot economisi uneori resurse:
#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8
#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes
Mulțumesc tuturor pentru timpul acordat, dacă aveți întrebări — întrebați în comentarii.
Sursa: habr.com
