
Pozdrav svima!
Naša mala ekipa, usprkos tome što nije nedavno, a niti iznenada, odlučila je prenijeti neke (a u perspektivi i sve) proizvode u Kubernetes.
Razlozi su mnogi, ali naša priča nije o bitkama.
Imali smo mali izbor temelja infrastrukture: vCloud Director i vCloud Director. Odabrali smo onaj noviji i odlučili početi.
Pogledavši ponovo 'The Hard Way', vrlo brzo sam došao do zaključka da nam je potreban alat za automatizaciju barem osnovnih procesa, poput implementacije i veličanja, što je trebalo biti realizirano jučer. Duboko istraživanje interneta donijelo je proizvod pod nazivom VMware Container Service Extension (CSE) — open-source proizvod koji omogućava automatizaciju stvaranja i veličanja k8s klastera za one koji koriste vCloud.
Napomena: CSE ima svoja ograničenja, ali za naše potrebe savršeno odgovara. Također, rješenje bi trebalo podržavati pružatelj usluga oblaka, no budući da je serverski dio također open-source, potražite njegovu dostupnost od najbližeg menadžera 🙂
Za početak korištenja potreban je administratorski račun u organizaciji vCloud i unaprijed stvorena routed-mreža za klaster (za vrijeme implementacije potrebna je internetska povezanost iz te mreže, ne zaboravite prilagoditi Firewall/NAT). Adresiranje nije bitno. U ovom primjeru uzimamo 10.0.240.0/24.
![]()
Budući da će klaster nakon stvaranja trebati upravljanje, preporučuje se postojanje VPN-a s rutiranjem u stvorenu mrežu. Koristimo standardni SSL-VPN konfiguriran na Edge Gateway-u naše organizacije.
Zatim je potrebno instalirati CSE klijent s kojeg će se upravljati k8s klasterima. U mom slučaju to je radni prijenosnik i nekoliko dobro skrivenih kontejnera koji upravljaju automatizacijom.
Klijent zahtijeva instaliranu verziju Pythona 3.7.3 i više, kao i instalirani modul , stoga ćemo instalirati oboje.
pip3 install vcd-cli
pip3 install container-service-extension
Nakon instalacije provjeravamo verziju CSE i dobijamo sljedeće:
# vcd cse version
Error: No such command "cse".
Iznenađujuće, ali rješivo. Kao što se ispostavilo, CSE treba povezati kao modul s vcd-cli.
Za to je prvo potrebno prijaviti se na vcd-cli u našu organizaciju:
# vcd login MyCloud.provider.com org-dev admin
Password:
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'
Nakon toga, vcd-cli će stvoriti konfiguracijski datoteku ~/.vcd-cli/profiles.yaml
Na kraj tog datoteke potrebno je dodati sljedeće:
extensions:
- container_service_extension.client.cse
Nakon toga, ponovo provjeravamo:
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
Instalacijski korak klijenta je završen. Pokušajmo pokrenuti prvi klaster.
CSE ima nekoliko setova parametara korištenja, sve ih možete pregledati.
Prvo ćemo stvoriti ključeve za pristup bez lozinke budućem klasteru. Ovaj trenutak je važan, jer je prema zadanim postavkama ulaz s lozinkom na čvorove onemogućen, a ako ne postavimo ključeve, možemo puno raditi putem konzole virtualnih mašina, što nije baš praktično.
# 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.
Pokušajmo pokrenuti stvaranje klastera:
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/ .ssh/id_rsa.pub --nodes 3 --enable-nfsAko dobijemo grešku Error: Session has expired or user not logged in. Please re-login. — ponovo se prijavite u vcd-cli u vCloud kao što je opisano gore i ponovite pokušaj.
Ovoga puta sve je dobro i zadatak stvaranja klastera je pokrenut.
cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)
Završetak zadatka će trajati otprilike 20 minuta, u međuvremenu ćemo razmotriti osnovne parametre pokretanja.
—network — mreža koju smo ranije stvorili.
—ssh-key — ključevi koje smo stvorili, bit će zapisani na čvorove klastera.
—nodes n — Broj Worker čvorova klastera. Uvijek će biti samo jedan Master, ovo je ograničenje CSE.
—enable-nfs — stvoriti dodatni čvor za NFS dijeljenje pod persistent volumes. Malo je to tehnička opcija, o postavkama onoga što radi, vratit ćemo se malo kasnije.
U međuvremenu, u vCloud-u možete vizualno pratiti stvaranje klastera.

Čim je zadatak stvaranja klastera završen, on je spreman za rad.
Provjerimo ispravnost implementacije naredbom vcd cse cluster info MyCluster

Nakon toga trebamo dobiti konfiguraciju klastera za korištenje. kubectl
# vcd cse cluster config MyCluster > ./.kube/config
I možemo provjeriti stanje klastera već pomoću nje:

U ovom trenutku klaster se može smatrati uvjetno radnim, da nije povijesti s persistent volumes. Kako smo u vCloud-u, korištenje vSphere Provider-a nije moguće. Opcija —enable-nfs treba ublažiti ovu nelagodu, ali nije u potpunosti uspjela. Potrebno je ručno podešavanje.
Prvo, našem čvoru potrebno je stvoriti poseban Independent disk u vCloud-u. Ovo osigurava da naši podaci ne nestanu zajedno s klasterom, ukoliko bude obrisan. Također, spojit ćemo disk na NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
Nakon toga, idemo preko ssh (zar niste stvarno stvorili ključeve?) na naš NFS čvor i konačno spajamo disk:
root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Upozorenje: Postojeća oznaka diska na /dev/sdb bit će uništena i svi podaci na
ovom disku će biti izgubljeni. Želite li nastaviti?
Da/Ne? da
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Veličina sektora (logički/fizički): 512B/512B
Tablica particija: gpt
Zastavice diska:
Broj Početak Kraj Veličina Datotečni sustav Naziv Zastavice
1 0.00GB 100GB 100GB primarna
(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Stvaranje datotečnog sustava s 24413696 4k blokova i 6111232 inoda
UUID datotečnog sustava: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Backup superblocka pohranjeni na blokovima:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
Alociranje tablica grupa: gotovo
Pisanje tablica inoda: gotovo
Stvaranje dnevnika (32768 blokova): gotovo
Pisanje superblokova i informacija o računovodstvu datotečnog sustava: gotovo
Stvaramo direktorij za podatke i montiramo svježu particiju:
mkdir /export
echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
mount -a
Stvorićemo pet testnih particija i dijeliti ih za klaster:
>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Dodajte ovo na kraj datoteke
/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! ;)
#Zatim - izvozimo particije
>exportfs -r
Nakon sve ove magije, možemo stvoriti PV i PVC u našem klasteru otprilike ovako:
PV:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
# Ista IP adresa kao NFS domaćin na koji smo se ranije povezali.
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
Ovo je kraj priče o stvaranju jednog klastera i početak priče o njegovom životnom ciklusu. Kao bonus — još dvije korisne CSE komande koje ponekad mogu značajno uštedjeti resurse:
#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8
#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes
Hvala svima na ukazanom vremenu, ako imate pitanja — postavite ih u komentarima.
Izvor: habr.com
