CSE: Kubernetes pentru cei din vCloud

CSE: Kubernetes pentru cei din vCloud
Bună ziua tuturor!

S-a întâmplat ca echipa noastră mică, ca să nu spun că recent, și cu siguranță nu brusc, a crescut pentru a muta unele (și în viitor toate) produse în Kubernetes.

Au fost multe motive pentru asta, dar povestea noastră nu este despre holivar.

Nu am avut de ales în ceea ce privește baza infrastructurii. vCloud Director și vCloud Director. Am ales-o pe cea mai nouă și am decis să începem.

Încă o dată, uitându-mă prin „The Hard Way”, am ajuns foarte repede la concluzia că ieri era nevoie de un instrument pentru automatizarea cel puțin proceselor de bază, cum ar fi implementarea și dimensionarea. O scufundare profundă în Google a scos la lumină un astfel de produs precum VMware Container Service Extension (CSE) - un produs open source care vă permite să automatizați crearea și dimensionarea clusterelor k8s pentru cei din vCloud.

Disclaimer: CSE are limitările sale, dar pentru scopurile noastre a fost perfect. De asemenea, soluția trebuie să fie susținută de furnizorul de cloud, dar din moment ce partea de server este și open-source, cereți celui mai apropiat manager să o aibă disponibilă :)

Pentru a începe să îl utilizați, aveți nevoie de un cont de administrator în organizația vCloud și de o rețea rută creată anterior pentru cluster (în timpul procesului de implementare, aveți nevoie de acces la Internet din această rețea, nu uitați să configurați Firewall/NAT). Adresarea nu contează. În acest exemplu, să luăm 10.0.240.0/24

CSE: Kubernetes pentru cei din vCloud

Deoarece după creare, clusterul va trebui gestionat cumva, se recomandă să aveți un VPN cu rutare către rețeaua creată. Folosim un VPN SSL standard configurat pe Edge Gateway al organizației noastre.

Apoi, trebuie să instalați clientul CSE unde vor fi gestionate clusterele k8s. În cazul meu, acesta este un laptop funcțional și câteva containere bine ascunse care conduc automatizarea.

Clientul necesită instalarea Python versiunea 3.7.3 și o versiune ulterioară și modulul instalat vcd-cli, deci să le instalăm pe ambele.

pip3 install vcd-cli

pip3 install container-service-extension

După instalare, verificăm versiunea CSE și obținem următoarele:

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

Neașteptat, dar reparabil. După cum sa dovedit, CSE trebuie atașat ca modul la vcd-cli.
Pentru a face acest lucru, trebuie mai întâi să vă conectați vcd-cli la organizația noastră:

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

După aceasta, vcd-cli va crea un fișier de configurare ~/.vcd-cli/profiles.yaml
La sfârșit trebuie să adăugați următoarele:

extensions:
  - container_service_extension.client.cse

Apoi verificăm din nou:

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

Faza de instalare a clientului este finalizată. Să încercăm să implementăm primul cluster.
CSE are mai multe seturi de parametri de utilizare, toți pot fi vizualizați aici.

Mai întâi, să creăm chei pentru acces fără parolă la viitorul cluster. Acest punct este important, deoarece în mod implicit, autentificarea cu parolă la noduri va fi dezactivată, iar dacă nu setați cheile, puteți obține multă muncă prin consolele mașinilor virtuale, ceea ce nu este convenabil.

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

Să încercăm să începem să creăm un cluster:

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

Dacă primim o eroare Eroare: sesiunea a expirat sau utilizatorul nu s-a conectat. Vă rugăm să reconectați-vă. — conectați-vă din nou vcd-cli la vCloud așa cum este descris mai sus și încercați din nou.

De data aceasta totul este în regulă și sarcina de a crea un cluster a început.

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

Va dura aproximativ 20 de minute pentru a finaliza sarcina între timp, să ne uităm la parametrii de lansare de bază.

—network — rețeaua pe care am creat-o mai devreme.
—ssh-key — cheile pe care le-am creat, care vor fi scrise în nodurile clusterului
—nodes n — Numărul de noduri Worker din cluster. Va exista întotdeauna un singur maestru, aceasta este o limitare CSE
—enable-nfs — creează un nod suplimentar pentru partajări NFS în volume persistente. Este un pic o opțiune de pedală, vom reveni la reglarea ceea ce face un pic mai târziu.

Între timp, în vCloud puteți monitoriza vizual crearea unui cluster
CSE: Kubernetes pentru cei din vCloud

Odată ce sarcina de a crea un cluster este finalizată, acesta este gata de utilizare.

Să verificăm corectitudinea implementării cu comanda vcd cse cluster info MyCluster

CSE: Kubernetes pentru cei din vCloud

În continuare, trebuie să obținem configurația clusterului de utilizat kubectl

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

Și puteți verifica starea cluster-ului folosindu-l:

CSE: Kubernetes pentru cei din vCloud

În acest moment, clusterul poate fi considerat funcțional condiționat, dacă nu pentru povestea cu volume persistente. Deoarece suntem în vCloud, nu vom putea folosi vSphere Provider. Opțiune --enable-nfs conceput pentru a netezi această pacoste, dar nu a funcționat complet. Este necesară reglarea manuală.

Pentru a începe, nodul nostru trebuie să creeze un disc independent separat în vCloud. Acest lucru garantează că datele noastre nu vor dispărea împreună cu clusterul dacă acesta este șters. De asemenea, conectați discul la NFS

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

După aceea, mergem prin ssh (ai creat cu adevărat cheile?) la nodul nostru NFS și în final conectăm discul:

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

Creați un director pentru date și montați o partiție nouă acolo:

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

Să creăm cinci partiții de testare și să le partajăm pentru cluster:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Добавим это в конец файла
/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! ;)
#Далее - экспортируем разделы
>exportfs -r

După toată această magie, putem crea PV și PVC în clusterul nostru ceva de genul acesta:
Reporter:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Same IP as the NFS host we ssh'ed to earlier.
    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

Aici se termină povestea creării unui grup și începe povestea ciclului său de viață. Ca bonus, există încă două comenzi CSE utile care vă permit uneori să economisiți resurse sau nu:

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

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

Vă mulțumim tuturor pentru timpul acordat, dacă aveți întrebări, întrebați în comentarii.

Sursa: www.habr.com

Adauga un comentariu