Anleitung: Linux-VM in der Anthos-VM-Laufzeit erstellen und verwalten


In dieser Anleitung erfahren Sie, wie Sie eine virtuelle Linux-Maschine (VM) auf einer neuen Installation von Anthos VM-Laufzeit erstellen und verwalten. Sie erfahren, wie Sie die grundlegenden Abhängigkeiten wie ein StorageClass und ein virtuelles Netzwerk erstellen und definieren und dann eine VM erstellen, die diese Ressourcen verwendet. Anschließend erfahren Sie, wie Sie die VM bearbeiten, z. B. um ein neues Laufwerk hinzuzufügen.

Lernziele

  • Grundlegende Abhängigkeiten konfigurieren
    • StorageClass-Laufzeit für Anthos-VM-Laufzeit erstellen
    • Virtuelles Netzwerk für die VMs erstellen
  • VM-Bootlaufwerk erstellen
  • VM erstellen
  • VM bearbeiten, um ein neues virtuelles Laufwerk hinzuzufügen

Hinweis

Für diese Anleitung benötigen Sie Zugriff auf die folgenden Ressourcen und Tools:

StorageClass erstellen

Mit einer StorageClass definieren Sie den Speichertyp, den Sie für VMs bereitstellen. Unterschiedliche Speicherklassen können einer unterschiedlichen Arten von Speicherhardware, Dateisystem oder Leistung zugeordnet werden.

Im Rahmen dieser Anleitung ist es nicht möglich, eine spezifische Anleitung für jeden StorageClass und jeden Speicherpartner bereitzustellen.

Mit Anthos kompatible Storage-Partner bieten qualifizierte CSI-Treiber (Container Storage Interface) zur Installation und Konfiguration der erforderlichen benutzerdefinierten Ressourcen für Ihren Speicher. Wenn Sie den CSI-Treiber in Ihrem Cluster installieren möchten, lesen Sie die Liste der unterstützten Speicherpartner und folgen Sie der Anleitung.

Nachdem Sie den CSI-Treiber für Ihre Speicherplattform installiert haben, sind eine oder mehrere Speicherklassen in Ihrem Cluster verfügbar. In dieser Anleitung verwenden Sie eine dieser Speicherklassen, um ein virtuelles Laufwerk zu erstellen.

Im folgenden grundlegenden Beispiel NFS StorageClass wird der NFS CSI-Treiber verwendet. Sie definieren die NFS-Serveradresse und den Pfad für die Verwendung in StorageClass. Alle Knoten in Ihrem Cluster können dann eine Verbindung zu diesem NFS-Speicher herstellen und diesen verwenden:

  apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: example-nfs
  provisioner: nfs.csi.k8s.io
  parameters:
    server: nfs-server.example.com
    path: /vm-share
  reclaimPolicy: Delete
  volumeBindingMode: Immediate
  mountOptions:
    - nconnect=8
    - nfsvers=4.1

In dieser Anleitung verwenden Sie den Namen eines StorageClass in Ihrem eigenen Cluster.

Die Anthos VM-Laufzeit generiert automatisch ein Speicherprofil für jede StorageClass in einem Cluster. Das Speicherprofil hat den gleichen Namen wie die zugehörige StorageClass. Speicherprofile bieten zusätzliche Konfigurationsoptionen für die einzelnen StorageClass. Weitere Informationen zu Speicherprofilen, einschließlich einer Konfigurationsanleitung, finden Sie unter Speicherprofile konfigurieren.

Virtuelles Netzwerk erstellen

VMs stellen über eine virtuelle Netzwerkschnittstelle eine Verbindung zu einem virtuellen Netzwerk her. Über das virtuelle Netzwerk können sie mit anderen VMs im Cluster oder mit Ressourcen außerhalb des Clusters kommunizieren.

In dieser Anleitung erstellen Sie ein einfaches virtuelles Netzwerk der Ebene 2 (L2), das einen externen DHCP-Server verwenden kann. Wenn Sie die Verwendung eines externen DHCP-Servers aktivieren, können Sie die Konfiguration der DNS- und Gateway-Einstellungen überspringen, sofern diese von DHCP bereitgestellt werden.

