CSE: Kubernetes für diejenigen, die in vCloud sind

CSE: Kubernetes für diejenigen, die in vCloud sind
Hallo zusammen!

Es hat sich so ergeben, dass unser kleines Team, um es milde auszudrücken, schon eine Weile damit beschäftigt ist, einige (und perspektivisch alle) Produkte auf Kubernetes zu migrieren.

Die Gründe dafür waren vielfältig, aber unsere Geschichte handelt nicht von einem Streit.

Bei der Infrastruktur hatten wir nicht viele Optionen. vCloud Director und vCloud Director. Wir wählten die neuere Version und entschieden uns, zu beginnen.

Nachdem ich erneut "The Hard Way" durchgesehen hatte, kam ich sehr schnell zu dem Schluss, dass ein Tool zur Automatisierung zumindest grundlegender Prozesse wie Deployment und Sizing schon gestern nötig gewesen wäre. Eine tiefgehende Recherche bei Google brachte mich zu dem Produkt VMware Container Service Extension (CSE) – ein Open-Source-Produkt, das es ermöglicht, die Erstellung und das Sizing von k8s-Clustern für diejenigen zu automatisieren, die in vCloud arbeiten.

Haftungsausschluss: CSE hat seine Einschränkungen, aber für unsere Zwecke war es ideal. Außerdem sollte die Lösung vom Cloud-Anbieter unterstützt werden, aber da der Serverteil ebenfalls Open-Source ist, fordern Sie dessen Verfügbarkeit von Ihrem nächsten Manager 🙂

Für den Start benötigen Sie ein Administratorkonto in der vCloud-Organisation und ein im Voraus erstelltes Routed-Netzwerk für den Cluster (während des Deployments ist Internetzugang aus diesem Netzwerk erforderlich, vergessen Sie nicht, Firewall/NAT einzurichten). Die Adressierung spielt keine Rolle. In diesem Beispiel verwenden wir 10.0.240.0/24.

CSE: Kubernetes für diejenigen, die in vCloud sind

Da der Cluster nach der Erstellung verwaltet werden muss, wird ein VPN mit Routing in das erstellte Netzwerk empfohlen. Wir verwenden einen Standard-SSL-VPN, der auf dem Edge Gateway unserer Organisation eingerichtet ist.

Als nächstes müssen Sie den CSE-Client installieren, von dem aus die k8s-Cluster verwaltet werden. In meinem Fall ist es ein Arbeitslaptop und eine paar gut versteckte Container, die die Automatisierung steuern.

Der Client erfordert eine installierte Python-Version von 3.7.3 oder höher und das installierte Modul vcd-cli, daher installieren wir beides.

pip3 install vcd-cli

pip3 install container-service-extension

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

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

Überraschend, aber korrigierbar. Es stellte sich heraus, dass CSE als Modul an vcd-cli angehängt werden muss.
Dazu müssen Sie zunächst vcd-cli in unsere Organisation einloggen:

# 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 dieser Datei muss Folgendes hinzugefügt werden:

extensions:
  - container_service_extension.client.cse

Danach überprüfen wir erneut:

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

Die Installation des Clients ist abgeschlossen. Lassen Sie uns versuchen, den ersten Cluster bereitzustellen.
CSE hat mehrere Satzparameter zur Nutzung, die Sie sich alle ansehen können hier.

Zunächst erstellen wir Schlüssel für den passwortlosen Zugang zum zukünftigen Cluster. Dieser Punkt ist wichtig, da der Passwortzugang zu den Knoten standardmäßig deaktiviert ist. Wenn keine Schlüssel festgelegt werden, kann man viel über die Konsolen der virtuellen Maschinen erreichen, was nicht unbedingt bequem 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.

Wir versuchen, die Erstellung des Clusters zu starten:

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

Wenn wir einen Fehler erhalten Fehler: Sitzung abgelaufen oder Benutzer nicht eingeloggt. Bitte erneut einloggen. — melden Sie sich erneut bei vcd-cli in vCloud an, wie oben beschrieben, und versuchen Sie es erneut.

Dieses Mal läuft alles gut und die Aufgabe zur Erstellung des Clusters wurde gestartet.

Cluster-Betrieb: Erstellen des vApp-Clusters 'MyCluster' (38959587-54f4-4a49-8f2e-61c3a3e879e0) aus der Vorlage 'photon-v2_k8-1.12_weave-2.3.0' (Revision 1)

