
Zdravo svima!
Naša mala ekipa je nedavno, a neodložno, došla do točke kada smo počeli prenositi neke (a s vremenom i sve) proizvode u Kubernetes.
Bilo je mnogo razloga za to, ali naša priča nije o tome.
Imali smo mali izbor infrastrukturne osnove: vCloud Director i vCloud Director. Odabrali smo onaj noviji i odlučili početi.
Ponovo sam pregledao 'The Hard Way' i jako brzo došao do zaključka da je alat za automatizaciju barem osnovnih procesa, kao što su implementacija i veličanje, bio potreban još jučer. Duboko istraživanje Google-a osvijetlilo je proizvod kao što je VMware Container Service Extension (CSE) — open-source proizvod koji omogućava automatizaciju kreiranja i veličanja k8s klastera za one koji koriste vCloud.
Odricanje: CSE ima svoja ograničenja, ali savršeno odgovara našim potrebama. Također, rješenje bi trebalo podržavati cloud provajder, no pošto je server dio takođe open-source, zatražite njegovo postojanje od najbližeg menadžera 🙂
Za početak korišćenja potreban je administratorski nalog u organizaciji vCloud i unapred kreirana usmjerena mreža za klaster (tokom implementacije je potreban pristup internetu iz te mreže, ne zaboravite da postavite Firewall/NAT). Adresacija nije bitna. U ovom primeru, uzmimo 10.0.240.0/24.
![]()
Budući da će nakon kreiranja klasterom se morati nekako upravljati, preporučuje se da postoji VPN s usmjeravanjem u kreiranu mrežu. Koristimo standardni SSL-VPN, podešen na Edge Gateway naše organizacije.
Zatim je potrebno instalirati CSE klijent tamo odakle će se upravljati k8s klasterima. U mom slučaju, to je radni laptop i nekoliko dobro skrivenih kontejnera koji upravljaju automatizacijom.
Klijent zahteva instalaciju Python verzije 3.7.3 i više, kao i instalaciju modula , stoga ćemo instalirati oboje.
pip3 install vcd-cli
pip3 install container-service-extension
Nakon instalacije proveravamo verziju CSE i dobijamo sledeće:
# vcd cse version
Error: No such command "cse".
Neočekivano, ali popravljivo. Kako se ispostavilo, CSE treba povezati kao modul za vcd-cli.
Za to je prvo potrebno prijaviti 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 kreirati datoteku konfiguracije ~/.vcd-cli/profiles.yaml
Na kraj te datoteke potrebno je dodati sledeće:
extensions:
- container_service_extension.client.cse
Nakon toga, ponovo proveravamo:
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
Postopek namestitve stranke je končan. Poskusimo razporediti prvi klaster.
CSE ima več nizov parametrov uporabe, vse si lahko ogledate.
Najprej bomo ustvarili ključe za brez geselni dostop do prihodnjega klasterja. Ta korak je pomemben, saj je privzeto prijava z geslom na nodah izključena in če ne nastavite ključev, boste morda naleteli na veliko dela prek konzole virtualnih strojev, kar ni ravno priroč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.
Poskusimo zagnati ustvarjanje klasterja:
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfsČe dobite napako Error: Session has expired or user not logged in. Please re-login. — ponovno se prijavite v vcd-cli v vCloudu, kot je opisano zgoraj, in poskusite znova.
Tokrat je vse v redu in naloga za ustvarjanje klasterja se je začela.
cluster operation: Creating cluster vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) from template 'photon-v2_k8-1.12_weave-2.3.0' (revision 1)
Za dokončanje naloge bo potrebnih približno 20 minut, medtem pa si poglejmo glavne parametre za zagon.
—network — mreža, ki smo jo ustvarili prej.
—ssh-key — naši ustvarjeni ključi, ki bodo zapisani na nodah klasterja.
—nodes n — Število delovnih nod klasterja. Glavni vozlišče bo vedno en, to je omejitev CSE.
—enable-nfs — ustvarite dodatno vozlišče za NFS delitev za trajne količine. Malce kompleksna opcija, do nastavitev tega, kar počne, se bomo vrnili nekoliko pozneje.
Medtem lahko v vCloudu vizualno spremljate ustvarjanje klasterja.

Ko se je naloga za ustvarjanje klasterja zaključila, je pripravljen za delo.
Preverimo pravilnost namestitve z ukazom vcd cse cluster info MyCluster

Nato moramo pridobiti konfiguracijo klasterja za uporabo. kubectl
# vcd cse cluster config MyCluster > ./.kube/config
In stanje klasterja lahko preverimo že z njo:

V tem trenutku lahko klaster štejemo za delujočega, če ne bi bilo zgodbe s trajnimi količinami. Ker smo v vCloudu, ne moremo uporabiti vSphere Providerja. Opcija —enable-nfs je namenjena omiliti to nevšečnost, vendar se to ni povsem izšlo. Zahteva ročno nastavitev.
Najprej mora naše vozlišče ustvariti ločen neodvisen disk v vCloudu. To zagotavlja, da naši podatki ne izginejo skupaj s klasterjem, če bo ta izbrisan. Prav tako bomo priključili disk na NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
Nato se prek ssh (res ste ustvarili ključe?) povežemo na našo NFS vozlišče in disk dokončno povežemo:
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
Ustvarimo imenik za podatke in namestimo nov razdelitev:
mkdir /export
echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
mount -a
Ustvarimo pet testnih razdelitev in jih delimo s klastra:
>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Dodamo to na konec 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! ;)
#Nato - izvozimo razdelitve
>exportfs -r
Po vsem tem čarovništvu, lahko ustvarimo PV in PVC v našem klastru približno takole:
PV:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
# Enak IP kot NFS gostitelj, s katerim smo SSH povezali prej.
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
S tem se zgodba o ustvarjanju enega klastru konča in prične se zgodba o njegovem življenjskem ciklu. Kot bonus - še dve koristni ukazi CSE, ki omogočata, da občasno dobro prihranimo ali ne vire:
#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8
#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes
Vsem hvala za porabljen čas, če imate vprašanja - postavite jih v komentarjih.
Izvor: habr.com
