CSE: Kubernetes til dem der er i vCloud

CSE: Kubernetes til dem der er i vCloud
Hej alle sammen!

Det er lykkedes, at vores lille team, ikke direkte nyt, og bestemt ikke pludseligt, er vokset til at flytte nogle (og i perspektiv alle) produkter til Kubernetes.

Der var mange grunde til dette, men vores historie handler ikke om debat.

Vi havde et begrænset valg i forhold til infrastrukturelle grundlag. vCloud Director og vCloud Director. Vi valgte den nyeste og besluttede at starte.

Når jeg endnu engang har bladret igennem "The Hard Way", kom jeg hurtigt frem til, at et værktøj til automatisering af i det mindste grundlæggende processer, såsom deployment og sizing, var nødvendigt allerede i går. En dybdegående søgning i Google afslørede et produkt kaldet VMware Container Service Extension (CSE) — et open source-produkt, der muliggør automatisering af oprettelsen og sizing af k8s-klynger for dem, der er i vCloud.

Disclaimer: CSE har sine begrænsninger, men til vores formål var det perfekt. Løsningen skal også støtte af cloud-udbyderen, men eftersom serverdelen også er open source, skal du kræve, at den er tilgængelig hos den nærmeste leder 🙂

For at komme i gang kræves en administrator konto i vCloud-organisationen og et på forhånd oprettet routed-netværk til klyngen (under deployment er der behov for internetadgang fra dette netværk, glem ikke at konfigurere Firewall/NAT). Adresseringen er ikke vigtig. I dette eksempel tager vi 10.0.240.0/24.

CSE: Kubernetes til dem der er i vCloud

Da klusteret efter oprettelsen skal kunne administreres, anbefales det at have en VPN med routing til det oprettede netværk. Vi bruger en standard SSL-VPN, der er konfigureret på Edge Gateway i vores organisation.

Dernæst skal CSE-klienten installeres på den enhed, der skal administrere k8s-klyngerne. I mit tilfælde er det en arbejdscomputer og et par godt gemte containere, der styrer automatiseringen.

Klienten kræver, at Python version 3.7.3 eller højere er installeret, samt modulet vcd-cli, så vi installerer begge dele.

pip3 install vcd-cli

pip3 install container-service-extension

Efter installationen tjekker vi CSE-versionen og får følgende:

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

Overraskende, men til at rette. Det viste sig, at CSE skal tilknyttes som et modul til vcd-cli.
For at gøre dette skal vcd-cli først logge ind i vores organisation:

# vcd login MyCloud.provider.com org-dev admin
Password: 
admin logged in, org: 'org-dev', vdc: 'org-dev_vDC01'

Herefter vil vcd-cli oprette en konfigurationsfil ~/.vcd-cli/profiles.yaml
I slutningen af denne fil skal følgende tilføjes:

extensions:
  - container_service_extension.client.cse

Herefter tjekker vi igen:

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

Klientinstallationen er afsluttet. Lad os prøve at implementere den første klynge.
CSE har flere sæt parametre, som alle kan ses her.

For at starte skal vi oprette nøgler til adgang uden adgangskode til den kommende klynge. Dette punkt er vigtigt, da adgang med adgangskode til noderne som standard vil være deaktiveret, og hvis nøglerne ikke er angivet, kan man få meget arbejde gennem de virtuelle maskiners konsoller, hvilket ikke er særlig 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.

Lad os prøve at starte oprettelsen af klyngen:

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

Hvis vi får en fejl Error: Session has expired or user not logged in. Please re-login. — logger vi igen ind med vcd-cli i vCloud som beskrevet ovenfor og prøver igen.

Denne gang er alt i orden, og opgaven med at oprette klyngen er startet.

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

Det vil tage cirka 20 minutter at afslutte opgaven, imens ser vi nærmere på de vigtigste startparametre.

—network — det netværk, vi tidligere har oprettet.
—ssh-key — de nøgler, vi har oprettet, som vil blive gemt på noderne i klyngen
—nodes n — Antallet af Worker-noder i klyngen. Der vil altid være én Master, dette er en begrænsning fra CSE
—enable-nfs — opret en ekstra node til NFS-deling til persistent volumes. En lidt kompleks indstilling, vi vil vende tilbage til senere for at justere, hvad den gør.

I mellemtiden kan man visuelt overvåge oprettelsen af klyngen i vCloud.
CSE: Kubernetes til dem der er i vCloud

Når opgaven med at oprette klyngen er afsluttet, er den klar til brug.

Lad os kontrollere korrektheden af deployment med kommandoen vcd cse cluster info MyCluster

CSE: Kubernetes til dem der er i vCloud

Derefter skal vi have konfigurationen af klyngen til brug kubectl

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

Og vi kan kontrollere tilstanden af klyngen allerede ved hjælp af den:

CSE: Kubernetes til dem der er i vCloud

I dette øjeblik kan klyngen betragtes som betinget funktionsdygtig, hvis det ikke havde været for historien med persistent volumes. Da vi er i vCloud, kan vi ikke bruge vSphere Provider. Indstillingen —enable-nfs er designet til at afbøde denne ulempe, men det lykkedes ikke helt. Der kræves manuel finjustering.

For at starte skal vores node oprette en separat Independent disk i vCloud. Dette garanterer, at vores data ikke forsvinder sammen med klyngen, skulle den blive slettet. Derudover tilslutter vi disken til NFS.

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

Derefter går vi via ssh (du har virkelig oprettet nøglerne?) til vores NFS-node og tilslutter disken endeligt:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Advarsel: Den eksisterende disklabel på /dev/sdb vil blive ødelagt, og alle data på
denne disk vil gå tabt. Vil du fortsætte?
Ja/Nej? ja
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sektorstørrelse (logisk/fysisk): 512B/512B
Partitionsskema: gpt
Diskflags:

Nummer  Start   Slut    Størrelse  Filsystem  Navn     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Opretter filsystem med 24413696 4k blokke og 6111232 inode
Filsystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblok backups gemt på blokke:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allokerer gruppetabeller: færdig
Skriver inode-tabeller: færdig
Opretter journal (32768 blokke): færdig
Skriver superblokke og filsystemregnskabsinformation: færdig

Vi opretter en mappe til data og monterer den nye partition der:

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

Lad os oprette fem testpartitioner og dele dem ud til klyngen:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Tilføj dette til slutningen af 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! ;)
#Herefter - eksporterer vi partitionerne
>exportfs -r

Efter al denne magi kan vi oprette PV og PVC i vores klynge cirka sådan her:
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-værten, vi ssh'ede 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

Her slutter historien om oprettelsen af en klynge, og historien om dens livscyklus begynder. Som bonus kommer der to nyttige CSE-kommandoer, der nogle gange kan spare ressourcer:

#Увеличиваем размер кластера до 8 воркер нод
>cse cluster resize MyCluster --network k8s_cluster_net --nodes 8

#Выводим ненужные ноды из кластера с их последующим удалением
>vcd cse node delete MyCluster node-1a2v node-6685 --yes

Tak for jeres tid, hvis der er spørgsmål, så spørg endelig i kommentarerne.

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster