
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.
![]()
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 , 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.
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-nfsPokud 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.

Jakmile úkol vytvoření klastru dokončí, je připraven k použití.
Ověříme správnost nasazení příkazem. vcd cse cluster info MyCluster

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í:

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
