Bereitstellen von Multus auf Arbeitslastclustern

Bei der Multus-CNI handelt es sich um ein Container Network Interface-Plug-In (CNI) für Kubernetes, mit denen Sie mehrere Netzwerkschnittstellen an einen einzelnen Pod anhängen und jedem einen anderen Adressbereich zuordnen können.

In diesem Thema werden die Installation des Multus-Pakets in einem Arbeitslastcluster, das von einem eigenständigen Verwaltungscluster bereitgestellt wird, sowie die Verwendung dieses Clusters zum Erstellen von Pods mit mehreren Netzwerkschnittstellen beschrieben. Beispiel: Antrea oder Calico als die primäre CNI und eine sekundäre Schnittstelle, wie z. B. macvlan- oder ipvlan- oder SR-IOV- oder DPDK-Geräte, für Hardware und beschleunigte Schnittstellen.

Binärdateien für macvlan und ipvlan sind bereits in der Vorlage des Arbeitslastclusterknotens installiert.

Hinweis

Die Multus-CNI wird für Arbeitslastcluster, die von einem vSphere with Tanzu Supervisor bereitgestellt werden, nicht unterstützt.

Voraussetzungen

Installieren des Multus-CNI-Pakets

Hinweis

Sobald die Multus-CNI in einem Cluster installiert ist, sollte sie nicht gelöscht werden. Weitere Informationen finden Sie im Folgenden unter Löschen von Multus wird nicht unterstützt.

So installieren Sie das Multus-CNI-Paket in einem Arbeitslastcluster und konfigurieren den Cluster zu Verwendungszwecken:

  1. Wenn der Cluster nicht über ein Paket-Repository mit installiertem Multus-CNI-Paket verfügt, wie z. B. das tanzu-standard-Repository, installieren Sie es:

    tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
    

    Dabei gilt:

    • PACKAGE-REPO-NAME ist der Name des Paket-Repositorys, wie z. B. tanzu-standard, oder der Name einer privaten Image-Registrierung, die mit ADDITIONAL_IMAGE_REGISTRY-Variablen konfiguriert ist.
    • PACKAGE-REPO-ENDPOINT ist die URL des Paket-Repositorys.

      • Für diese Version lautet die tanzu-standard-URL projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16. Informationen zum Abrufen dieses Werts über die Tanzu CLI finden Sie unter Listen von Paketrepositorys oder in Tanzu Mission Control in der Liste Add-Ons (Addons) > Repositorys (Repositories) im Fensterbereich Cluster.
  2. (Optional) So konfigurieren Sie Multus:

    1. Erstellen Sie eine Konfigurationsdatei, die die Multus-Parameter abruft und als Daemonset bereitstellt.

      tanzu package available get multus-cni.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
      

      Dabei ist PACKAGE-VERSION die Version des Multus-Pakets, das Sie installieren möchten, und FILE-PATH der Speicherort, an dem Sie die Konfigurationsdatei speichern möchten, z. B. multus-data-values.yaml.

      Informationen zu den Einstellungen für die Konfigurationsdatei finden Sie unter entrypoint.sh-Parameter im Multus-CNI-Repository.

    2. Führen Sie den Befehl tanzu package available list aus, um die verfügbaren Versionen des Multus-Pakets aufzulisten, wie z. B.:

      tanzu package available list multus-cni.tanzu.vmware.com -A
       NAME                        VERSION              RELEASED-AT                   NAMESPACE
       multus-cni.tanzu.vmware.com 4.0.1+vmware.1-tkg.1 2021-06-04 18:00:00 +0000 UTC tanzu-package-repo-global
       multus-cni.tanzu.vmware.com 3.8.0+vmware.1-tkg.1 2021-06-04 18:00:00 +0000 UTC tanzu-package-repo-global
       multus-cni.tanzu.vmware.com 3.7.1+vmware.2-tkg.2 2021-06-04 18:00:00 +0000 UTC tanzu-package-repo-global
      
      Hinweis

      Stellen Sie sicher, dass Ihre benutzerdefinierte Image-Registrierung erreichbar ist, wenn Sie in einer Umgebung mit eingeschränktem Netzwerk arbeiten.

    3. Führen Sie den Befehl tanzu package available get mit --values-schema aus, um die festzulegenden Feldwerte anzuzeigen:

      tanzu package available get multus-cni.tanzu.vmware.com/VERSION --values-schema -o FORMAT
      

      Dabei gilt: – VERSION ist eine Version, die in der Ausgabe tanzu package available list aufgelistet wird – FORMAT ist entweder yaml oder json

    4. Befüllen Sie die Konfigurationsdatei multus-data-values.yaml mit den gewünschten Feldwerten.

  3. Entfernen Sie alle Kommentare aus der Datei multus-data-values.yaml:

    yq -i eval '... comments=""' multus-data-values.yaml
    
  4. Führen Sie tanzu package install aus, um das Paket zu installieren.

    tanzu package install multus-cni --package multus-cni.tanzu.vmware.com --version AVAILABLE-PACKAGE-VERSION --values-file multus-data-values.yaml --namespace TARGET-NAMESPACE
    

    Dabei gilt:

    • TARGET-NAMESPACE ist der Namespace, in dem das Multus-Paket installiert werden soll. Beispielsweise der Namespace my-packages oder tanzu-cli-managed-packages.

      • Wenn das Flag --namespace nicht angegeben ist, installiert die Tanzu CLI das Paket im Namespace default.
      • Der angegebene Namespace muss bereits vorhanden sein, wie z. B. durch die Ausführung von kubectl create namespace my-packages.
    • AVAILABLE-PACKAGE-VERSION ist die Version, die Sie oben abgerufen haben, z. B. 4.0.1+vmware.1-tkg.1.
  5. Führen Sie tanzu package installed get aus, um den Status des installierten Pakets zu überprüfen.

    tanzu package installed get multus-cni --namespace NAMESPACE
    
  6. Erstellen Sie eine benutzerdefinierte Ressourcendefinition (CRD) für NetworkAttachmentDefinition, in der die CNI-Konfiguration für Netzwerkschnittstellen definiert wird, die von der Multus-CNI verwendet werden sollen.

    1. Erstellen Sie eine CRD-Spezifikation. Beispiel: Diese multus-cni-crd.yaml gibt eine NetworkAttachmentDefinition mit dem Namen macvlan-conf an, die eine macvlan-CNI konfiguriert:

      ---
      apiVersion: "k8s.cni.cncf.io/v1"
      kind: NetworkAttachmentDefinition
      metadata:
        name: macvlan-conf
      spec:
        config: '{
          "cniVersion": "0.3.0",
          "type": "macvlan",
          "master": "ens5",
          "mode": "bridge",
          "ipam": {
            "type": "host-local",
            "subnet": "192.168.1.0/24",
            "rangeStart": "192.168.1.200",
            "rangeEnd": "192.168.1.216",
            "routes": [
              { "dst": "0.0.0.0/0" }
              ],
            "gateway": "192.168.1.1"
          }
        }'
      
    2. Erstellen Sie die Ressource, wie z. B. kubectl create -f multus-cni-crd.yaml.

  7. Erstellen Sie einen Pod mit der Anmerkung k8s.v1.cni.cncf.io/networks, die eine kommagetrennte Liste der Namen der benutzerdefinierten Ressource NetworkAttachmentDefinition enthält.

    1. Erstellen Sie die Pod-Spezifikation, wie z. B. my-multi-cni-pod.yaml:

      apiVersion: v1
      kind: Pod
      metadata:
        name: sample-pod
        annotations:
          k8s.v1.cni.cncf.io/networks: macvlan-conf
      spec:
        securityContext:
          runAsUser: 1000
          runAsGroup: 3000
          fsGroup: 2000
          seccompProfile:
            type: RuntimeDefault
          runAsNonRoot: true
        containers:
        - name: sample-pod
          image: harbor-repo.vmware.com/dockerhub-proxy-cache/library/busybox:1.28
          command: [ "sh", "-c", "sleep 1h" ]
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
              - ALL
      
    2. Erstellen Sie den Pod. kubectl create -f my-multi-cni-crd.yaml erstellt beispielsweise den Pod sample-pod.

