CSE: Kubernetes a vCloud-ban lévőknek

CSE: Kubernetes a vCloud-ban lévőknek
Mindenkinek szia!

Úgy alakult, hogy a kis csapatunk, nem mondanám, hogy nemrég, és biztosan nem hirtelen, eljutott odáig, hogy néhány (a jövőben pedig minden) terméket átvigyen a Kubernetesbe.

Ennek sok oka volt, de a mi történetünk nem erről szól.

Infrastruktúra szempontjából a választékunk kicsi volt. vCloud Director és vCloud Director. Az újat választottuk, és úgy döntöttünk, hogy elkezdjük.

Miután ismét lapozgattam a „The Hard Way”-t, nagyon gyorsan arra a következtetésre jutottam, hogy egy alapvető folyamatok, mint a deploy és a méretezés, automatizálására szolgáló eszközre szükség volna már tegnap. A Google mélyreható kutatása olyan terméket hozott felszínre, mint a VMware Container Service Extension (CSE) — egy nyílt forráskódú termék, amely lehetővé teszi a k8s klaszterek automatikus létrehozását és méretezését a vCloud felhasználók számára.

Disclaimer: A CSE-nek megvannak a maga korlátai, de a céljainknak tökéletesen megfelelt. Emellett a megoldást a felhőszolgáltatónak is támogatnia kell, de mivel a kiszolgáló oldala is nyílt forráskódú, kérje a legközelebbi menedzsertől 🙂

A használat elkezdéséhez szükség van egy adminisztrátori fiókra a vCloud szervezetben és egy előre létrehozott routed hálózatra a klaszter számára (a telepítési folyamat során internet-hozzáférésre van szükség ebből a hálózatból, ne felejtse el beállítani a tűzfalat/NAT-ot). Az címzés nem számít. A példához vegyünk egy 10.0.240.0/24-es címet.

CSE: Kubernetes a vCloud-ban lévőknek

Mivel a klaszter létrehozása után valamilyen módon kezelni kell, javasolt egy VPN beállítása, amely közvetlenül a létrehozott hálózatra irányít. Mi egy standard SSL-VPN-t használunk, amely a szervezetünk Edge Gateway-jén van beállítva.

Ezután telepítenünk kell a CSE klienst arra a helyre, ahonnan a k8s klaszterek kezelését végezzük. Az én esetemben ez egy munkahelyi laptop és néhány jól elrejtett konténer, amelyek az automatizálást irányítják.

A kliens 3.7.3 vagy újabb verziójú Python telepítését igényli, valamint a következő modul telepítését: vcd-cli, ezért telepítsük mindkettőt.

pip3 install vcd-cli

pip3 install container-service-extension

A telepítés után ellenőrizzük a CSE verzióját, és a következőt kapjuk:

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

Meghökkentő, de javítható. Kiderült, hogy a CSE-t mint modult kell csatolni a vcd-cli-hoz.
Ehhez először be kell jelentkeznünk a vcd-cli-ba a szervezetünkhöz:

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

Ezt követően a vcd-cli létrehoz egy konfigurációs fájlt. ~/.vcd-cli/profiles.yaml
A fájl végére a következőt kell hozzáadnunk:

extensions:
  - container_service_extension.client.cse

Ezután újra ellenőrizzük:

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

A kliens telepítési lépése befejeződött. Próbáljuk meg telepíteni az első klasztert.
A CSE-nek többféle használati paramétere van, amelyeket meg lehet tekinteni. itt.

Először hozzunk létre kulcsokat, hogy jelszó nélküli hozzáférést biztosítsunk a jövőbeli klaszterhez. Ez fontos, mert alapértelmezés szerint a jelszavas bejelentkezés a csomópontokra ki lesz kapcsolva, és ha nem állítunk be kulcsokat, sok munkát valósíthatunk meg a virtuális gépek konzolján, ami nem túl kényelmes.

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

Próbáljuk elindítani a klaszter létrehozását:

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

Ha hibát kapunk, Error: A munkamenet lejárt, vagy a felhasználó nincs bejelentkezve. Kérjük, jelentkezzen be újra. — ismét jelentkezzünk be vcd-cli segítségével a vCloud-ba, ahogy fentebb leírtuk, és próbálkozzunk újra.