Führen Sie die folgenden Schritte aus, um ein Netzwerk zu erstellen, das einen externen DHCP-Server verwendet:

  1. Erstellen Sie in einem Editor Ihrer Wahl ein Network-Manifest wie dhcp-network.yaml.

    nano dhcp-network.yaml
    
  2. Kopieren Sie das folgende YAML-Manifest und fügen Sie es ein:

    apiVersion: networking.gke.io/v1
    kind: Network
      name: NETWORK_NAME
    spec:
      type: L2
      nodeInterfaceMatcher:
        interfaceName: INTERFACE_NAME
      externalDHCP4: true
    

    Ersetzen Sie die folgenden Werte:

    • NETWORK_NAME: Name des Netzwerks
    • INTERFACE_NAME ist der Name der Schnittstelle auf Ihren Anthos-Clustern auf Bare-Metal-Knoten, an den das Netzwerk angehängt werden soll. Alle Knoten sollten denselben Schnittstellennamen haben.

    In diesem Network-Manifest werden die folgenden Werte festgelegt:

    • Arbeitslasten können an dieses Netzwerk nur einen L2-Anhang haben. Dies ist das einzige Netzwerk type, das Sie in der Anthos-VM-Laufzeit erstellen können.
    • Im Netzwerk ist externes DHCP aktiviert. Der externe DHCP-Server ist für die Zuweisung von IPv4-Adressen, die Routen, das Gateway und die DNS-Konfiguration für mit diesem Netzwerk verbundene Arbeitslasten verantwortlich.
  3. Speichern und schließen Sie das Manifest Network in Ihrem Editor.

  4. Erstellen Sie das Netzwerk mit kubectl:

    kubectl apply -f use-dhcp-network.yaml
    

VM-Bootlaufwerk erstellen

Eine VM kann ein vorab erstelltes Laufwerk-Image verwenden oder von einem ISO-Image starten, um das Betriebssystem manuell zu installieren. Diese Laufwerk-Images können über HTTP oder in Cloud Storage gespeichert und abgerufen werden und der Zugriff erfolgt über Secret.

In dieser Anleitung erstellen Sie mit HTTP ein Bootlaufwerk aus dem öffentlichen Cloud-Image von Ubuntu Server 20.04.

Führen Sie die folgenden Schritte aus, um ein Laufwerk aus einem Image zu erstellen.

  1. Erstellen Sie in einem Editor Ihrer Wahl ein VirtualMachineDisk-Manifest wie my-disk.yaml.

    nano my-disk.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DISK_NAME
    spec:
      size: 20Gi
      storageClassName: STORAGE_CLASS_NAME
      source:
        http:
          url: https://cloud-images.ubuntu.com/releases/focal/release/ubuntu-20.04-server-cloudimg-amd64.img
    

    Ersetzen Sie die folgenden Werte:

    • DISK_NAME ist der Name, den Sie für Ihr Laufwerk verwenden möchten. In diesem Beispiel wird ein 20Gi-Laufwerk (20 Gibibyte) namens DISK_NAME mit einem öffentlichen Ubuntu Server 20.04-Image erstellt.
    • STORAGE_CLASS_NAME ist die StorageClass, die Sie für Ihre VirtualMachineDisk verwenden möchten.
      • Verwenden Sie kubectl get storageclass, um die in Ihrem Cluster verfügbaren Elemente aufzulisten.
  3. Speichern und schließen Sie das Manifest VirtualMachineDisk in Ihrem Editor.

  4. Erstellen Sie das Laufwerk mit kubectl:

    kubectl apply -f my-disk.yaml
    

VM erstellen

Erstellen Sie jetzt mit einem in den vorherigen Abschnitten erstellten virtuellen Netzwerk und einem Bootlaufwerk eine VM. Die VM stellt eine Verbindung zum virtuellen Netzwerk her und wird vom virtuellen Laufwerk gestartet. In der folgenden Anleitung wird eine VM durch direkte Anwendung einer VirtualMachine-YAML-Manifestdatei mit der kubectl-Befehlszeile erstellt.

  1. Erstellen Sie im Editor Ihrer Wahl ein Manifest, das eine VirtualMachine wie my-vm.yaml definiert:

    nano my-vm.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      osType: linux
      compute:
        cpu:
          vcpus: VCPU_NUMBER
        memory:
          capacity: MEMORY_SIZE
      interfaces:
        - name: eth0
          networkName: NETWORK_NAME
          default: true
      disks:
        - boot: true
          virtualMachineDiskName: DISK_NAME
    

    Ersetzen Sie die folgenden Werte:

    • VM_NAME: der Name Ihrer VM.
    • VCPU_NUMBER: die optionale Anzahl der vCPUs, die der VM zugewiesen werden sollen. Ohne diese Einstellung werden standardmäßig zwei vCPUs zugewiesen.
      • Sie können einer VM zwischen 1 und 96 vCPUs zuweisen.
    • MEMORY_SIZE: die optionale Menge an Arbeitsspeicher, die der VM zugewiesen werden soll. Ohne diese Einstellung werden standardmäßig 4 GiB Arbeitsspeicher zugewiesen.
    • NETWORK_NAME ist der Name Ihres Netzwerks, das in einem vorherigen Abschnitt erstellt wurde.
    • DISK_NAME ist der Name des im vorherigen Abschnitt erstellten Bootlaufwerks. Dieses Laufwerk ist auf boot: true festgelegt.
  3. Speichern und schließen Sie das Manifest in Ihrem Editor.

  4. Erstellen Sie die VM und das Laufwerk mit kubectl:

    kubectl apply -f my-vm.yaml
    
  5. Es kann einige Minuten dauern, bis die VM erstellt ist. Prüfen Sie den Status der VM mit dem Befehl: kubectl

    kubectl get gvm VM_NAME
    

    Das folgende Ausgabebeispiel zeigt die VM im Status Running:

    NAME    STATUS    AGE   IP
    MY_VM   Running   64s   192.168.2.124
    