Für den Abschluss der Aufgabe werden ungefähr 20 Minuten benötigt, währenddessen werden wir die grundlegenden Startparameter durchgehen.

—network — das Netzwerk, das wir zuvor erstellt haben.
—ssh-key — die von uns erstellten Schlüssel, die auf den Knoten des Clusters gespeichert werden
—nodes n — die Anzahl der Worker-Knoten des Clusters. Der Master wird immer einer sein, dies ist eine Einschränkung von CSE.
—enable-nfs — Erstellung eines zusätzlichen Knotens für den NFS-Sharing unter persistenten Volumes. Eine etwas spezielle Option, die wir bei der weiteren Anpassung, was sie bewirkt, später wieder ansprechen werden.

Währenddessen können wir in vCloud visuell die Erstellung des Clusters beobachten.
CSE: Kubernetes für diejenigen, die in vCloud sind

Sobald die Aufgabe zur Erstellung des Clusters abgeschlossen ist, ist er bereit zur Nutzung.

Prüfen wir die Richtigkeit des Deployments mit dem Befehl vcd cse cluster info MyCluster

CSE: Kubernetes für diejenigen, die in vCloud sind

Als nächstes müssen wir die Konfiguration des Clusters für die Nutzung erhalten kubectl

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

Und mit diesem können wir den Status des Clusters bereits überprüfen:

CSE: Kubernetes für diejenigen, die in vCloud sind

An diesem Punkt kann der Cluster als funktionsfähig angesehen werden, wäre da nicht die Angelegenheit mit den persistenten Volumes. Da wir in vCloud sind, ist die Nutzung des vSphere Providers nicht möglich. Die Option —enable-nfs sollte dieses Problem mildern, aber es hat nicht ganz geklappt. Eine manuelle Nachjustierung ist erforderlich.

Zunächst muss unser Knoten eine separate unabhängige Festplatte in vCloud erstellen. Dies gewährleistet, dass unsere Daten nicht zusammen mit dem Cluster verschwinden, sollte er gelöscht werden. Außerdem verbinden wir die Festplatte mit NFS.

# 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 schließen die Festplatte endgültig an:

root@nfsd-9604:~# parted /dev/sdb
(parted) mklabel gpt
Warnung: Das vorhandene Datenträgerlabel auf /dev/sdb wird gelöscht und alle Daten auf diesem Laufwerk gehen verloren. Möchten Sie fortfahren?
Ja/Nein? ja
(parted) Einheit GB
(parted) mkpart primary 0 100
(parted) print
Modell: VMware Virtual disk (scsi)
Laufwerk /dev/sdb: 100GB
Sektorgröße (logisch/physisch): 512B/512B
Partitionstabelle: gpt
Disk Flags:

Nummer Start End Größe Dateisystem Name Flags
 1 0.00GB 100GB 100GB primary

(parted) quit
root@nfsd-9604:~# mkfs -t ext4 /dev/sdb1
Erstelle Dateisystem mit 24413696 4k Blöcken und 6111232 Inodes
Dateisystem UUID: 8622c0f5-4044-4ebf-95a5-0372256b34f0
Superblock Sicherung auf folgenden Blöcken:
	32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
	4096000, 7962624, 11239424, 20480000, 23887872

Zuweisung der Gruppentabellen: erledigt
Schreiben der Inode-Tabellen: erledigt
Erstellen des Journals (32768 Blöcke): erledigt
Schreiben der Superblöcke und der Informationen zur Dateisystembuchhaltung: erledigt

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

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

Erstellen wir fünf Testpartitionen und teilen sie mit dem Cluster:

>cd /export
>mkdir vol1 vol2 vol3 vol4 vol5
>vi /etc/exports
#Fügen Sie dies am Ende der Datei hinzu
/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! ;)
#Als nächstes - exportieren wir die Partitionen
>exportfs -r

Nach all diesem Zauber können wir PV und PVC in unserem Cluster ungefähr so erstellen:
PV:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-vol1
spec:
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteMany
  nfs:
    # Gleiche IP wie der NFS-Host, zu dem wir vorher SSH hatten.
    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

Damit endet die Geschichte der Erstellung eines Clusters und die Geschichte seines Lebenszyklus beginnt. Als Bonus - noch zwei nützliche CSE-Befehle, die manchmal helfen können, Ressourcen gut zu sparen 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, bei Fragen - stellen Sie diese in den Kommentaren.

Quelle: habr.com

60GB SSD 8Gb DDR4