Auf dieser Seite wird gezeigt, wie Sie mit Anthos VM Runtime VMs in Anthos-Cluster auf Bare-Metal bereitstellen. Anthos VM Runtime verwendet KubeVirt, um VMs in Clustern zu orchestrieren, sodass Sie mit Ihren VM-basierten Anwendungen und Arbeitslasten in einer einheitlichen Entwicklungsumgebung arbeiten können. Sie können die Anthos VM Runtime beim Erstellen eines neuen Clusters und auf vorhandenen Clustern aktivieren.
Hinweis
Bei dieser Anleitung wird davon ausgegangen, dass ein Cluster einsatzbereit ist. Falls nicht, können Sie der Anthos-Cluster auf Bare-Metal-Kurzanleitung folgen, um einen Cluster auf Ihrer Workstation schnell einzurichten.
Anthos VM Runtime aktivieren
Öffnen Sie die Clusterkonfiguration mit folgendem Befehl:
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.
Fügen Sie
kubevirt
zum Abschnittspec
der Clusterkonfiguration hinzu. Wenn der Knoten die Hardwarevirtualisierung unterstützt, setzen SieuseEmulation
auffalse
, um eine bessere Leistung zu erzielen. Wenn die Hardwarevirtualisierung nicht unterstützt wird oder Sie sich nicht sicher sind, legen Sietrue
fest.spec: anthosBareMetalVersion: 1.8.9 kubevirt: useEmulation: true bypassPreflightCheck: false
Speichern Sie die Konfiguration und prüfen Sie, ob KubeVirt aktiviert ist:
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig get pods -n kubevirt
Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.
Der Befehl gibt etwa Folgendes zurück:
NAME READY STATUS RESTARTS AGE virt-api-767bc4ccd5-56fk2 1/1 Running 0 11d virt-api-767bc4ccd5-ms8tn 1/1 Running 0 11d virt-controller-c8468c84c-l4dzr 1/1 Running 0 11d virt-controller-c8468c84c-tljnj 1/1 Running 1 11d virt-handler-6wk5v 1/1 Running 0 11d virt-handler-ngth6 1/1 Running 0 11d virt-operator-7447547957-c6g5d 1/1 Running 1 11d virt-operator-7447547957-nl826 1/1 Running 0 11d
virtctl
installieren
Installieren Sie das
virtctl
-Befehlszeilentool alskubectl
-Plug-in.export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
Prüfen Sie, ob
virtctl
installiert ist:kubectl plugin list
virtctl
ist erfolgreich installiert, wenn es in der Antwort aufgeführt ist.
VM erstellen
Nachdem Sie KubeVirt auf Ihrem Cluster aktiviert und das virtctl
-Plug-in für kubectl
installiert haben, können Sie mit dem Befehl kubectl virt create vm
VMs in Ihrem Cluster erstellen. Bevor Sie diesen Befehl ausführen, sollten Sie eine cloud-init-Datei konfigurieren, damit Sie von der Konsole aus Zugriff auf die VM haben, nachdem sie erstellt wurde.
Benutzerdefinierte cloud-init-Datei für den Konsolezugriff erstellen
Es gibt zwei Möglichkeiten, eine benutzerdefinierte cloud-init-Datei zu erstellen. Am einfachsten ist es, das Flag --os=<OPERATING_SYSTEM>
beim Erstellen der VM anzugeben. Diese Methode konfiguriert automatisch eine einfache cloud-init-Datei und funktioniert für die folgenden Betriebssysteme.
- Ubuntu
- CentOS
- Debian
- Fedora
Nachdem die VM erstellt wurde, können Sie sie mit den folgenden Anmeldedaten zum ersten Mal aufrufen und dann das Passwort ändern:
user: root
password: changeme
Wenn das Image ein anderes Linux-basiertes Betriebssystem enthält oder Sie eine erweiterte Konfiguration benötigen, können Sie manuell eine benutzerdefinierte cloud-init-Datei erstellen und den Pfad zu dieser Datei mit dem Flag --cloud-init-file=<path/to/file>
angeben. In ihrer grundlegendsten Form ist die cloud-init-Datei eine YAML-Datei, die Folgendes enthält:
#cloud-config
user: root
password: changeme
lock_passwd: false
chpasswd: {expire: false}
disable_root: false
ssh_authorized_keys:
- <ssh-key>
Erweiterte Konfigurationen finden Sie unter Cloud-Konfigurationsbeispiele.
Nachdem Sie entschieden haben, welche Methode Sie verwenden möchten, können Sie eine VM erstellen.
Befehl kubectl virt create vm
ausführen
Sie können VMs aus öffentlichen oder benutzerdefinierten Images erstellen.
Öffentliches Image
Wenn Ihr Cluster eine externe Verbindung hat, können Sie mit dem folgenden Befehl eine VM aus einem öffentlichen Image erstellen:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class="DISK_CLASS" \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_NAME \
--memory=MEMORY_SIZE
Dabei gilt:
- VM_NAME durch den Namen der VM, die Sie erstellen möchten.
- MODE durch den Zugriffsmodus des Bootlaufwerks. Mögliche Werte sind
ReadWriteOnce
(Standardeinstellung) oderReadWriteMany
. - DISK_SIZE durch die gewünschte Größe für das Bootlaufwerk. Der Standardwert ist
20Gi
- DISK_CLASS durch die Speicherklasse des Bootlaufwerks. Der Standardwert ist
local-shared
. Führen Sie den Befehlkubectl get storageclass
aus, um eine Liste der verfügbaren Speicherklassen aufzurufen. - FILE_PATH durch den vollständigen Pfad der benutzerdefinierten cloud-init-Datei.
Je nach Image ist es möglicherweise erforderlich, dass die Konsole Zugriff auf die VM hat, nachdem sie erstellt wurde. Wenn Sie die cloud-init-Datei automatisch mit dem Flag
--os
konfigurieren möchten, geben Sie das Flag--cloud-init-file
nicht an. Wenn Sie das Flag--cloud-init-file
angeben, wird das Flag--os
ignoriert. Die akzeptablen Werte für--os
sindubuntu
,centos
,debian
undfedora
. - CPU_NUMBER durch die Anzahl der CPUs, die Sie für die VM konfigurieren möchten.
Der Standardwert ist
1
. - IMAGE_NAME durch das VM-Image, das
ubuntu20.04
(Standardeinstellung),centos8
oder eine URL des Images sein kann. - MEMORY_SIZE durch die Speichergröße der VM. Der Standardwert ist
4Gi
.
Benutzerdefiniertes Image
Beim Erstellen einer VM aus einem benutzerdefinierten Image können Sie entweder ein Image von einem HTTP-Image-Server oder ein lokal gespeichertes Image angeben.
HTTP-Image-Server
Sie können einen HTTP-Server mit Apache oder nginx einrichten und das benutzerdefinierte Image in seinen freigegebenen Ordner hochladen. Anschließend können Sie mit dem folgenden Befehl eine VM aus dem benutzerdefinierten Image erstellen:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=http://SERVER_IP/IMAGE_NAME \
--memory=MEMORY_SIZE
Dabei gilt:
- VM_NAME durch den Namen der VM, die Sie erstellen möchten.
- DISK_ACCESS_MODE durch den Zugriffsmodus des Bootlaufwerks. Mögliche Werte sind
ReadWriteOnce
(Standardeinstellung) oderReadWriteMany
. - DISK_SIZE durch die gewünschte Größe für das Bootlaufwerk. Der Standardwert ist
20Gi
- DISK_CLASS durch die Speicherklasse des Bootlaufwerks. Der Standardwert ist
local-shared
Führen Sie den Befehlkubectl get storageclass
aus, um eine Liste der verfügbaren Speicherklassen aufzurufen. - FILE_PATH durch den vollständigen Pfad der benutzerdefinierten cloud-init-Datei.
Je nach Image ist es möglicherweise erforderlich, dass die Konsole Zugriff auf die VM hat, nachdem sie erstellt wurde. Wenn Sie die cloud-init-Datei automatisch mit dem Flag
--os
konfigurieren möchten, geben Sie das Flag--cloud-init-file
nicht an. Wenn Sie das Flag--cloud-init-file
angeben, wird das Flag--os
ignoriert. Die akzeptablen Werte für--os
sindubuntu
,centos
,debian
undfedora
. - CPU_NUMBER durch die Anzahl der CPUs, die Sie für die VM konfigurieren möchten. Der Standardwert ist
1
. - SERVER_IP durch die IP-Adresse des Servers, der das Image hostet.
- IMAGE_NAME durch den Dateinamen des benutzerdefinierten Images.
- MEMORY_SIZE durch die Speichergröße der VM. Der Standardwert ist
4Gi
.
Lokal gespeichertes Image
Mit dem folgenden Befehl können Sie das benutzerdefinierte Image lokal speichern und daraus eine VM erstellen:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_PATH \
--memory=MEMORY_SIZE \
Dabei gilt:
- VM_NAME durch den Namen der VM, die Sie erstellen möchten.
- DISK_ACCESS_MODE durch den Zugriffsmodus des Bootlaufwerks. Mögliche Werte sind
ReadWriteOnce
(Standardeinstellung) oderReadWriteMany
. - DISK_SIZE durch die gewünschte Größe für das Bootlaufwerk. Der Standardwert ist
20Gi
- DISK_CLASS durch die Speicherklasse des Bootlaufwerks. Der Standardwert ist
local-shared
- FILE_PATH durch den vollständigen Pfad der benutzerdefinierten cloud-init-Datei.
Je nach Image ist es möglicherweise erforderlich, dass die Konsole Zugriff auf die VM hat, nachdem sie erstellt wurde. Wenn Sie die cloud-init-Datei automatisch mit dem Flag
--os
konfigurieren möchten, geben Sie das Flag--cloud-init-file
nicht an. Wenn Sie das Flag--cloud-init-file
angeben, wird das Flag--os
ignoriert. Die akzeptablen Werte für--os
sindubuntu
,centos
,debian
undfedora
. - CPU_NUMBER durch die Anzahl der CPUs, die Sie für die VM konfigurieren möchten. Der Standardwert ist
1
. - IMAGE_PATH durch den lokalen Dateipfad zum benutzerdefinierten Image.
- MEMORY_SIZE durch die Speichergröße der VM. Der Standardwert ist
4Gi
.
Standardwerte für Flags ändern
Der Befehl kubectl virt create vm
verwendet beim Ausführen Standardwerte, um nicht angegebene Flags automatisch auszufüllen. Sie können diese Standardwerte mit dem folgenden Befehl ändern:
kubectl virt config default FLAG
Ersetzen Sie FLAG durch das Flag des Parameters, für den Sie den Standardwert ändern möchten.
Beispiel: Mit dem folgenden Befehl wird die Standard-CPU-Konfiguration von der anfänglichen Standardeinstellung 1
in 2
geändert:
kubectl virt config default --cpu=2
Führen Sie folgenden Befehl aus, um eine Liste der unterstützten Flags und ihrer aktuellen Standardwerte aufzurufen:
kubectl virt config default -h
Die Standardkonfigurationen werden clientseitig als lokale Datei mit dem Namen ~/.virtctl.default
gespeichert. Sie können die Standardkonfigurationen ändern, indem Sie diese Datei auch bearbeiten.
Auf die VM zugreifen
Sie haben folgende Möglichkeiten, auf VMs zuzugreifen:
Konsolenzugriff
Führen Sie folgenden Befehl aus, um über die Konsole auf eine VM zuzugreifen:
kubectl virt console VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
VNC-Zugriff
Führen Sie folgenden Befehl aus, um mit VNC auf eine VM zuzugreifen:
# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
kubectl virt vnc VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
Interner Zugriff
Auf die IP-Adressen Ihrer Cluster-VMs können alle anderen Pods im Cluster direkt zugreifen. Führen Sie Folgendes aus, um die IP-Adresse einer VM zu ermitteln:
kubectl get vmi VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
Der Befehl gibt etwa Folgendes zurück:
NAME AGE PHASE IP NODENAME
vm1 13m Running 192.168.1.194 upgi-bm002
Externer Zugriff
In Ihrem Cluster erstellte VMs haben Pod-Netzwerkadressen, auf die nur von innerhalb des Clusters zugegriffen werden kann. So greifen Sie extern auf Cluster-VMs zu:
Geben Sie die VM als Load-Balancer-Dienst frei:
kubectl virt expose vm VM_NAME \ --port=LB_PORT \ --target-port=VM_PORT \ --type=LoadBalancer \ --name=SERVICE_NAME
Dabei gilt:
- VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
- LB_PORT durch den Port des freigegebenen Load-Balancer-Dienstes.
- VM_PORT durch den Port auf der VM, auf die Sie über den Load-Balancer-Dienst zugreifen möchten.
- SERVICE_NAME durch den Namen, den Sie diesem Load-Balancer-Dienst geben möchten.
Rufen Sie die externe IP-Adresse des Load-Balancer-Dienstes ab:
kubectl get svc SERVICE_NAME
Ersetzen Sie SERVICE_NAME durch den Namen des Load-Balancer-Dienstes, der die VM freigibt.
Sie können auf den Zielport der VM über die IP-Adresse zugreifen, die im Feld
EXTERNAL-IP
der Antwort aufgeführt ist.
Beispiel
Wenn Sie eine VM mit dem Namen galaxy
haben, auf die Sie von außerhalb des Clusters mit SSH zugreifen möchten, führen Sie Folgendes aus:
kubectl virt expose vm galaxy \
--port=25022 \
--target-port=22 \
--type=LoadBalancer \
--name=galaxy-ssh
Rufen Sie die IP-Adresse des Load-Balancers ab:
kubectl get svc galaxy-ssh
Der Befehl gibt etwa Folgendes zurück:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
galaxy-ssh LoadBalancer 10.96.250.76 21.1.38.202 25000:30499/TCP 4m40s
Jetzt können Sie mit SSH über 21.1.38.202:25022
(VIP:Port) von außerhalb des Clusters auf die VM zugreifen:
ssh root@21.1.38.202:22 -p 25022
VM-Telemetrie und Konsolenlogs prüfen
VM-Telemetrie und -Konsolenlogs wurden in die Google Cloud Console eingebunden. Telemetrieinformationen und Logdaten sind für das Monitoring des Status Ihrer VMs und die Fehlerbehebung bei Problemen mit Ihren Cluster-VMs entscheidend.
VM-Telemetrie
Im Dashboard VM-Status von Anthos-Clustern finden Sie Live-Telemetriedaten für Ihre Cluster-VMs.
So rufen Sie Telemetriedaten für Ihre Cluster-VMs auf:
Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche:
Wählen Sie Dashboards aus.
Klicken Sie in der Liste Alle Dashboards auf VM-Clusterstatus von Anthos.
VM-Konsolenlogs
Logs von seriellen Konsolen-VMs werden an Cloud Logging gestreamt und können im Log-Explorer aufgerufen werden.
VMs und ihre Ressourcen löschen
Nur die VM löschen
kubectl virt delete vm VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, die Sie löschen möchten.
Nur VM-Laufwerke löschen
kubectl virt delete disk DISK_NAME
Ersetzen Sie DISK_NAME durch den Namen des Laufwerks, das Sie löschen möchten. Wenn Sie versuchen, ein VM-Laufwerk zu löschen, bevor Sie die VM löschen, wird das Laufwerk zum Löschen markiert, für den Fall dass die VM gelöscht wird.
VM und Ressourcen löschen
kubectl virt delete vm VM_NAME --all
Ersetzen Sie VM_NAME durch den Namen der VM, die Sie löschen möchten.
Wenn Sie die Ressourcen prüfen möchten, die von der gelöschten VM verwendet werden, können Sie das Flag --dry-run
zusammen mit --all
angeben.
Anthos VM Runtime deaktivieren
Bevor Sie Anthos VM Runtime in einem Cluster deaktivieren können, müssen Sie überprüfen, ob alle VMs in diesem Cluster gelöscht wurden. Wenn Sie Anthos VM Runtime deaktivieren, werden alle KubeVirt-bezogenen Bereitstellungen entfernt, z. B. Pods und Dienste in den KubeVirt- und CDI-Namespaces.
Suchen Sie nach vorhandenen VMs im Cluster:
kubectl get vm
Wenn der Befehl anzeigt, dass sich in Ihrem Cluster noch VMs befinden, müssen Sie diese löschen, bevor Sie fortfahren.
Öffnen Sie die Clusterkonfiguration mit folgendem Befehl:
kubectl --kubeconfig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig edit cluster CLUSTER_NAME -n cluster-CLUSTER_NAME
Ersetzen Sie CLUSTER_NAME durch den Namen Ihres Clusters.
Entfernen Sie
kubevirt
aus dem Abschnittspec
der Clusterkonfiguration.spec: anthosBareMetalVersion: 1.8.9
kubevirt:useEmulation: truebypassPreflightCheck: falseSpeichern Sie die Konfiguration.