Verbindung zur VM herstellen

Wenn Ihre VM ausgeführt wird, stellen Sie eine Verbindung zur Konsole der VM her. Über diese Konsolenverbindung können Sie grundlegende Aufgaben ausführen, z. B. die VM weiter konfigurieren oder eine Anwendung installieren.

  1. Verwenden Sie kubectl, um über die Konsole auf eine VM zuzugreifen:

    kubectl virt ssh VM_NAME
    
  2. Nachdem Sie erfolgreich eine Verbindung zur Konsole der VM hergestellt haben, beenden Sie die VM-Sitzung und die Konsole:

    Ctrl + ]
    

Bearbeiten Sie die VM

Während des Lebenszyklus Ihrer VM sollten Sie Ihre VM bearbeiten. Sie können beispielsweise Speicher hinzufügen, um eine Anwendung auf einem dedizierten Laufwerk zu installieren, oder zusätzlichen Speicher für Ihre Anwendung verwenden.

In dieser Anleitung erstellen Sie ein leeres Laufwerk und hängen es an die VM an. In diesem Szenario können Sie ein Datenlaufwerk zum Speichern von Anwendungsdaten erstellen.

  1. Erstellen Sie in einem Editor Ihrer Wahl ein VirtualMachineDisk-Manifest wie my-data-disk.yaml.

    nano my-data-disk.yaml
    
  2. Kopieren Sie die folgende YAML-Definition und fügen Sie sie ein:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachineDisk
    metadata:
      name: DATA_DISK_NAME
    spec:
      size: 10Gi
      storageClassName: STORAGE_CLASS_NAME
    

    Ersetzen Sie die folgenden Werte:

    • DATA_DISK_NAME: Der Name, den Sie für Ihr Datenlaufwerk verwenden möchten. In diesem Beispiel wird ein 10Gi-Laufwerk (10 Gibibyte) erstellt.
    • STORAGE_CLASS_NAME ist die StorageClass, die Sie für Ihre VirtualMachineDisk verwenden möchten.
      • Verwenden Sie kubectl get storageclass, um die in Ihrem Cluster verfügbaren Elemente aufzulisten.
  3. Speichern und schließen Sie das Laufwerkmanifest in Ihrem Editor.

  4. Erstellen Sie das Laufwerk mit kubectl:

    kubectl apply -f my-data-disk.yaml
    
  5. Beenden Sie mit kubectl Ihre VM, bevor Sie das neue virtuelle Laufwerk anhängen:

    kubectl virt stop VM_NAME
    
  6. Bearbeiten Sie Ihre VM-Ressource:

    kubectl edit gvm VM_NAME
    

    Aktualisieren Sie das YAML-Manifest VirtualMachine, um das Laufwerk am Ende des Abschnitts spec.disks der VM anzuhängen:

    apiVersion: vm.cluster.gke.io/v1
    kind: VirtualMachine
    metadata:
      name: VM_NAME
    spec:
      ...
      disks:
        - boot: true
          virtualMachineDiskName: DISK_NAME
        - virtualMachineDiskName: DATA_DISK_NAME
    

    Ersetzen Sie DATA_DISK_NAME durch den Namen des im vorherigen Schritt erstellten Laufwerks.

  7. Speichern und schließen Sie das aktualisierte VM-Manifest in Ihrem Editor.

  8. Starten Sie die VM mit kubectl:

    kubectl virt start VM_NAME
    

Bereinigen

Führen Sie die folgenden Schritte aus, um die in dieser Anleitung erstellten Ressourcen zu löschen:

  1. Löschen Sie Ihre VM.

    kubectl delete -f my-vm.yaml
    
  2. Löschen Sie die VirtualMachineDisk-Ressourcen:

    kubectl delete -f my-data-disk.yaml
    kubectl delete -f my-disk.yaml
    

Wenn Sie die grundlegenden Abhängigkeiten in Ihrem Cluster nicht beibehalten möchten, führen Sie die folgenden Schritte aus:

  1. Löschen Sie Ihr virtuelles Netzwerk:

    kubectl delete -f use-dhcp-network.yaml
    
  2. Folgen Sie der Anleitung Ihres Speicherpartners, um den CSI-Treiber aus Ihrem Cluster zu entfernen.

Nächste Schritte