Multus und IPAM-Plugins
Multus CNI ist ein CNI-Plugin, das das Anfügen mehrerer Netzwerkschnittstellen an Pods ermöglicht. Multus ersetzt keine CNI-Plugins, sondern fungiert als Multiplexer für CNI-Plugins. Multus ist in bestimmten Anwendungsfällen nützlich, insbesondere wenn Pods netzwerkintensiv sind und zusätzliche Netzwerkschnittstellen benötigen, die Techniken zur Beschleunigung des Datenpfads wie SR-IOV unterstützen.
Für weitere Informationen über Multus siehe die multus-cni Dokumentation.
Multus kann nicht eigenständig bereitgestellt werden. Es erfordert immer mindestens ein konventionelles CNI-Plugin, das die Netzwerkanforderungen des Kubernetes-Clusters erfüllt. Dieses CNI-Plugin wird zum Standard für Multus und wird verwendet, um das primäre Interface für alle Pods bereitzustellen. Bei der Bereitstellung von K3s mit den Standardoptionen ist dieses CNI-Plugin Flannel.
|
Versionsgate
K3s verwendet ab den Veröffentlichungen im Oktober 2024 einen festen CNI-Pfad: v1.28.15+k3s1, v1.29.10+k3s1, v1.30.6+k3s1, v1.31.2+k3s1. |
K3s schaut in $DATA_DIR/data/cni nach CNI-Plugin-Binärdateien. Standardmäßig ist dies /var/lib/rancher/k3s/data/cni. Zusätzliche CNI-Plugins sollten an diesem Ort installiert werden.
Vor den Veröffentlichungen im Oktober 2024 waren CNI-Binärdateien Teil des K3s-Benutzerspace-Bundles unter $DATA_DIR/data/$HASH/bin, wobei der Hash für jede K3s-Version einzigartig ist.
Dies machte es schwierig, zusätzliche CNI-Plugins bereitzustellen, da sich der Pfad bei jedem Upgrade von K3s änderte.
Wenn Sie Multus in einer älteren Version von K3s bereitstellen, sollten Sie /var/lib/rancher/k3s/data/current/bin/ als CNI-Pfad verwenden, aber erwarten, dass die Plugins bei jedem Upgrade von K3s neu bereitgestellt werden müssen.
Bereitstellung mit einem IPAM-Plugin
Ein IP Address Manager (IPAM)-Plugin ist erforderlich, um IP-Adressen auf den zusätzlichen Schnittstellen zuzuweisen, die von Multus erstellt werden. Einer oder mehrere IPAMs können installiert werden; die Beispiele unten zeigen die Verwendung eines einzelnen IPAM-Plugins, aber sie können nach Bedarf kombiniert werden.
Die Helm-Implementierungsbeispiele unten werden ein DaemonSet bereitstellen, um Multus-Pods zu erstellen, die die erforderlichen CNI-Binärdateien in /var/lib/rancher/k3s/data/cni/ und die Multus-CNI-Konfiguration in /var/lib/rancher/k3s/agent/etc/cni/net.d installieren.
-
host-local
-
Whereabouts
-
Multus DHCP-Daemon
Das host-local IPAM-Plugin weist IP-Adressen aus einem Satz von Adressbereichen zu. Es speichert den Zustand lokal im Dateisystem des Hosts und gewährleistet somit die Einzigartigkeit der IP-Adressen auf einem einzelnen Host. Daher empfehlen wir es nicht für Multi-Node-Cluster. Dieses IPAM-Plugin erfordert keine zusätzliche Bereitstellung. Für weitere Informationen: https://www.cni.dev/plugins/current/ipam/host-local/.
Um das host-local Plugin zu verwenden, stellen Sie Multus mit der folgenden Konfiguration bereit:
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: multus
namespace: kube-system
spec:
repo: https://rke2-charts.rancher.io
chart: rke2-multus
targetNamespace: kube-system
valuesContent: |-
config:
fullnameOverride: multus
cni_conf:
confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
binDir: /var/lib/rancher/k3s/data/cni/
kubeconfig: /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig
# Comment the following line when using rke2-multus < v4.2.202
multusAutoconfigDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
Whereabouts ist ein IP-Adressmanagement (IPAM) CNI-Plugin, das IP-Adressen clusterweit zuweist.
Um das Whereabouts IPAM-Plugin zu verwenden, stellen Sie Multus mit der folgenden Konfiguration bereit:
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: multus
namespace: kube-system
spec:
repo: https://rke2-charts.rancher.io
chart: rke2-multus
targetNamespace: kube-system
valuesContent: |-
config:
fullnameOverride: multus
cni_conf:
confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
binDir: /var/lib/rancher/k3s/data/cni/
kubeconfig: /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig
# Comment the following line when using rke2-multus < v4.2.202
multusAutoconfigDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
rke2-whereabouts:
fullnameOverride: whereabouts
enabled: true
cniConf:
confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
binDir: /var/lib/rancher/k3s/data/cni/
Beim Einsatz von Whereabouts auf K3s muss configuration_path auf /var/lib/rancher/k3s/agent/etc/cni/net.d/whereabouts.d/whereabouts.conf in der Konfiguration des NetworkAttachmentDefinition ipam gesetzt werden.
Zum Beispiel, wenn Whereabouts als IPAM mit dem macvlan-Plugin verwendet wird:
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
name: macvlan-whereabouts
spec:
config: |-
{
"cniVersion": "1.0.0",
"type": "macvlan",
"master": "eth0",
"mode": "bridge",
"ipam": {
"type": "whereabouts",
"range": "172.17.0.0/24",
"gateway": "172.17.0.1",
"configuration_path": "/var/lib/rancher/k3s/agent/etc/cni/net.d/whereabouts.d/whereabouts.conf"
}
}
Das DHCP IPAM-Plugin kann bereitgestellt werden, wenn bereits ein DHCP-Server im Netzwerk läuft. Dieses DaemonSet kümmert sich um die regelmäßige Erneuerung des DHCP-Leasings. Für weitere Informationen überprüfen Sie bitte die offiziellen Dokumente von DHCP IPAM-Plugin.
Um das DHCP-Plugin zu verwenden, stellen Sie Multus mit der folgenden Konfiguration bereit:
apiVersion: helm.cattle.io/v1
kind: HelmChart
metadata:
name: multus
namespace: kube-system
spec:
repo: https://rke2-charts.rancher.io
chart: rke2-multus
targetNamespace: kube-system
valuesContent: |-
config:
fullnameOverride: multus
cni_conf:
confDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
binDir: /var/lib/rancher/k3s/data/cni/
kubeconfig: /var/lib/rancher/k3s/agent/etc/cni/net.d/multus.d/multus.kubeconfig
# Comment the following line when using rke2-multus < v4.2.202
multusAutoconfigDir: /var/lib/rancher/k3s/agent/etc/cni/net.d
manifests:
dhcpDaemonSet: true
Multus verwenden
Sobald Multus bereitgestellt wurde, können Sie NetworkAttachmentDefinition-Ressourcen erstellen und diese in Pod-Spezifikationen referenzieren, um zusätzliche Schnittstellen anzuhängen.
Zum Beispiel können Sie unter Verwendung des oben genannten Beispiels für den Aufenthaltsort eine eth1-Schnittstelle auf einem Pod mit der k8s.v1.cni.cncf.io/networks-Annotation erstellen:
apiVersion: apps/v1
kind: Deployment
metadata:
name: multus-demo
labels:
app: multus-demo
spec:
replicas: 1
selector:
matchLabels:
app: multus-demo
template:
metadata:
annotations:
k8s.v1.cni.cncf.io/networks: macvlan-whereabouts@eth1
labels:
app: multus-demo
spec:
containers:
- name: shell
image: docker.io/rancher/mirrored-library-busybox:1.36.1
imagePullPolicy: IfNotPresent
command:
- sleep
- "3600"
Siehe die Upstream-Dokumentation für zusätzliche Informationen und Beispiele.