CSE: Kubernetes für diejenigen in vCloud

CSE: Kubernetes für diejenigen in vCloud
Hallo an alle!

So kam es, dass unser kleines Team, um nicht zu sagen, dass es in letzter Zeit und schon gar nicht plötzlich so groß geworden ist, einige (und in Zukunft alle) Produkte auf Kubernetes verlagert.

Dafür gab es viele Gründe, aber in unserer Geschichte geht es nicht um Holivar.

Hinsichtlich der Infrastrukturbasis hatten wir kaum eine Wahl. vCloud Director und vCloud Director. Wir entschieden uns für das neuere und beschlossen, anzufangen.

Als ich „The Hard Way“ noch einmal durchblätterte, kam ich sehr schnell zu dem Schluss, dass gestern ein Tool zur Automatisierung zumindest grundlegender Prozesse wie Bereitstellung und Größenanpassung benötigt wurde. Ein tiefer Einblick in Google brachte ein Produkt wie VMware Container Service Extension (CSE) ans Licht – ein Open-Source-Produkt, mit dem Sie die Erstellung und Dimensionierung von k8s-Clustern für diejenigen in vCloud automatisieren können.

Haftungsausschluss: CSE hat seine Grenzen, aber für unsere Zwecke war es perfekt. Außerdem muss die Lösung vom Cloud-Anbieter unterstützt werden, aber da der Serverteil ebenfalls Open Source ist, bitten Sie Ihren nächstgelegenen Manager, ihn zur Verfügung zu stellen :)

Um es nutzen zu können, benötigen Sie ein Administratorkonto in der vCloud-Organisation und ein zuvor erstelltes geroutetes Netzwerk für den Cluster (während des Bereitstellungsprozesses benötigen Sie Internetzugang über dieses Netzwerk, vergessen Sie nicht, Firewall/NAT zu konfigurieren). Die Adressierung spielt keine Rolle. Nehmen wir in diesem Beispiel 10.0.240.0/24

CSE: Kubernetes für diejenigen in vCloud

Da der Cluster nach der Erstellung irgendwie verwaltet werden muss, wird empfohlen, über ein VPN mit Routing zum erstellten Netzwerk zu verfügen. Wir verwenden ein Standard-SSL-VPN, das auf dem Edge Gateway unserer Organisation konfiguriert ist.

Als Nächstes müssen Sie den CSE-Client installieren, auf dem die k8s-Cluster verwaltet werden. In meinem Fall handelt es sich dabei um einen funktionierenden Laptop und ein paar gut versteckte Container, die die Automatisierung vorantreiben.

Für den Client ist die Installation von Python Version 3.7.3 und höher sowie die Installation des Moduls erforderlich vcd-cli, also installieren wir beide.

pip3 install vcd-cli

pip3 install container-service-extension

Nach der Installation überprüfen wir die CSE-Version und erhalten Folgendes:

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

Unerwartet, aber reparierbar. Wie sich herausstellte, muss CSE als Modul an vcd-cli angehängt werden.
Dazu müssen Sie sich zunächst mit vcd-cli bei unserer Organisation anmelden:

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

Danach erstellt vcd-cli eine Konfigurationsdatei ~/.vcd-cli/profiles.yaml
Am Ende müssen Sie Folgendes hinzufügen:

extensions:
  - container_service_extension.client.cse

Dann prüfen wir noch einmal:

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

Die Client-Installationsphase ist abgeschlossen. Versuchen wir, den ersten Cluster bereitzustellen.
CSE verfügt über mehrere Sätze von Nutzungsparametern, die alle angezeigt werden können hier.

Erstellen wir zunächst Schlüssel für den passwortlosen Zugriff auf den zukünftigen Cluster. Dieser Punkt ist wichtig, da die Passwortanmeldung bei Knoten standardmäßig deaktiviert ist und Sie, wenn Sie die Schlüssel nicht festlegen, viel Arbeit über die Konsolen der virtuellen Maschine erledigen können, was nicht praktisch ist.

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

Versuchen wir, mit der Erstellung eines Clusters zu beginnen:

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

Wenn wir eine Fehlermeldung erhalten Fehler: Sitzung ist abgelaufen oder Benutzer ist nicht angemeldet. Bitte melden Sie sich erneut an. — Melden Sie sich wie oben beschrieben erneut bei vcd-cli bei vCloud an und versuchen Sie es erneut.

Dieses Mal ist alles in Ordnung und die Aufgabe, einen Cluster zu erstellen, hat begonnen.

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

Es wird etwa 20 Minuten dauern, die Aufgabe abzuschließen. Schauen wir uns in der Zwischenzeit die grundlegenden Startparameter an.

–Netzwerk – das Netzwerk, das wir zuvor erstellt haben.
—ssh-key — die von uns erstellten Schlüssel, die auf die Clusterknoten geschrieben werden
–nodes n – Anzahl der Worker-Knoten im Cluster. Es wird immer einen Master geben, dies ist eine CSE-Einschränkung
–enable-nfs – Erstellen Sie einen zusätzlichen Knoten für NFS-Freigaben unter persistenten Volumes. Es ist so etwas wie eine Pedaloption; wir werden etwas später darauf zurückkommen, was es tut.

Unterdessen können Sie in vCloud die Erstellung eines Clusters visuell überwachen
CSE: Kubernetes für diejenigen in vCloud

Sobald die Erstellung eines Clusters abgeschlossen ist, ist er einsatzbereit.

Lassen Sie uns die Richtigkeit der Bereitstellung mit dem Befehl überprüfen vcd cse Cluster-Info MyCluster

CSE: Kubernetes für diejenigen in vCloud

Als nächstes müssen wir die zu verwendende Clusterkonfiguration abrufen kubectl

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

Und Sie können damit den Status des Clusters überprüfen:

CSE: Kubernetes für diejenigen in vCloud

An diesem Punkt kann davon ausgegangen werden, dass der Cluster bedingt funktioniert, wenn nicht die Story mit persistenten Bänden vorhanden wäre. Da wir uns in vCloud befinden, können wir vSphere Provider nicht verwenden. Möglichkeit --enable-nfs Es wurde entwickelt, um dieses Ärgernis zu beseitigen, aber es hat nicht ganz geklappt. Manuelle Anpassung erforderlich.

Zunächst muss unser Knoten eine separate unabhängige Festplatte in vCloud erstellen. Dies garantiert, dass unsere Daten nicht mitsamt dem Cluster verschwinden, wenn dieser gelöscht wird. Schließen Sie die Festplatte außerdem an NFS an

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

Danach gehen wir per ssh (Sie haben die Schlüssel wirklich erstellt?) zu unserem NFS-Knoten und verbinden schließlich die Festplatte:

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

Erstellen Sie ein Verzeichnis für Daten und mounten Sie dort eine neue Partition:

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

Lassen Sie uns fünf Testpartitionen erstellen und sie für den Cluster freigeben:

>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

Nach all dieser Magie können wir in unserem Cluster etwa so PV und PVC erzeugen:
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

Hier endet die Geschichte der Entstehung eines Clusters und die Geschichte seines Lebenszyklus beginnt. Als Bonus gibt es zwei weitere nützliche CSE-Befehle, mit denen Sie manchmal Ressourcen sparen können oder nicht:

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

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

Vielen Dank für Ihre Zeit. Wenn Sie Fragen haben, stellen Sie diese in den Kommentaren.

Source: habr.com

Kommentar hinzufügen