Nach der Erstellung des Pods verfügt dieser über drei Netzwerkschnittstellen:

  • lo: die Loopback-Schnittstelle
  • eth0: das von der Antrea- oder Calico-CNI verwaltete Standard-Pod-Netzwerk
  • net1: die über die Anmerkung k8s.v1.cni.cncf.io/networks: macvlan-conf erstellte neue Schnittstelle.
Hinweis

Das Standardnetzwerk erhält den Namen eth0, und zusätzliche Netzwerk-Pod-Schnittstellen erhalten den Namen net1, net2 usw.

Validieren von Multus

Führen Sie kubectl describe pod auf dem Pod aus und bestätigen Sie, dass in der Anmerkung k8s.v1.cni.cncf.io/network-status alle Netzwerkschnittstellen aufgelistet werden. Beispiel:

$ kubectl describe pod sample-pod

Name:         sample-pod
Namespace:    default
Priority:     0
Node:         tcecluster-md-0-6476897f75-rl9vt/10.170.109.225
Start Time:   Thu, 27 May 2021 15:31:20 +0000
Labels:       <none>
Annotations:  k8s.v1.cni.cncf.io/network-status:
                [{
                    "name": "",
                    "interface": "eth0",
                    "ips": [
                        "100.96.1.80"
                    ],
                    "mac": "66:39:dc:63:50:a3",
                    "default": true,
                    "dns": {}
                },{
                    "name": "default/macvlan-conf",
                    "interface": "net1",
                    "ips": [
                        "192.168.1.201"
                    ],
                    "mac": "02:77:cb:a0:60:e3",
                    "dns": {}
                }]
              k8s.v1.cni.cncf.io/networks: macvlan-conf

Führen Sie anschließend kubectl exec sample-pod -- ip a show dev net1 aus, um sicherzustellen, dass die Zielschnittstelle aktiv ist und mit der in den obigen Anmerkungen aufgelisteten IP-Adresse ausgeführt wird.

Löschen von Multus wird nicht unterstützt

Sobald die Multus-CNI in einem Cluster installiert ist, sollte sie nicht gelöscht werden.

Durch das Löschen von Multus wird die Multus-Konfigurationsdatei /etc/cni/net.d/00-multus.conf nicht im CNI-Skriptverzeichnis deinstalliert, wodurch folgende Probleme auftreten:

  • Fehler beim Erstellen neuer Pods. Dies ist ein bekanntes Problem. Weitere Informationen finden Sie unter Issue #461 im Multus-Repository.
  • Fehler beim Löschen von Pods, die vor dem Löschen von Multus erstellt wurden. Pods bleiben im Status Terminating mit Fehlern im kubelet-Protokoll hängen.
check-circle-line exclamation-circle-line close-line
Scroll to top icon