CSE: Kubernetes za one u vCloud-u

CSE: Kubernetes za one u vCloud-u
Zdravo svima!

Naša mala ekipa je nedavno, a neodložno, došla do točke kada smo počeli prenositi neke (a s vremenom i sve) proizvode u Kubernetes.

Bilo je mnogo razloga za to, ali naša priča nije o tome.

Imali smo mali izbor infrastrukturne osnove: vCloud Director i vCloud Director. Odabrali smo onaj noviji i odlučili početi.

Ponovo sam pregledao 'The Hard Way' i jako brzo došao do zaključka da je alat za automatizaciju barem osnovnih procesa, kao što su implementacija i veličanje, bio potreban još jučer. Duboko istraživanje Google-a osvijetlilo je proizvod kao što je VMware Container Service Extension (CSE) — open-source proizvod koji omogućava automatizaciju kreiranja i veličanja k8s klastera za one koji koriste vCloud.

Odricanje: CSE ima svoja ograničenja, ali savršeno odgovara našim potrebama. Također, rješenje bi trebalo podržavati cloud provajder, no pošto je server dio takođe open-source, zatražite njegovo postojanje od najbližeg menadžera 🙂

Za početak korišćenja potreban je administratorski nalog u organizaciji vCloud i unapred kreirana usmjerena mreža za klaster (tokom implementacije je potreban pristup internetu iz te mreže, ne zaboravite da postavite Firewall/NAT). Adresacija nije bitna. U ovom primeru, uzmimo 10.0.240.0/24.

CSE: Kubernetes za one u vCloud-u

Budući da će nakon kreiranja klasterom se morati nekako upravljati, preporučuje se da postoji VPN s usmjeravanjem u kreiranu mrežu. Koristimo standardni SSL-VPN, podešen na Edge Gateway naše organizacije.

Zatim je potrebno instalirati CSE klijent tamo odakle će se upravljati k8s klasterima. U mom slučaju, to je radni laptop i nekoliko dobro skrivenih kontejnera koji upravljaju automatizacijom.

Klijent zahteva instalaciju Python verzije 3.7.3 i više, kao i instalaciju modula vcd-cli, stoga ćemo instalirati oboje.

pip3 install vcd-cli

pip3 install container-service-extension

Nakon instalacije proveravamo verziju CSE i dobijamo sledeće:

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

Neočekivano, ali popravljivo. Kako se ispostavilo, CSE treba povezati kao modul za vcd-cli.
Za to je prvo potrebno prijaviti vcd-cli u našu organizaciju:

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

Nakon toga, vcd-cli će kreirati datoteku konfiguracije ~/.vcd-cli/profiles.yaml
Na kraj te datoteke potrebno je dodati sledeće:

extensions:
  - container_service_extension.client.cse

Nakon toga, ponovo proveravamo:

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

Postopek namestitve stranke je končan. Poskusimo razporediti prvi klaster.
CSE ima več nizov parametrov uporabe, vse si lahko ogledate. tu.

Najprej bomo ustvarili ključe za brez geselni dostop do prihodnjega klasterja. Ta korak je pomemben, saj je privzeto prijava z geslom na nodah izključena in če ne nastavite ključev, boste morda naleteli na veliko dela prek konzole virtualnih strojev, kar ni ravno priročno.

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

Poskusimo zagnati ustvarjanje klasterja:

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

Če dobite napako Error: Session has expired or user not logged in. Please re-login. — ponovno se prijavite v vcd-cli v vCloudu, kot je opisano zgoraj, in poskusite znova.

Tokrat je vse v redu in naloga za ustvarjanje klasterja se je začela.

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

Za dokončanje naloge bo potrebnih približno 20 minut, medtem pa si poglejmo glavne parametre za zagon.

—network — mreža, ki smo jo ustvarili prej.
—ssh-key — naši ustvarjeni ključi, ki bodo zapisani na nodah klasterja.
—nodes n — Število delovnih nod klasterja. Glavni vozlišče bo vedno en, to je omejitev CSE.
—enable-nfs — ustvarite dodatno vozlišče za NFS delitev za trajne količine. Malce kompleksna opcija, do nastavitev tega, kar počne, se bomo vrnili nekoliko pozneje.

Medtem lahko v vCloudu vizualno spremljate ustvarjanje klasterja.
CSE: Kubernetes za one u vCloud-u

Ko se je naloga za ustvarjanje klasterja zaključila, je pripravljen za delo.

Preverimo pravilnost namestitve z ukazom vcd cse cluster info MyCluster

CSE: Kubernetes za one u vCloud-u

Nato moramo pridobiti konfiguracijo klasterja za uporabo. kubectl

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

In stanje klasterja lahko preverimo že z njo:

CSE: Kubernetes za one u vCloud-u

V tem trenutku lahko klaster štejemo za delujočega, če ne bi bilo zgodbe s trajnimi količinami. Ker smo v vCloudu, ne moremo uporabiti vSphere Providerja. Opcija —enable-nfs je namenjena omiliti to nevšečnost, vendar se to ni povsem izšlo. Zahteva ročno nastavitev.

Najprej mora naše vozlišče ustvariti ločen neodvisen disk v vCloudu. To zagotavlja, da naši podatki ne izginejo skupaj s klasterjem, če bo ta izbrisan. Prav tako bomo priključili disk na NFS.

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

Nato se prek ssh (res ste ustvarili ključe?) povežemo na našo NFS vozlišče in disk dokončno povežemo:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on
this disk will be lost. Do you want to continue?
Yes/No? yes
(parted) unit GB
(parted) mkpart primary 0 100
(parted) print
Model: VMware Virtual disk (scsi)
Disk /dev/sdb: 100GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      0.00GB  100GB  100GB               primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Creating filesystem with 24413696 4k blocks and 6111232 inodes
Filesystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock backups stored on blocks:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

Ustvarimo imenik za podatke in namestimo nov razdelitev:

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

Ustvarimo pet testnih razdelitev in jih delimo s klastra:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Dodamo to na konec datoteke
/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! ;)
#Nato - izvozimo razdelitve
>exportfs -r

Po vsem tem čarovništvu, lahko ustvarimo PV in PVC v našem klastru približno takole:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Enak IP kot NFS gostitelj, s katerim smo SSH povezali prej.
    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

S tem se zgodba o ustvarjanju enega klastru konča in prične se zgodba o njegovem življenjskem ciklu. Kot bonus - še dve koristni ukazi CSE, ki omogočata, da občasno dobro prihranimo ali ne vire:

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

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

Vsem hvala za porabljen čas, če imate vprašanja - postavite jih v komentarjih.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster