|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
Multus 和 IPAM 插件
Multus CNI 是一个 CNI 插件,能够将多个网络接口附加到 Pod 上。Multus 并不替代 CNI 插件,而是作为 CNI 插件的多路复用器。在某些使用场景中,Multus 非常有用,特别是当 Pod 网络密集并需要额外的网络接口以支持数据平面加速技术(如 SR-IOV)时。
有关 Multus 的更多信息,请参阅 multus-cni 文档。
Multus 不能单独部署。它始终需要至少一个满足 Kubernetes 集群网络要求的传统 CNI 插件。该 CNI 插件成为 Multus 的默认插件,并将用于为所有 Pod 提供主要接口。在使用默认选项部署 K3s 时,该 CNI 插件是 Flannel。
|
版本门控
K3s 从 2024 年 10 月的版本开始使用固定的 CNI 二进制路径:v1.28.15+k3s1,v1.29.10+k3s1,v1.30.6+k3s1,v1.31.2+k3s1。 |
K3s 在 $DATA_DIR/data/cni 中查找 CNI 插件二进制文件。默认情况下,这是 /var/lib/rancher/k3s/data/cni。额外的 CNI 插件应安装到此位置。
在 2024 年 10 月的版本之前,CNI 二进制文件是 K3s 用户空间包的一部分,位于 $DATA_DIR/data/$HASH/bin,其中哈希值对每个 K3s 版本都是唯一的。
这使得部署额外的 CNI 插件变得困难,因为每次升级 K3s 时路径都会改变。
如果要在较旧版本的 K3s 上部署 Multus,您应使用 /var/lib/rancher/k3s/data/current/bin/ 作为 CNI 路径,但要预期每次 K3s 升级时都需要重新部署插件。
使用 IPAM 插件进行部署
需要一个 IP 地址管理器(IPAM)插件来为 Multus 创建的额外接口分配 IP 地址。可以安装一个或多个IPAM;下面的示例每个都展示了单个IPAM插件的使用,但可以根据需要组合。
下面的helm部署示例将部署一个DaemonSet,以创建Multus pods,在`/var/lib/rancher/k3s/data/cni/中安装所需的CNI二进制文件,并在/var/lib/rancher/k3s/agent/etc/cni/net.d`中安装Multus CNI配置。
-
host-local
-
Whereabouts
-
Multus DHCP守护程序
host-local IPAM插件从一组地址范围中分配IP地址。它将状态存储在主机文件系统上,从而确保单个主机上的IP地址唯一性。因此,我们不建议在多节点集群中使用它。此IPAM插件不需要额外的部署。有关更多信息:https://www.cni.dev/plugins/current/ipam/host-local/.
要使用 host-local 插件,请使用以下配置部署 Multus:
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是一个IP地址管理(IPAM)CNI插件,负责在整个集群中分配IP地址。
要使用Whereabouts IPAM插件,请使用以下配置部署Multus:
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/
在K3s上使用whereabouts时,configuration_path`必须在NetworkAttachmentDefinition的`ipam`配置中设置为/var/lib/rancher/k3s/agent/etc/cni/net.d/whereabouts.d/whereabouts.conf`。
例如,当使用whereabouts作为IPAM与macvlan插件时:
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"
}
}
当网络上已经有一个DHCP服务器运行时,可以部署DHCP IPAM插件。此 DaemonSet 负责定期续订 DHCP 租约。有关更多信息,请查看https://www.cni.dev/plugins/current/ipam/dhcp/[DHCP IPAM插件]的官方文档。
要使用DHCP插件,请使用以下配置部署Multus:
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
一旦部署了 Multus,您可以创建 NetworkAttachmentDefinition 资源,并在 Pod 规格中引用这些资源以附加额外的接口。
例如,使用上面的 Whereabouts 示例,您可以在 Pod 上使用 k8s.v1.cni.cncf.io/networks 注释创建一个 eth1 接口:
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"
有关更多信息和示例,请参阅上游文档。