CSE: Kubernetes pro ty, kteří jsou ve vCloudu

CSE: Kubernetes pro ty, kteří jsou ve vCloudu
Ahoj všichni!

Naše malá teamová skupina, jak se ukázalo, nedávno, a rozhodně ne náhle, dospěla k rozhodnutí přesunout některé (a do budoucna i všechny) produkty do Kubernetes.

Bylo mnoho důvodů, ale náš příběh není o zavádění hádek.

Z hlediska infrastrukturní základny jsme měli malý výběr. vCloud Director a vCloud Director. Vybrali jsme ten novější a rozhodli se začít.

Poté, co jsem se opět prozkoumal "The Hard Way", jsem velmi rychle došel k závěru, že nástroj pro automatizaci alespoň základních procesů, jako je nasazení a velikost, byl potřebný už včera. Hluboký ponor do Googlu odhalil produkt jako VMware Container Service Extension (CSE) — open-source produkt, který umožňuje automatizaci vytváření a velikosti k8s klastrů pro ty, kteří používají vCloud.

Upozornění: CSE má svá omezení, ale pro naše účely byl ideální. Řešení by také mělo být podporováno cloudovým poskytovatelem, ale protože serverová část je také open-source, požadujte jeho přítomnost od nejbližšího manažera 🙂

Pro počáteční použití je potřeba administrátorský účet ve vCloud organizaci a předem vytvořená routed síť pro klastr (během nasazení je nutný přístup k internetu z této sítě, nezapomeňte nastavit Firewall/NAT). Adresace není důležitá. V tomto příkladu vezměme 10.0.240.0/24.

CSE: Kubernetes pro ty, kteří jsou ve vCloudu

Protože po vytvoření bude potřeba nějak spravovat klastr, doporučuje se mít VPN s routováním do vytvořené sítě. Používáme standardní SSL-VPN nastavenou na Edge Gateway naší organizace.

Dalším krokem je nainstalovat CSE klienta tam, odkud bude spravováno k8s clustery. V mém případě je to pracovní notebook a pár dobře ukrytých kontejnerů, které ovládají automatizaci.

Klient vyžaduje instalaci Pythonu verze 3.7.3 a vyšší a nainstalovaného modulu vcd-cli, takže nainstalujeme obojí.

pip3 install vcd-cli

pip3 install container-service-extension

Po instalaci zkontrolujeme verzi CSE a dostaneme následující:

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

Nečekaně, ale opravitelné. Jak se ukázalo, CSE je nutné připojit jako modul k vcd-cli.
K tomu je nejprve nutné přihlásit vcd-cli do naší organizace:

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

Poté vcd-cli vytvoří konfigurační soubor ~/.vcd-cli/profiles.yaml
Na jeho konec je nutné přidat následující:

extensions:
  - container_service_extension.client.cse

Po tom znovu zkontrolujeme:

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

Fáze instalace klienta byla dokončena. Zkusíme nasadit první klastr.
CSE má několik sad parametrů použití, všechny si můžete prohlédnout. zde.

Nejprve vytvoříme klíče pro bezheslový přístup k budoucímu klastru. Tento moment je důležitý, protože výchozí přístup na uzly pomocí hesla bude zakázán a pokud klíče nezadáme, můžeme mít spoustu práce přes konzoli virtuálních strojů, což není zrovna 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.

Zkoušíme spustit vytvoření klastru:

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

Pokud dostaneme chybu Error: Session has expired or user not logged in. Please re-login. — znovu se přihlašujeme pomocí vcd-cli do vCloud, jak bylo popsáno výše, a opakujeme pokus.

Tentokrát je všechno v pořádku a úkol vytvoření klastru byl spuštěn.

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čení úkolu bude potřeba přibližně 20 minut, mezitím si projdeme základní parametry spuštění.

—network — síť, kterou jsme vytvořili dříve.
—ssh-key — klíče, které jsme vytvořili, budou zapsány na uzly klastru.
—nodes n — Počet pracovních uzlů klastru. Master bude vždy pouze jeden, je to omezení CSE.
—enable-nfs — vytvořit další uzel pro NFS sdílení pod persistent volumes. Trochu pokročilá volba, k doladění toho, co dělá, se vrátíme později.

Mezitím, ve vCloudu můžete vizuálně sledovat vytvoření klastru.
CSE: Kubernetes pro ty, kteří jsou ve vCloudu

Jakmile úkol vytvoření klastru dokončí, je připraven k použití.

Ověříme správnost nasazení příkazem. vcd cse cluster info MyCluster

CSE: Kubernetes pro ty, kteří jsou ve vCloudu

Dále potřebujeme získat konfiguraci klastru pro použití. kubectl

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

A můžeme zkontrolovat stav klastru již pomocí ní:

CSE: Kubernetes pro ty, kteří jsou ve vCloudu

V této fázi lze klastr považovat za podmíněně funkční, nebýt problémů s persistent volumes. Protože jsme ve vCloud, není možné použít vSphere Provider. Volba —enable-nfs má za cíl zmírnit tuto nepříjemnost, ale úplně se to nepodařilo. Je třeba ruční doladění.

Nejprve je třeba našemu uzlu vytvořit samostatný nezávislý disk ve vCloud. To zajišťuje, že naše data nezmizí spolu s klastrem, bude-li odstraněn. Také připojíme disk k NFS.

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

Poté se přihlásíme pomocí ssh (opravu, vytvořili jste klíče?) na náš NFS uzel a disk konečně připojíme:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Upozornění: Existující disková značka na /dev/sdb bude zničena a všechna data na tomto disku budou ztracena. Chcete pokračovat?
Ano/Ne? ano
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtuální disk (scsi)
Disk /dev/sdb: 100GB
Velikost sektoru (logická/fyzická): 512B/512B
Tabulka oddílů: gpt
Diskové příznaky:

Číslo  Začátek   Konec    Velikost   Souborový systém  Název     Příznaky
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Vytváření souborového systému s 24413696 4k bloky a 6111232 inody
UUID souborového systému: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Zálohy superbloku uloženy na blocích:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Alokace skupinových tabulek: hotovo
Zapisování tabulek inodů: hotovo
Vytváření žurnálu (32768 bloků): hotovo
Zapisování superbloků a informací o účtování souborového systému: hotovo

Vytvoříme adresář pro data a připojíme tam nový oddíl:

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

Vytvoříme pět testovacích oddílů a sdílíme je pro cluster:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
# Přidáme toto na konec souboru
/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! ;)
# Nyní - exportujeme oddíly
>exportfs -r

Po všech těchto magiích můžeme vytvořit PV a PVC v našem clusteru zhruba takto:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Stejná IP jako na hostiteli NFS, ke kterému jsme se dříve přihlá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 končí příběh o vytvoření jednoho clusteru a začíná příběh o jeho životním cyklu. Jako bonus — ještě dvě užitečné příkazy CSE, které čas od času mohou výrazně ušetřit zdroje:

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

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

Děkuji všem za věnovaný čas, pokud máte dotazy — ptejte se v komentářích.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster