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.
HinweisDie Multus-CNI wird für Arbeitslastcluster, die von einem vSphere with Tanzu Supervisor bereitgestellt werden, nicht unterstützt.
kubectl
wie unter Installieren der Tanzu CLI und anderen Tools zur Verwendung mit vSphere with Tanzu Supervisor oder Installieren der Tanzu CLI und anderer Tools zur Verwendung mit eigenständigen Verwaltungsclustern.large
oder extra-large
(siehe Beschreibung unter Vordefinierte Knotengrößen).HinweisSobald 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:
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:
HinweisWenn Sie einen planbasierten Cluster (Legacy) als Ziel verwenden, überspringen Sie diesen Schritt. Für planbasierte Cluster wird das
tanzu-standard
-Paket-Repository automatisch in jedem Cluster im Namespacetanzu-package-repo-global
aktiviert.
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.
tanzu-standard
-URL auf projects.registry.vmware.com/tkg/packages/standard/repo:v2.2.0
. 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.(Optional) So konfigurieren Sie Multus:
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.
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 3.7.1+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.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
HinweisStellen Sie sicher, dass Ihre benutzerdefinierte Image-Registrierung erreichbar ist, wenn Sie in einer Umgebung mit eingeschränktem Netzwerk arbeiten.
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
Befüllen Sie die Konfigurationsdatei multus-data-values.yaml
mit den gewünschten Feldwerten.
Entfernen Sie alle Kommentare aus der Datei multus-data-values.yaml
:
yq -i eval '... comments=""' multus-data-values.yaml
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
.
--namespace
nicht angegeben ist, installiert die Tanzu CLI das Paket im Namespace default
.kubectl create namespace my-packages
.AVAILABLE-PACKAGE-VERSION
ist die Version, die Sie oben abgerufen haben, z. B. 3.8.0+vmware.3-tkg.1
.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
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.
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"
}
}'
Erstellen Sie die Ressource, wie z. B. kubectl create -f multus-cni-crd.yaml
.
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.
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:
containers:
- name: sample-pod
command: ["/bin/ash", "-c", "trap : TERM INT; sleep infinity & wait"]
image: harbor-repo.vmware.com/dockerhub-proxy-cache/library/alpine
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-Schnittstelleeth0
: das von der Antrea- oder Calico-CNI verwaltete Standard-Pod-Netzwerknet1
: die über die Anmerkung k8s.v1.cni.cncf.io/networks: macvlan-conf
erstellte neue Schnittstelle.HinweisDas Standardnetzwerk erhält den Namen
eth0
, und zusätzliche Netzwerk-Pod-Schnittstellen erhalten den Namennet1
,net2
usw.
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.
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:
Terminating
mit Fehlern im kubelet
-Protokoll hängen.