CSE: Kubernetes für alle in vCloud


Hallo allerseits!

So kam es, dass unser kleines Entwicklungsteam, ganz zu schweigen davon, dass es in letzter Zeit und sicherlich nicht plötzlich einige (und in Zukunft alle) Produkte an Kubernetes übertragen hat.

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

Von der Infrastruktur her hatten wir wenig Auswahl. vCloud Director und vCloud Director. Wir haben uns für eine neuere Version entschieden und beschlossen zu starten.

Als ich noch einmal „The Hard Way“ durchgesehen habe, bin ich schnell zu dem Schluss gekommen, dass gestern ein Tool zur Automatisierung zumindest grundlegender Prozesse wie Bereitstellung und Dimensionierung benötigt wurde. Durch das tiefe Eintauchen in Google wurde ein Produkt wie VMware Container Service Extension (CSE) ans Licht gebracht - ein Open Source-Produkt, mit dem Sie die Erstellung und Dimensionierung von k8s-Clustern für Benutzer in vCloud automatisieren können.
Haftungsausschluss: CSE hat seine Grenzen, aber für unsere Zwecke wurde es perfekt umgesetzt. Die Lösung sollte auch vom Cloud-Anbieter unterstützt werden. Da der Serverteil ebenfalls Open Source ist, fordern Sie ihn beim nächsten Manager an :)

CSE-Client-Installation


  1. Für den Einstieg benötigen Sie ein Administratorkonto in der vCloud-Organisation und ein im Voraus für den Cluster erstelltes geroutetes Netzwerk. Wichtig: Während des Bereitstellungsprozesses benötigen Sie einen Internetzugang über dieses Netzwerk. Vergessen Sie nicht, Firewall / NAT zu konfigurieren.

    Adressierung spielt keine Rolle. Nehmen Sie in diesem Beispiel 10.0.240.0/24:


    Da nach der Erstellung des Clusters eine Verwaltung erforderlich ist, wird das Vorhandensein eines VPN mit Routing zum erstellten Netzwerk empfohlen. Wir verwenden Standard-SSL-VPN, das auf dem Edge Gateway unseres Unternehmens konfiguriert ist.
  2. Als Nächstes müssen Sie den CSE-Client dort installieren, wo k8s-Cluster verwaltet werden. In meinem Fall ist dies ein funktionierender Laptop und ein paar gut versteckte Container, die die Automatisierung steuern.

    Der Client benötigt installierte Python-Version 3.7.3 und höher sowie ein installiertes vcd-cli-Modul , daher werden wir beide installieren.

    pip3 install vcd-cli pip3 install container-service-extension 
  3. Überprüfen Sie nach der Installation die Version von CSE und erhalten Sie Folgendes:

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

    Unerwartet, aber reparabel.
  4. Wie sich herausstellte, muss CSE als Modul an vcd-cli angeschraubt werden.
    Dazu müssen Sie sich zuerst bei 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' 
  5. Danach erstellt vcd-cli die Konfigurationsdatei ~ / .vcd-cli / profile.yaml
    Am Ende müssen Sie Folgendes hinzufügen:

     extensions: - container_service_extension.client.cse 
  6. Dann überprü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.

Clusterbereitstellung


CSE verfügt über mehrere Sätze von Verwendungsparametern, die alle hier angezeigt werden können .

  1. Erstellen Sie zunächst die Schlüssel für den kennwortlosen Zugriff auf den zukünftigen Cluster. Dieser Punkt ist wichtig, da die Kennworteingabe auf Knoten standardmäßig deaktiviert ist. Und wenn Sie die Schlüssel nicht angeben, können Sie über die Konsole der virtuellen Maschine viel Arbeit erledigen, was nicht 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. 
  2. Wir versuchen, einen Cluster zu erstellen:

     vcd cse cluster create MyCluster --network k8s_cluster_net --ssh-key ~/.ssh/id_rsa.pub --nodes 3 --enable-nfs 
  3. Wenn der Fehler angezeigt wird: Die Sitzung ist abgelaufen oder der Benutzer ist nicht angemeldet. Bitte melden Sie sich erneut an. - Melden Sie sich wie oben beschrieben erneut in vcd-cli bei vCloud an und versuchen Sie es erneut.

    Dieses Mal ist alles in Ordnung und die Aufgabe zum Erstellen eines Clusters 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) 
  4. Die Ausführung der Aufgabe dauert ca. 20 Minuten. In der Zwischenzeit werden wir die wichtigsten Startparameter analysieren.
    • --network - das Netzwerk, das wir zuvor erstellt haben.
    • --ssh-key - von uns erstellte Schlüssel, die in die Clusterknoten geschrieben werden.
    • --nodes n - Die Anzahl der Worker-Knoten des Clusters. Es wird immer einen Master geben, dies ist eine CSE-Einschränkung.
    • --enable-nfs - Erstellt einen zusätzlichen Knoten für NFS-Bälle unter persistenten Volumes. Als Pedaloption werden wir etwas später darauf zurückkommen, was es tut.

  5. In vCloud können Sie die Erstellung eines Clusters visuell beobachten.

  6. Sobald die Aufgabe zum Erstellen eines Clusters abgeschlossen ist, kann es losgehen.
  7. Überprüfen Sie die Bereitstellung mit dem Befehl vcd cse cluster info MyCluster .

  8. Als nächstes müssen wir die Cluster-Konfiguration für die Verwendung von kubectl erhalten .

     # vcd cse cluster config MyCluster > ./.kube/config 
  9. Und Sie können den Status des Clusters damit überprüfen:


Nicht so einfach


Zu diesem Zeitpunkt kann der Cluster als bedingt betriebsbereit betrachtet werden, wenn nicht für die Story mit persistenten Volumes. Da wir uns in vCloud befinden, schlägt die Verwendung von vSphere Provider fehl. Die Option --enable-nfs wurde entwickelt, um dieses Problem zu beheben , hat aber bis zum Ende nicht funktioniert. Manuelle Abstimmung ist erforderlich.

  1. Zu Beginn muss unser Knoten eine separate unabhängige Festplatte in vCloud erstellen. Dies stellt sicher, dass unsere Daten nicht im Cluster verschwinden, wenn sie gelöscht werden. Schließen Sie das Laufwerk auch an NFS an.

     # vcd disk create nfs-shares-1 100g --description 'Kubernetes NFS shares' # vcd vapp attach mycluster nfsd-9604 nfs-shares-1 
  2. Danach gehen wir durch ssh (haben Sie 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 
  3. Erstellen Sie ein Verzeichnis für die Daten und hängen Sie dort einen neuen Abschnitt ein:

     mkdir /export echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab mount -a 
  4. Erstellen wir fünf Testabschnitte und teilen sie für den 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 
  5. Nach all dieser Magie können Sie PV und PVC in unserem Cluster wie folgt erstellen:

    PV

     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 

Damit endet die Geschichte der Schaffung 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 - fragen Sie in den Kommentaren.

Source: https://habr.com/ru/post/de472752/


All Articles