
Hei alle sammen!
Det har utviklet seg slik at vårt lille team, ikke akkurat nylig, men absolutt ikke plutselig, har nådd et punkt hvor vi vurderer å migrere noen (og på sikt alle) produkter til Kubernetes.
Det var mange grunner til dette, men vår historie handler ikke om debatten.
Valgene vi hadde for infrastrukturbasen var ikke mange. vCloud Director og vCloud Director. Vi valgte den nyeste og bestemte oss for å begynne.
Ved å bla gjennom 'The Hard Way' kom jeg raskt til konklusjonen om at et verktøy for å automatisere minst grunnleggende prosesser, som distribusjon og sizing, var nødvendig for lenge siden. En dypere utforskning på Google avslørte et produkt som VMware Container Service Extension (CSE) – et opensourceprodukt som gjør det mulig å automatisere opprettelsen og sizing av k8s-klynger for de som er i vCloud.
Ansvarsfraskrivelse: CSE har sine begrensninger, men for våre formål passet det perfekt. Løsningen må også støttes av skyløsningen, men siden serverdelen også er open-source, bør du kreve at det er tilgjengelig fra nærmeste leder 🙂
For å begynne å bruke det, er en administrator-konto i vCloud-organisasjonen nødvendig og et på forhånd opprettet routed-nettverk for klyngen (under distribusjonen er tilgang til internett fra dette nettverket nødvendig, så husk å konfigurere brannmur/NAT). Adresseringen spiller ingen rolle. I dette eksempelet bruker vi 10.0.240.0/24.
![]()
Siden klyngen må kunne håndteres etter opprettelsen, anbefales det å ha en VPN med ruting til det opprettede nettverket. Vi bruker en standard SSL-VPN konfigurert på Edge Gateway av vår organisasjon.
Deretter må CSE-klienten installeres derfra hvor k8s-klyngene skal håndteres. I mitt tilfelle er dette min arbeidslaptop og et par godt skjulte containere som håndterer automatiseringen.
Klienten krever installert Python versjon 3.7.3 eller høyere, samt den installerte modulet , så vi instiller begge deler.
pip3 install vcd-cli
pip3 install container-service-extension
Etter installasjonen sjekker vi versjonen av CSE og får følgende:
# vcd cse version
Error: No such command "cse".
Overraskende, men fikserbart. Det viste seg at CSE må kobles som et modul til vcd-cli.
For dette må vi først logge inn i vcd-cli i vår organisasjon:
# vcd login MyCloud.provider.com org-dev admin
Password:
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'
Etter dette vil vcd-cli opprette en konfigurasjonsfil ~/.vcd-cli/profiles.yaml
På slutten må følgende legges til:
extensions:
- container_service_extension.client.cse
Deretter sjekker vi igjen:
# vcd cse version
CSE, Container Service Extension for VMware vCloud Director, version 2.5.0
Klientinstallasjonssteget er fullført. La oss prøve å sette opp den første klyngen.
CSE har flere sett med parametre for bruk, som alle kan sees.
Før vi begynner, må vi lage nøkler for passordfri tilgang til den fremtidige klyngen. Dette er viktig, da passordinnlogging til nodene som standard vil være deaktivert, og hvis vi ikke setter opp nøklene, kan vi få mye arbeid fra konsollen til de virtuelle maskinene, noe som ikke er spesielt praktisk.
# 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.
Vi prøver å starte opprettingen av klyngen:
vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfsHvis vi får en feil, Error: Session has expired or user not logged in. Please re-login. – logger vi inn på vcd-cli i vCloud som beskrevet ovenfor og gjentar forsøket.
Denne gangen gikk alt bra, og opprettelsen av klyngen ble startet.
cluster operation: Oppretter klynge vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) fra malen 'photon-v2_k8-1.12_weave-2.3.0' (revisjon 1)
Det vil ta omtrent 20 minutter å fullføre oppgaven, i mellomtiden skal vi gå gjennom de viktigste startparameterne.
–network – nettverket vi opprettet tidligere.
–ssh-key – nøklene vi opprettet, som vil bli skrevet til nodene i klyngen.
–nodes n – Antall Worker-noder i klyngen. Det vil alltid være én Master, dette er en begrensning fra CSE.
–enable-nfs – opprett en ekstra node for NFS-deling for vedvarende volumer. En litt avansert oppsjon, men vi vil komme tilbake til fininnstillingen av hva den gjør senere.
I mellomtiden kan vi visuelt overvåke opprettingen av klyngen i vCloud.

Så snart opprettelsen av klyngen er fullført, er den klar til bruk.
La oss sjekke riktigheten av distribusjonen med kommandoen vcd cse cluster info MyCluster

Deretter må vi få klyngekonfigurasjonen for bruk. kubectl
# vcd cse cluster config MyCluster > ./.kube/config
Og vi kan allerede sjekke tilstanden til klyngen ved hjelp av den:

I dette øyeblikket kan vi anse klyngen som betinget operativ, dersom det ikke hadde vært for problemet med vedvarende volumer. Siden vi er i vCloud, kan vi ikke bruke vSphere-leverandøren. Alternativet –enable-nfs er ment å glatte over denne ulempen, men det ble ikke helt vellykket. Manuell fininnstilling er nødvendig.
For å begynne, må vi opprette en egen uavhengig disk i vCloud for noden vår. Dette garanterer at dataene våre ikke forsvinner sammen med klyngen, hvis den blir slettet. Vi skal også koble disken til NFS.
# vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares'
# vcd vapp attach mycluster nfsd-9604 nfs-shares-1
Etter dette, går vi via ssh (dere opprettet vel nøkler?) til NFS-noden vår og kobler disken til:
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
Opprett en katalog for dataene og mount den nye partisjonen:
mkdir /export
echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
mount -a
La oss opprette fem testpartisjoner og dele dem for klyngen:
>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Legg dette til slutten av filen
/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! ;)
#Deretter eksporterer vi partisjonene
>exportfs -r
Etter all denne magien, kan vi opprette PV og PVC i klyngen vår på denne måten:
PV:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
# Samme IP som NFS-verten vi ssh'et til tidligere.
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
Slik avsluttes historien om opprettelsen av en klynge og historien om dens livssyklus begynner. Som en bonus — her er to nyttige CSE-kommandoer som noen ganger kan spare ressurser:
#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8
#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes
Takk for at dere tok dere tid, hvis dere har spørsmål — still dem i kommentarfeltet.
Kilde: habr.com
