官方地址
资源列表
主机IP | 主机名称 | 主机角色 | 软件 |
---|---|---|---|
192.168.111.50 | server1 | 主节点1 | API Server、controller-manager 和 scheduler |
192.168.111.51 | server2 | 主节点2 | API Server、controller-manager 和 scheduler |
192.168.111.52 | server3 | 主节点3 | API Server、controller-manager 和 scheduler |
192.168.111.53 | agent1 | 工作节点1 | kubelet 和 kube-proxy |
192.168.111.57 | loadBalancer1 | server集群负载均衡器1 | haproxy、keepalived |
192.168.111.58 | loadBalancer2 | server集群负载均衡器2 | haproxy、keepalived |
192.168.111.59 | 该主机不存在 | virtual_ip | 备注:通过keepalived动态漂移该IP到loadBalancer1、loadBalancer2 |
1、RAM:最低 4 GB(建议至少 8 GB)
2、CPU:最少 2(建议至少 4 CPU)
3、集群中的所有机器的网络彼此均能相互连接(公网和内网都可以)
4、节点之中不可以有重复的主机名、MAC 地址或 product_uuid
5、开启机器上的某些端口
6、为了保证 kubelet 正常工作,必须禁用交换分区
网络配置
名称 | 网段 |
---|---|
Node网段 | 192.168.111.0/24 |
Service网段 | 10.97.0.0/16 |
Pod网段 | 10.245.0.0/16 |
初始化环境
设置各节点的主机名
hostnamectl set-hostname server1 && hostname # 在主节点1设置
hostnamectl set-hostname server2 && hostname # 在主节点2设置
hostnamectl set-hostname server3 && hostname # 在主节点3设置
#
hostnamectl set-hostname agent1 && hostname # 在从节点1设置
#
hostnamectl set-hostname loadBalancer1 && hostname # 在LoadBalancer节点1设置
hostnamectl set-hostname loadBalancer2 && hostname # 在LoadBalancer节点2设置
设置各节点Host文件(所有 Server 和 Agent 节点)
vi /etc/hosts # 编辑文件,注意不能有空格
192.168.111.50 www.server1.com
192.168.111.51 www.server2.com
192.168.111.52 www.server3.com
192.168.111.53 www.agent1.com
关闭各节点的防火墙(所有 Server 和 Agent 节点)
systemctl disable nftables.service && systemctl stop nftables.service && systemctl status nftables.service
永久禁用各节点的交换分区(所有 Server 和 Agent 节点)
swapoff -a && sed -i 's/.*swap.*/#&/' /etc/fstab # 注释掉swap那一行
同步各节点的时区(所有 Server 和 Agent 节点)
#timedatectl status # 查看当前系统时区
#timedatectl list-timezones # 查看所有时区
timedatectl set-timezone Asia/Shanghai # 设置系统时区为中国/上海
配置 containerd 内核模块(所有 Server 和 Agent 节点)
- 转发 IPv4 并让 iptables 看到桥接流量
cat <<EOF | tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
lsmod | grep overlay # 确认 overlay 模块被加载
lsmod | grep br_netfilter # 确认 br_netfilter 模块被加载
cat <<EOF | tee /etc/sysctl.d/k8s.conf
# 添加网桥过滤和地址转发功能
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
# 下面的内核参数可以解决ipvs模式下长连接空闲超时的问题
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.tcp_keepalive_time = 600
EOF
sysctl --system # 应用 sysctl 参数而不重新启动
# 确认 net.bridge.bridge-nf-call-iptables、net.bridge.bridge-nf-call-ip6tables 和 net.ipv4.ip_forward 系统变量在你的 sysctl 配置中被设置为 1
sysctl net.bridge.bridge-nf-call-iptables net.bridge.bridge-nf-call-ip6tables net.ipv4.ip_forward
安装 ipvsadm(所有 Server 和 Agent 节点)
- 安装
apt install -y ipvsadm ipset
- 查看ipvs开启状态
ipvsadm -Ln
- 通过配置文件来实现永久加载
cat > /etc/modules-load.d/ipvs.conf << EOF
ip_vs
ip_vs_lc
ip_vs_wlc
ip_vs_rr
ip_vs_wrr
ip_vs_lblc
ip_vs_lblcr
ip_vs_dh
ip_vs_sh
ip_vs_fo
ip_vs_nq
ip_vs_sed
ip_vs_ftp
ip_vs_sh
nf_conntrack
ip_tables
ip_set
xt_set
ipt_set
ipt_rpfilter
ipt_REJECT
ipip
EOF
- 确保所有节点的 ipvs 的模块已经运行
lsmod | grep ip_vs
NetworkManager 操作(Server1节点)
NetworkManager 会控制默认网络命名空间中接口的路由表,其中许多 CNI(包括 RKE2 的默认 CNI)会为连接到容器而创建 veth 对。这会干扰 CNI 进行正确路由。因此,如果在启用 NetworkManager 的系统上安装 RKE2,强烈建议你将 NetworkManager 配置为忽略 calico/flannel 相关的网络接口。为此,在 /etc/NetworkManager/conf.d 中创建名为 rke2-canal.conf 的配置文件
安装rke2时,需要查看NetworkManager,保证它不会干扰rke2,保证cali和flannel的网卡不被NetworkManager管理
systemctl is-active NetworkManager # 查看 NetworkManager 工作状态,如果开启则需要做以下配置
mkdir -p /etc/NetworkManager/conf.d
cat << EOF > /etc/NetworkManager/conf.d/rke2-canal.conf
[keyfile]
unmanaged-devices=interface-name:cali*;interface-name:flannel*
EOF
升级系统
apt update # 只检查是否有可用更新
apt upgrade # 更新已安装的软件包
安装要求
先决条件
-
两个节点不能具有相同的主机名
如果你所有节点的主机名都相同,请在 RKE2 配置文件中为集群的每个节点设置不同的 node-name 参数 -
必须以 root 用户或通过 sudo 执行 RKE2 安装
-
对于 RKE2 1.21 及更高版本,如果主机内核支持 AppArmor,则在安装 RKE2 之前还必须具有 AppArmor 工具(通常可通过 apparmor-parser 包获得:apt install apparmor)
磁盘
RKE2 的性能取决于数据库的性能。由于 RKE2 嵌入式运行 etcd 并将数据目录存储在磁盘上,我们建议尽可能使用 SSD 以确保最佳性能
网络
-
如果主机安装并启用了 NetworkManager,请确保将其配置为忽略 CNI 管理的接口
-
如果节点安装并启用了 Wicked,请确保转发 sysctl 配置已启用
-
RKE2 server 需要开放端口 6443 和 9345 才能供集群中的其他节点访问
-
使用 Flannel VXLAN 时,所有节点都需要能够通过 UDP 端口 8472 访问其他节点
-
如果要使用 Metrics Server,则需要在每个节点上打开端口 10250
-
重要提示:节点上的 VXLAN 端口会开放集群网络,让任何人均能访问集群。因此不要将 VXLAN 端口暴露给外界。请使用禁用 8472 端口的防火墙/安全组来运行节点
-
入站网络规则
协议 端口 源 描述
TCP 9345 RKE2 Agent 节点 Kubernetes API
TCP 6443 RKE2 Agent 节点 Kubernetes API
UDP 8472 RKE2 Server 和 Agent 节点 只有 Flannel VXLAN 需要
TCP 10250 RKE2 Server 和 Agent 节点 kubelet
TCP 2379 RKE2 Server 节点 etcd 客户端端口
TCP 2380 RKE2 Server 节点 etcd 对等端口
TCP 30000-32767 RKE2 Server 和 Agent 节点 NodePort 端口范围
UDP 8472 RKE2 Server 和 Agent 节点 Cilium CNI VXLAN
TCP 4240 RKE2 Server 和 Agent 节点 Cilium CNI 健康检查
ICMP 8/0 RKE2 Server 和 Agent 节点 Cilium CNI 健康检查
TCP 179 RKE2 Server 和 Agent 节点 使用 BGP 的 Calico CNI
UDP 4789 RKE2 Server 和 Agent 节点 使用 VXLAN 的 Calico CNI
TCP 5473 RKE2 Server 和 Agent 节点 使用 Typha 的 Calico CNI
TCP 9098 RKE2 Server 和 Agent 节点 Calico Typha 健康检查
TCP 9099 RKE2 Server 和 Agent 节点 Calico 健康检查
TCP 5473 RKE2 Server 和 Agent 节点 使用 Typha 的 Calico CNI
UDP 8472 RKE2 Server 和 Agent 节点 使用 VXLAN 的 Canal CNI
TCP 9099 RKE2 Server 和 Agent 节点 Canal CNI 健康检查
UDP 51820 RKE2 Server 和 Agent 节点 使用 WireGuard IPv4 的 Canal CNI
UDP 51821 RKE2 Server 和 Agent 节点 使用 WireGuard IPv6/双栈的 Canal CNI
RKE2 二进制文件预览
Github下载地址
# 版本号
v1.27.1+rke2r1
# 二进制文件
rke2-images-calico.linux-amd64.tar.gz
rke2-images-calico.linux-amd64.tar.zst
rke2-images-calico.linux-amd64.txt
高可用 RKE2 集群配置流程
一个高可用的 RKE2 集群由以下部分组成:
1、一个固定的注册地址,放在 Server 节点的前面,允许其他节点注册到集群
2、运行 etcd、Kubernetes API 和其他 control plane 服务的奇数个(推荐三个)Server 节点
3、零个或多个 Agent 节点,用于运行你的应用和服务
Agent 通过固定注册地址注册,当 RKE2 启动 kubelet 并且必须连接到 Kubernetes api-server 时,它通过 rke2 agent 进程进行连接,该进程充当客户端负载均衡器
注意:如果你的节点安装并启用了 NetworkManager,请确保将其配置为忽略 CNI 管理的接口
安装 Server1 节点
第一个 Server 节点会建立其他 Server 或 Agent 节点在连接集群时用于注册的 Secret 令牌
要将你自己的预共享 secret 指定为令牌,请在启动时设置 token 参数
如果你不指定预共享 secret,RKE2 会生成一个预共享 secret 并将它放在 /var/lib/rancher/rke2/server/node-token 中
为了避免固定注册地址的证书错误,请在启动 Server 时设置 tls-san 参数。这个选项在 Server 的 TLS 证书中增加一个额外的主机名或 IP 作为 Subject Alternative Name。如果你想通过 IP 和主机名访问,你可以将它指定为一个列表
使用脚本安装 RKE2 时,可以使用以下环境变量来配置安装:
1、INSTALL_RKE2_VERSION # 指定从 GitHub 下载的 RKE2 版本号,不填将尝试从 stable channel 下载最新版本
2、INSTALL_RKE2_CHANNEL # 用于获取 RKE2 下载 URL 的 Channel。默认为 stable。可选项:stable、latest、testing
3、INSTALL_RKE2_TYPE # 创建的 systemd 服务类型,可以是 “server” 或 “agent”,默认值是 “server”
4、INSTALL_RKE2_CHANNEL_URL # 用于获取 RKE2 下载 URL 的 Channel URL。默认为 https://update.rke2.io/v1-release/channels
5、INSTALL_RKE2_METHOD # 安装方法。默认是基于 RPM 的系统 rpm,所有其他系统都是 tar
安装
# curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn sh -
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="server" \
INSTALL_RKE2_VERSION=v1.27.1+rke2r1 \
sh -
rke2 --version
# rke2 version v1.27.1+rke2r1 (9ce3825ec005872a0873307844ba99a2bdd4ee19)
# go version go1.20.3 X:boringcrypto
systemctl enable rke2-server.service && systemctl restart rke2-server.service# 设置开机自启并重启
# 启动成功后会将 rke2-server 服务和 rke2 二进制文件安装到主机上:
# 1、rke2-server 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启
# 2、rke2执行文件和两个清理脚本(rke2-killall.sh 和 rke2-uninstall.sh)将安装到 /usr/local/bin 目录
# 3、kubeconfig 文件将写入 /etc/rancher/rke2/rke2.yaml 文件
# 4、其它实用程序将安装到 /var/lib/rancher/rke2/bin,包括 kubectl、crictl 和 ctr。请注意默认情况下它们不在你的路径上
# 5、可用于注册其他 Server 或 Agent 节点的令牌将在 /var/lib/rancher/rke2/server/node-token 中创建
systemctl status rke2-server.service # 查看运行状态,首次安装后启动比较慢
cat /var/lib/rancher/rke2/server/node-token # 查看令牌
# K1048778df366c140bf4909040f565013a93cd27be53e2125bfe7168eeebba83997::server:4699cb808e06676a3e70a22db8526922
添加 Server1 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
token: K1048778df366c140bf4909040f565013a93cd27be53e2125bfe7168eeebba83997::server:4699cb808e06676a3e70a22db8526922
tls-san:
- www.server1.com
- www.server2.com
- www.server3.com
node-taint: # 默认Server 节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
- "CriticalAddonsOnly=true:NoExecute"
node-name: www.server1.com
# 打标签
node-label:
- "node=Master"
- "www.server1.com=Master"
#设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
#设置etcd快照策略
etcd-snapshot-retention: 2
etcd-snapshot-schedule-cron: '*/5 * * * *'
# 自定义垃圾回收机制,添加到所所节点
kubelet-arg:
- "eviction-hard=nodefs.available<1%,memory.available<10Mi"
- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"
- "eviction-soft=nodefs.available<5%,imagefs.available<1%"
重新加载配置并重启
systemctl daemon-reload && systemctl restart rke2-server && systemctl status rke2-server
安装 Server2 和 Server3 节点
安装
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="server" \
INSTALL_RKE2_VERSION=v1.27.1+rke2r1 \
sh -
添加 Server2 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
server: https://www.server1.com:9345
token: K1048778df366c140bf4909040f565013a93cd27be53e2125bfe7168eeebba83997::server:4699cb808e06676a3e70a22db8526922
tls-san:
- www.server1.com
- www.server2.com
- www.server3.com
#node-taint: # 默认Server 节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
#- "CriticalAddonsOnly=true:NoExecute"
node-name: www.server2.com
# 打标签
node-label:
- "node=Master"
- "www.server2.com=Master"
#设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
#设置etcd快照策略
etcd-snapshot-retention: 2
etcd-snapshot-schedule-cron: '*/5 * * * *'
# 自定义垃圾回收机制,添加到所所节点
kubelet-arg:
- "eviction-hard=nodefs.available<1%,memory.available<10Mi"
- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"
- "eviction-soft=nodefs.available<5%,imagefs.available<1%"
添加 Server3 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
server: https://www.server1.com:9345
token: K1048778df366c140bf4909040f565013a93cd27be53e2125bfe7168eeebba83997::server:4699cb808e06676a3e70a22db8526922
tls-san:
- www.server1.com
- www.server2.com
- www.server3.com
#node-taint: # 默认Server 节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
#- "CriticalAddonsOnly=true:NoExecute"
node-name: www.server3.com
# 打标签
node-label:
- "node=Master"
- "www.server3.com=Master"
#设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
#设置etcd快照策略
etcd-snapshot-retention: 2
etcd-snapshot-schedule-cron: '*/5 * * * *'
# 自定义垃圾回收机制,添加到所所节点
kubelet-arg:
- "eviction-hard=nodefs.available<1%,memory.available<10Mi"
- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"
- "eviction-soft=nodefs.available<5%,imagefs.available<1%"
重新加载配置并重启
systemctl enable rke2-server.service # 设置开机自启
systemctl daemon-reload && systemctl restart rke2-server && systemctl status rke2-server # 刷新文件并重启
安装 agent1 节点(可选)
因为 RKE2 Server 节点默认是可调度的,所以 HA RKE2 Server 集群的最小节点数是三个 Server 节点和零个 Agent 节点。要添加用于运行应用程序和服务的节点,请将 Agent 节点加入到你的集群中
安装 agent1
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="agent" \
INSTALL_RKE2_VERSION=v1.27.1+rke2r1 \
sh -
添加 agent1 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
server: https://www.server1.com:9345
token: K1048778df366c140bf4909040f565013a93cd27be53e2125bfe7168eeebba83997::server:4699cb808e06676a3e70a22db8526922
node-name: www.agent1.com
# 打标签
node-label:
- "node=agent"
- "www.agent1.com=agent"
#设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
# 自定义垃圾回收机制,添加到所所节点
kubelet-arg:
- "eviction-hard=nodefs.available<1%,memory.available<10Mi"
- "eviction-soft-grace-period=nodefs.available=30s,imagefs.available=30s"
- "eviction-soft=nodefs.available<5%,imagefs.available<1%"
重新加载配置并重启
systemctl enable rke2-agent.service # 设置开机自启
systemctl daemon-reload && systemctl restart rke2-agent && systemctl status rke2-agent # 刷新文件并重启
journalctl -u rke2-agent -f
kubectl 命令优化
mkdir -p ~/.kube && ln -s /etc/rancher/rke2/rke2.yaml ~/.kube/config && chmod 600 ~/.kube/config
ln -s /var/lib/rancher/rke2/agent/etc/crictl.yaml /etc/crictl.yaml
- path设置
vi /etc/profile # 编辑该文件并添加如下内容
export PATH=$PATH:/var/lib/rancher/rke2/bin
source /etc/profile
在 Service1 上查看集群运行情况
查看 rke2-server 服务日志
journalctl -u rke2-server -f
查看 rke2-agent 服务日志
journalctl -u rke2-agent -f
查看集群节点
# /var/lib/rancher/rke2/bin/kubectl get nodes --kubeconfig /etc/rancher/rke2/rke2.yaml
kubectl get nodes
NAME STATUS ROLES AGE VERSION
www.agent1.com Ready <none> 2m1s v1.27.1+rke2r1
www.server1.com Ready control-plane,etcd,master 23h v1.27.1+rke2r1
www.server2.com Ready control-plane,etcd,master 22h v1.27.1+rke2r1
www.server3.com Ready control-plane,etcd,master 22h v1.27.1+rke2r1
查看集群Pod
kubectl get pod -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system cloud-controller-manager-www.server1.com 1/1 Running 2 (23h ago) 23h
kube-system cloud-controller-manager-www.server2.com 1/1 Running 0 23h
kube-system cloud-controller-manager-www.server3.com 1/1 Running 0 23h
kube-system etcd-www.server1.com 1/1 Running 1 (23h ago) 23h
kube-system etcd-www.server2.com 1/1 Running 0 23h
kube-system etcd-www.server3.com 1/1 Running 0 23h
kube-system kube-apiserver-www.server1.com 1/1 Running 2 (23h ago) 23h
kube-system kube-apiserver-www.server2.com 1/1 Running 0 23h
kube-system kube-apiserver-www.server3.com 1/1 Running 0 23h
kube-system kube-controller-manager-www.server1.com 1/1 Running 2 (23h ago) 23h
kube-system kube-controller-manager-www.server2.com 1/1 Running 0 23h
kube-system kube-controller-manager-www.server3.com 1/1 Running 0 23h
kube-system kube-proxy-www.agent1.com 1/1 Running 1 (31m ago) 32m
kube-system kube-proxy-www.server1.com 1/1 Running 1 (23h ago) 23h
kube-system kube-proxy-www.server2.com 1/1 Running 0 23h
kube-system kube-proxy-www.server3.com 1/1 Running 0 23h
kube-system kube-scheduler-www.server1.com 1/1 Running 1 (23h ago) 23h
kube-system kube-scheduler-www.server2.com 1/1 Running 0 23h
kube-system kube-scheduler-www.server3.com 1/1 Running 0 23h
kube-system rke2-canal-764q8 2/2 Running 0 32m
kube-system rke2-canal-lkkz7 2/2 Running 0 23h
kube-system rke2-canal-mw6bz 2/2 Running 0 23h
kube-system rke2-canal-zcpqd 2/2 Running 2 (23h ago) 23h
kube-system rke2-coredns-rke2-coredns-68788ffdc6-2856m 1/1 Running 0 31m
kube-system rke2-coredns-rke2-coredns-68788ffdc6-ks7sk 1/1 Running 1 (23h ago) 23h
kube-system rke2-coredns-rke2-coredns-autoscaler-7844f5c4c4-c4dbb 1/1 Running 0 23h
kube-system rke2-ingress-nginx-controller-m7j4b 1/1 Running 0 30m
kube-system rke2-metrics-server-6498df8bbc-qvgr4 1/1 Running 0 31m
kube-system rke2-snapshot-controller-69748bf76-swtls 1/1 Running 0 30m
kube-system rke2-snapshot-validation-webhook-55b5cbcf64-5tvmf 1/1 Running 0 31m
kube-system helm-install-rke2-canal-x7tq6 0/1 Completed 0 23h
kube-system helm-install-rke2-coredns-hrhcd 0/1 Completed 1 23h
kube-system helm-install-rke2-ingress-nginx-nj9hv 0/1 Completed 0 23h
kube-system helm-install-rke2-metrics-server-ft72v 0/1 Completed 0 23h
kube-system helm-install-rke2-snapshot-controller-crd-kprnn 0/1 Completed 0 23h
kube-system helm-install-rke2-snapshot-controller-fq7br 0/1 Completed 1 23h
kube-system helm-install-rke2-snapshot-validation-webhook-m97mg 0/1 Completed 0 23h
网络选项
RKE2 需要一个 CNI 插件来连接 pod 和服务。Canal CNI 插件是默认插件,从一开始就被支持。RKE2 v1.21 开始支持另外两个 CNI 插件,分别是 Calico 和 Cilium。在主要组件启动并运行后,所有 CNI 插件均通过 helm chart 安装,并且可以通过修改 helm chart 选项进行自定义
Canal
Canal 表示使用 Flannel 处理节点间的流量,使用 Calico 处理节点内流量和网络策略。默认情况下,它将使用 vxlan 封装在节点之间创建覆盖网络。Canal 默认部署在 RKE2 中,因此不需要额外配置来激活它。要覆盖默认的 Canal 选项,你需要创建一个 HelmChartConfig 资源。HelmChartConfig 资源必须与其对应 HelmChart 的名称和命名空间相匹配,覆盖 Flannel 接口,可以应用以下配置
# /var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
flannel:
iface: "eth1"
- 使用 Flannel 的 wireguard 后端 进行内核 WireGuard 封装和加密,可以使用以下配置来实现:
# /var/lib/rancher/rke2/server/manifests/rke2-canal-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-canal
namespace: kube-system
spec:
valuesContent: |-
flannel:
backend: "wireguard"
kubectl rollout restart ds rke2-canal -n kube-system # 通过执行以下命令重启 canal daemonset 以使用更新的配置
Cilium
从 RKE2 v1.21 开始,Cilium 可以部署为 CNI 插件。为此,将 cilium 作为 --cni 标志的值传递。确保节点具有所需的内核版本 (>= 4.9.17) 并且满足要求。要覆盖默认选项,请使用 HelmChartConfig 资源。HelmChartConfig 资源必须与其对应 HelmChart 的名称和命名空间相匹配。启用 eni:
# /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
eni:
enabled: true
- Cilium 包括了一些高级功能,可以完全替代 kube-proxy,并使用 eBPF 代替 iptables 实现服务路由。要激活此模式,请使用标志 --disable-kube-proxy 和以下 Cilium 配置部署 RKE2
# /var/lib/rancher/rke2/server/manifests/rke2-cilium-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-cilium
namespace: kube-system
spec:
valuesContent: |-
kubeProxyReplacement: strict
k8sServiceHost: <KUBE_API_SERVER_IP>
k8sServicePort: <KUBE_API_SERVER_PORT>
cni:
chainingMode: "none"
Calico
从 RKE2 v1.21 开始,Calico 可以部署为 CNI 插件。为此,将 calico
作为 --cni
标志的值传递。要覆盖默认选项,请使用 HelmChartConfig 资源。HelmChartConfig 资源必须与其对应 HelmChart 的名称和命名空间相匹配。例如,要更改 mtu:
# /var/lib/rancher/rke2/server/manifests/rke2-calico-config.yaml
---
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
installation:
calicoNetwork:
mtu: 9000
Containerd 镜像仓库配置
- 如果使用私有的镜像仓库,则需要在每个使用镜像仓库的节点上以 root 身份创建 /etc/rancher/rke2/registries.yaml文件(RKE2启动时会检查该文件)
- server 节点默认是可以调度的。如果你没有在 server 节点上设置污点,而且希望在 server 节点上运行工作负载,请确保在每个 server 节点上创建 registries.yaml 文件
registries.yaml文件介绍(基于 TLS 的身份验证)
mirrors:
docker.io:
endpoint:
- "https://registry.example.com:5000"
registry.example.com:
endpoint:
- "https://registry.example.com:5000"
configs:
"registry.example.com:5000":
auth:
username: xxxxxx # this is the registry username
password: xxxxxx # this is the registry password
tls:
cert_file: # path to the cert file used to authenticate to the registry
key_file: # path to the key file for the certificate used to authenticate to the registry
ca_file: # path to the ca file used to verify the registry's certificate
insecure_skip_verify: # may be set to true to skip verifying the registry's certificate