CSE: Kubernetes pre tých, ktorí sú vo vCloud-e

CSE: Kubernetes pre tých, ktorí sú vo vCloud-e
Ahojte všetci!

Naša malá tím sa uplynulé obdobie, dá sa povedať, dostala k rozhodnutiu preniesť niektoré (a v budúcnosti aj všetky) produkty do Kubernetes.

Príčin bolo mnoho, ale náš príbeh nie je o holivare.

Na infraštruktúrnej úrovni sme mali obmedzený výber. vCloud Director a vCloud Director. Vybrali sme ten novší a rozhodli sa začať.

Pri ďalšom prehľadávaní „The Hard Way“ som veľmi rýchlo dospel k záveru, že nástroj na automatizáciu aspoň základných procesov, ako sú nasadenie a sizing, je potrebný už včera. Hlboké ponorenie do Googlu odhalilo produkt nazvaný VMware Container Service Extension (CSE) – open-source produkt umožňujúci automatizovať vytváranie a sizing k8s klastrov pre tých, ktorí používajú vCloud.

Disclaimer: CSE má svoje obmedzenia, ale pre naše účely je ideálne. Rovnako riešenie musí byť podporované cloudovým poskytovateľom, ale keďže serverová časť je tiež open-source, požadujte jeho prítomnosť u najbližšieho manažéra 🙂

Na začiatok je potrebný administrátorský účet v organizácii vCloud a vopred vytvorená routed sieť pre klaster (počas nasadenia je potrebný prístup na internet z tejto siete, nezabudnite nastaviť Firewall/NAT). Adresácia nemá význam. V tomto príklade vezmeme 10.0.240.0/24.

CSE: Kubernetes pre tých, ktorí sú vo vCloud-e

Keďže po vytvorení bude potrebné klaster nejako spravovať, odporúča sa mať VPN s routovaním do vytvorenej siete. Používame štandardné SSL-VPN nastavené na Edge Gateway našej organizácie.

Ďalej je potrebné nainštalovať CSE klienta tam, odkiaľ bude spravovanie k8s klastrov prebiehať. V mojom prípade je to pracovný notebook a pár dobre ukrytých kontajnerov, ktoré sa starajú o automatizáciu.

Klient vyžaduje nainštalovaný Python verzie 3.7.3 a vyššej a nainštalovaný modul vcd-cli, preto nainštalujeme oboje.

pip3 install vcd-cli

pip3 install container-service-extension

Po inštalácii overíme verziu CSE a dostaneme nasledovné:

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

Prekvapujúco, ale opraviteľné. Ako sa ukázalo, CSE je potrebné pripojiť ako modul k vcd-cli.
Na to je najprv potrebné prihlásiť vcd-cli do našej organizácie:

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

Potom vcd-cli vytvorí konfiguračný súbor ~/.vcd-cli/profiles.yaml
Na jeho koniec je potrebné pridať nasledujúce:

extensions:
  - container_service_extension.client.cse

Potom znovu overíme:

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

Inštalačný krok klienta bol dokončený. Pokúsime sa nasadiť prvý klaster.
CSE má niekoľko súborov parametrov použitia, všetky je možné si pozrieť tu.

Na začiatok vytvoríme kľúče pre bezheslový prístup k budúcemu klastru. Tento moment je dôležitý, pretože predvolený prístup cez heslo na uzly bude vypnutý a ak nezadáme kľúče, môžeme mať veľa práce cez konzolu virtuálnych strojov, čo nie je práve pohodlné.

# 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.

Pokúšame sa spustiť vytvorenie klastru:

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

Ak dostávame chybu Error: Session has expired or user not logged in. Please re-login. — znova sa prihlásime na vcd-cli do vCloudu, ako je uvedené vyššie, a opakujeme pokus.

Tentoraz je všetko v poriadku a úloha na vytvorenie klastru sa spustila.

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

Na dokončenie úlohy bude potrebných približne 20 minút, medzitým sa pozrieme na hlavné parametre spustenia.

—network — sieť, ktorú sme vytvorili skôr.
—ssh-key — kľúče, ktoré sme vytvorili, budú zapísané na uzloch klastru
—nodes n — počet pracovných uzlov klastru. Hlavný uzol bude vždy len jeden, to je obmedzenie CSE
—enable-nfs — vytvorí ďalší uzol pre NFS zdieľanie pod persistent volumes. Trochu okrajová voľba, k doladeniu toho, čo robí, sa vrátime neskôr.

Medzitým môžeme vo vCloude vizuálne sledovať vytvorenie klastru
CSE: Kubernetes pre tých, ktorí sú vo vCloud-e

Akonáhle je úloha na vytvorenie klastru dokončená, je pripravený na prácu.

Skontrolujeme správnosť nasadenia príkazom vcd cse cluster info MyCluster

CSE: Kubernetes pre tých, ktorí sú vo vCloud-e

Potom potrebujeme získať konfiguráciu klastru pre použitie kubectl

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

A môžeme skontrolovať stav klastru už s jej pomocou:

CSE: Kubernetes pre tých, ktorí sú vo vCloud-e

V tomto momente môžeme klaster považovať za podmienečne funkčný, ak by nebola história s persistent volumes. Keďže sme vo vCloude, nie je možné použiť vSphere Provider. Voľba —enable-nfs má zmierniť túto nepríjemnosť, ale nepodarilo sa to úplne. Vyžaduje sa manuálne doladenie.

Najprv je potrebné vytvoriť pre náš uzol samostatný nezávislý disk vo vCloude. To zaručuje, že naše dáta nezmiznú spolu s klastrom, ak bude odstránený. Taktiež pripojíme disk k NFS

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

Potom sa pripojíme cez ssh (naozaj ste vytvorili kľúče?) na našu NFS uzol a úplne pripojíme disk:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Upozornenie: Existujúca disková značka na /dev/sdb bude zničená a všetky údaje na tomto disku budú stratené. Chcete pokračovať?
Áno/Nie? áno
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Veľkosť sektora (logická/fyzická): 512B/512B
Partition Table: gpt
Disk Flags:

Číslo  Začiatok   Koniec    Veľkosť   Súborový systém  Názov     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Vytváranie súborového systému s 24413696 4k blokmi a 6111232 iónmi
UUID súborového systému: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Zálohy superbloku sú uložené na blokoch:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Priraďovanie skupinových tabuliek: hotovo
Písanie tabuliek iónov: hotovo
Vytváranie denníka (32768 blokov): hotovo
Písanie superblokov a informácií o účtovaní súborového systému: hotovo

Vytvárame adresár pre údaje a namontujeme tam nový oddiel:

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

Vytvoríme päť testovacích oddielov a zdieľame ich pre klaster:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Pridáme toto na koniec súboru
/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! ;)
#Následne - exportujeme oddiely
>exportfs -r

Po všetkej tejto mágii môžeme vytvoriť PV a PVC v našom klastri približne takto:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Rovnaká IP ako NFS hostiteľ, ku ktorému sme sa prihlásili.
    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

Týmto sa príbeh vytvorenia jedného klastra končí a začína príbeh jeho životného cyklu. Ako bonus — ešte dve užitočné príkazy CSE, ktoré môžu občas celkom ušetriť alebo nie zdroje:

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

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

Všetkým ďakujem za venovaný čas, ak máte otázky — pýtajte sa v komentároch.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster