CSE: Kubernetes per a aquells que estan a vCloud

CSE: Kubernetes per a aquells que estan a vCloud
Hola a tots!

Va passar que el nostre petit equip, per no dir que recentment, i certament no de sobte, ha crescut per traslladar alguns (i en el futur tots) productes a Kubernetes.

Hi havia moltes raons per això, però la nostra història no tracta sobre holivar.

Teníem poca opció pel que fa a la base de la infraestructura. vCloud Director i vCloud Director. Vam triar el més nou i vam decidir començar.

Un cop més, mirant "The Hard Way", vaig arribar molt ràpidament a la conclusió que ahir es necessitava una eina per automatitzar almenys processos bàsics, com ara el desplegament i el dimensionament. Una immersió profunda a Google va posar a la llum un producte com ara VMware Container Service Extension (CSE), un producte de codi obert que us permet automatitzar la creació i la mida dels clústers k8s per als usuaris de vCloud.

Exempció de responsabilitat: CSE té les seves limitacions, però per als nostres propòsits era perfecte. A més, la solució ha de ser compatible amb el proveïdor del núvol, però com que la part del servidor també és de codi obert, demaneu al vostre gestor més proper que la tingui disponible :)

Per començar a utilitzar-lo, necessiteu un compte d'administrador a l'organització de vCloud i una xarxa encaminada prèviament creada per al clúster (durant el procés de desplegament, necessiteu accés a Internet des d'aquesta xarxa, no us oblideu de configurar el tallafoc/NAT). L'adreça no importa. En aquest exemple, prenem 10.0.240.0/24

CSE: Kubernetes per a aquells que estan a vCloud

Com que després de la creació, el clúster s'haurà de gestionar d'alguna manera, es recomana tenir una VPN amb encaminament a la xarxa creada. Utilitzem una VPN SSL estàndard configurada a la passarel·la Edge de la nostra organització.

A continuació, heu d'instal·lar el client CSE on es gestionaran els clústers k8s. En el meu cas, es tracta d'un ordinador portàtil que funciona i un parell de contenidors ben amagats que impulsen l'automatització.

El client requereix Python versió 3.7.3 i superior instal·lada i el mòdul instal·lat vcd-cli, així que instal·lem tots dos.

pip3 install vcd-cli

pip3 install container-service-extension

Després de la instal·lació, comprovem la versió CSE i obtenim el següent:

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

Inesperat, però arreglable. Com va resultar, CSE s'ha d'adjuntar com a mòdul a vcd-cli.
Per fer-ho, primer heu d'iniciar sessió a vcd-cli a la nostra organització:

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

Després d'això, vcd-cli crearà un fitxer de configuració ~/.vcd-cli/profiles.yaml
Al final cal afegir el següent:

extensions:
  - container_service_extension.client.cse

Aleshores tornem a comprovar:

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

S'ha completat la fase d'instal·lació del client. Intentem desplegar el primer clúster.
CSE té diversos conjunts de paràmetres d'ús, tots es poden veure aquí.

Primer, creem claus per a l'accés sense contrasenya al futur clúster. Aquest punt és important, ja que de manera predeterminada, l'inici de sessió amb contrasenya als nodes estarà desactivat, i si no configureu les claus, podeu obtenir molta feina a través de les consoles de la màquina virtual, cosa que no és convenient.

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

Intentem començar a crear un clúster:

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

Si ens surt un error Error: la sessió ha caducat o l'usuari no ha iniciat sessió. Si us plau, torneu a iniciar sessió. — torneu a iniciar sessió vcd-cli a vCloud tal com es descriu anteriorment i torneu-ho a provar.

Aquesta vegada tot està bé i la tasca de crear un clúster ha començat.

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

Mentrestant, trigarà uns 20 minuts a completar la tasca, mirem els paràmetres bàsics de llançament.

—xarxa — la xarxa que vam crear abans.
—ssh-key — les claus que hem creat, que s'escriuran als nodes del clúster
—nodes n — Nombre de nodes de treball al clúster. Sempre hi haurà un mestre, aquesta és una limitació de CSE
—enable-nfs — creeu un node addicional per a recursos compartits de NFS en volums persistents. És una opció una mica de pedal; tornarem a afinar el que fa una mica més tard.

Mentrestant, a vCloud podeu supervisar visualment la creació d'un clúster
CSE: Kubernetes per a aquells que estan a vCloud

Un cop finalitzada la tasca de creació d'un clúster, està llest per utilitzar-lo.

Comprovem la correcció del desplegament amb l'ordre vcd cse clúster informació MyCluster

CSE: Kubernetes per a aquells que estan a vCloud

A continuació, hem d'obtenir la configuració del clúster per utilitzar-la kubectl

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

I podeu comprovar l'estat del clúster utilitzant-lo:

CSE: Kubernetes per a aquells que estan a vCloud

En aquest punt, es pot considerar que el clúster funciona condicionalment, si no és per la història amb volums persistents. Com que estem a vCloud, no podrem utilitzar vSphere Provider. Opció --enable-nfs dissenyat per suavitzar aquesta molèstia, però no va funcionar del tot. Cal un ajust manual.

Per començar, el nostre node ha de crear un disc independent independent a vCloud. Això garanteix que les nostres dades no desapareixeran juntament amb el clúster si se suprimeix. A més, connecteu el disc a NFS

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

Després d'això, anem mitjançant ssh (de debò heu creat les claus?) al nostre node NFS i finalment connectem el disc:

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

Creeu un directori per a dades i munteu-hi una partició nova:

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

Creem cinc particions de prova i les compartim per al clúster:

>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

Després de tota aquesta màgia, podem crear PV i PVC al nostre clúster una cosa així:
Periodista:

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

Aquí és on acaba la història de la creació d'un clúster i comença la història del seu cicle de vida. Com a avantatge, hi ha dues ordres CSE més útils que de vegades us permeten estalviar recursos o no:

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

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

Gràcies a tots pel vostre temps, si teniu cap pregunta, pregunteu als comentaris.

Font: www.habr.com

Afegeix comentari