Ezúttal minden rendben van, és a klaszter létrehozása elindult.

cluster operation: Klaszter vApp 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) létrehozása a 'photon-v2_k8-1.12_weave-2.3.0' sablonból (1. verzió)

A feladat befejezéséhez körülbelül 20 percre lesz szükség, addig nézzük át az indítás fő paramétereit.

—network — a korábban létrehozott hálózatunk.
—ssh-key — a létrehozott kulcsok, amelyeket a klaszter csomópontjain fogunk rögzíteni.
—nodes n — A klaszter Worker csomópontjainak számát. A mester mindig egy lesz, ez a CSE korlátozása.
—enable-nfs — létrehozni egy további csomópontot az NFS megosztáshoz a tartós tárolókhoz. Ez egy kicsit bonyolult opció, a finomhangolásra, amit csinál, később visszatérünk.

Ez idő alatt a vCloud-ban vizuálisan nyomon követhetjük a klaszter létrehozását.
CSE: Kubernetes a vCloud-ban lévőknek

Amint a klaszter létrehozása befejeződött, készen áll a használatra.

Ellenőrizzük a telepítés helyességét a következő parancs segítségével: vcd cse cluster info MyCluster

CSE: Kubernetes a vCloud-ban lévőknek

Ezután meg kell szereznünk a klaszter konfigurációját a használathoz. kubectl

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

És ezt már ezzel az eszközzel ellenőrizhetjük a klaszter állapotát:

CSE: Kubernetes a vCloud-ban lévőknek

Ezen a ponton a klaszter körülbelül működőképes, ha nem lenne a tartós tárolók története. Mivel a vCloud-ban vagyunk, nem használhatjuk a vSphere szolgáltatót. Az opció —enable-nfs kipróbálta ezt a kellemetlenséget, de nem teljesen sikerült. Kézi finomhangolásra van szükség.

Először a csomópontunknak létre kell hoznia egy külön Independent lemezt a vCloud-ban. Ez garantálja, hogy az adataink nem tűnnek el a klaszterrel együtt, ha az törlésre kerül. Továbbá csatlakoztassuk a lemezt az NFS-hez.

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

Ezután SSH-n keresztül (valóban, létrehoztad a kulcsokat?) csatlakozunk az NFS csomópontunkhoz, és véglegesen csatlakoztatjuk a lemezt:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Figyelem: A meglévő lemezcímke az /dev/sdb-n el fog veszni, és az ezen a lemezen található összes adat törlődik. Folytatni akarja?
Igen/Nem? igen
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Modell: VMware Virtual disk (scsi)
Lemez /dev/sdb: 100GB
Sektor méret (logikai/fizikai): 512B/512B
Partíciós tábla: gpt
Lemez zászlók:

Szám  Kezd  Vég  Méret  Fájlrendszer  Név  Zászlók
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Fájlrendszer létrehozása 24413696 4k blokkal és 6111232 inode-dal
Fájlrendszer UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock mentések a következő blokkokon:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Csoport táblák allokálása: kész
Inode táblák írása: kész
Napló létrehozása (32768 blokk): kész
Superblock és fájlrendszer könyvelési információk írása: kész

Hozzunk létre egy könyvtárat az adatok számára, és csatoljuk oda az új partíciót:

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

Hozzunk létre öt tesztpartíciót, és osszuk meg őket a klaszter számára:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Ezt adjuk hozzá a fájl végéhez
/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! ;)
#Ezután exportáljuk a partíciókat
>exportfs -r

Mindezek után létrehozhatjuk a PV-t és a PVC-t a klaszterünkben körülbelül így:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Az NFS hoszt IP-címe, amelyhez korábban ssh-val csatlakoztunk.
    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

Ezzel a egy klaszter létrehozásának története véget ér, és elkezdődik a létrehozott klaszter életciklusa. Bónuszként — itt van még két hasznos CSE parancs, amelyek időnként jelentős energiát takaríthatnak meg:

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

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

Mindenkinek köszönjük az időt, ha kérdései vannak — kérdezzen a megjegyzésekben.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster