Debian11之 RKE2 部署 K8S 集群

news2024/11/28 2:45:17

官方地址

资源列表

主机IP主机名称主机角色软件
192.168.111.50server1主节点1API Server、controller-manager 和 scheduler
192.168.111.51server2主节点2API Server、controller-manager 和 scheduler
192.168.111.52server3主节点3API Server、controller-manager 和 scheduler
192.168.111.53agent1工作节点1kubelet 和 kube-proxy
192.168.111.57loadBalancer1server集群负载均衡器1haproxy、keepalived
192.168.111.58loadBalancer2server集群负载均衡器2haproxy、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

rke2集群升级

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SocketTools crack所有安全连接的默认安全协议

SocketTools crack所有安全连接的默认安全协议 在所有HTTP客户端组件中添加了对HTTP/2.0协议的支持。 更新了TLS 1.2(及更高版本)和SSH 2.0的安全选项&#xff0c;以使用Microsoft Windows 11和Windows Server 2022中提供的密码套件。较旧、安全性较低的密码套件已被弃用&#…

JavaScript 基础 DOM (二)

事件流 事件流是对事件执行过程的描述 事件捕获 从DOM的根元素开始去执行对应的事件 (从外到里) 事件冒泡 当一个元素的事件被触发时&#xff0c;同样的事件将会在该元素的所有祖先元素中依次被触发。这一过程被称为事件冒 泡 addEventListener 第3个参数决定了事件是在捕获阶…

(数据结构)栈的实现——再一次保姆级教学

目录 1. 栈 ​编辑 1.2 栈的实现 2. 代码的实现 2.1 初始化栈和销毁栈 2.2栈顶元素的插入 2.3栈顶元素的删除 栈元素删除 2.4栈顶元素的获取和栈元素的个数 1. 栈 1.1 栈的概念和结构 栈(Stack)是一种线性存储结构&#xff0c;它具有如下特点&#xff1a; &#xff0…

git的学习3

文章目录 一、git status 命令二、git diff 命令三、git commit 命令四、git reset 命令五、git rm 命令六、git mv 命令七、提交日志1、Git 查看提交历史2、git blame 总结 提交与修改部分 一、git status 命令 git status 命令用于查看在你上次提交之后是否有对文件进行再次…

jenkins集成sonarqube进行代码质量检测

Jenkins集成Sonar Qube实现代码扫描需要先下载整合插件 安装SonarQube scanner 插件&#xff0c;安装完后&#xff0c;插件展示如下 配置SonarQube 的配置信息 这里给名称取为&#xff1a;sonarqubeFirst&#xff0c; server Url设置为SonarQube的地址&#xff0c;为http:19…

类和对象【1】初识

全文目录 引言&#xff08;初识面向对象&#xff09;类和对象定义类访问限定及封装类定义的两种方式 类实例化与类对象大小this指针 总结 引言&#xff08;初识面向对象&#xff09; C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通…

如何使用Understand软件查看STM32单片机HAL库函数调用关系

在使用STM32单片机的HAL库函数编程时&#xff0c;会发现好多中断函数里面都有各种回调函数&#xff0c;还有好多函数的调用深度比较深&#xff0c;在编写代码的时候&#xff0c;有时候想查看某个函数是如何被调用的&#xff0c;查看起来非常麻烦。这时候就可以使用Understand软…

Android活动生命周期

GitHub&#xff1a;https://github.com/MADMAX110/Stopwatch 活动的生命不只是有创建和撤销&#xff0c;onCreate和onDestroy方法用来处理整个生命周期&#xff0c;除了这两个方法&#xff0c;另外还有一些处理活动可见性的生命周期方法。 具体来讲&#xff0c;有三个关键的生…

Flink学习——DataStream API

一个flink程序&#xff0c;其实就是对DataStream的各种转换。具体可以分成以下几个部分&#xff1a; 获取执行环境&#xff08;Execution Environment&#xff09;读取数据源&#xff08;Source&#xff09;定义基于数据的转换操作&#xff08;Transformations&#xff09;定义…

.net6 接收json数据 Controller http post

.net6 接收json数据 Controller http post 要添加这两个包 前端ajax请求 function tst() {$.ajax({type: "POST",contentType: "application/json",url: "/HelloWorld/Welcome",data: JSON.stringify({ "ID":1,"name": &…

Qt实现undo和redo功能--连续后退

刚开始想做这个的时候&#xff0c;我专门去找了Qt官方的测试例子&#xff0c;运行起来点了点&#xff0c;代码翻了翻。然后照猫画虎般的写了个测试例子。 不明白&#xff0c;为什么每个例子旁边会有个命令的显示列表&#xff0c;还巨丑的那种&#xff0c;这如果要放在别的程序…

DJ6-4 文件存储空间的管理

目录 6.4.1 空闲表 1、存储空间的分配与回收 2、空闲表法的优缺点 6.4.2 空闲链表 1、空闲盘块链 2、空闲盘区链 6.4.3 位示图 1、位示图的表示 2、存储空间的分配 3、存储空间的回收 4、位示图法的优缺点 6.4.4 成组链接 1、空闲盘块的组织 plus 个人理解图…

前端web入门-HTML-day01

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 HTML初体验 HTML 定义 标签语法 总结&#xff1a; HTML 基本骨架 基础知识&#xff1a; 总结&#…

20年磨一剑,数慧时空推出智能遥感云平台DIEY及自然资源多模态大模型“长城”

5月17日&#xff0c;主题为“时空智能 从感知到决策”的第十二届全球地理信息开发者大会&#xff08;WGDC2023&#xff09;在北京昆泰酒店举行。大会聚集了千余位产业专家、行业用户、创新企业等业界精英&#xff0c;共话时空智能时代下的技术发展与应用创新。中国科学院院士、…

初始计算机操作系统——进程与线程,多线程以及Thread类的创建和属性

目录 通过前半篇文章需要了解 1.进程&#xff08;process/task&#xff09;&#xff1a;运行起来的可执行文件。 为啥要有进程&#xff1f; 如何解决这个问题&#xff1f; &#xff08;1&#xff09;进程池&#xff1a; &#xff08;2&#xff09;使用线程&#xff1a; 为啥线…

国考省考行测:判断推理,类比推理1,概念关系,包含关系,交叉关系,并列关系,全同关系

国考省考行测&#xff1a;判断推理&#xff0c;类比推理1&#xff0c;概念关系&#xff0c;包含关系&#xff0c;交叉关系&#xff0c;并列关系&#xff0c;全同关系 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能&#xff0c;附带行测和申论&#x…

chatgpt赋能Python-libreoffice_python扩展

LibreOffice Python扩展: 提升办公效率的利器 如果你一直在寻找一种提高办公效率的方法&#xff0c;那么你肯定会喜欢LibreOffice Python扩展。作为LibreOffice的一个特性&#xff0c;它可以让你使用Python编写宏程序自动化你的日常办公任务。 什么是LibreOffice Python扩展&…

力扣sql中等篇练习(二十一)

力扣sql中等篇练习(二十一) 1 最大数量高于平均水平的订单 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 a 示例输入 b 示例输出 1.2 示例sql语句 # Write your MySQL query statement below WITH t1 as (SELECT order_id,avg(quantity) AquantityFROM OrdersDeta…

chatgpt赋能Python-numpy数据预处理

Numpy数据预处理综述 介绍 Numpy是Python中最流行的数学库之一&#xff0c;可以用于高效的处理大型数据。Numpy提供了各种强大的数据结构和函数&#xff0c;使得数据分析和处理变得更加容易和直观。本文将介绍numpy中的一些数据预处理技术&#xff0c;包括数据清洗、缩放、归…

chatgpt赋能Python-mingw编译python

Mingw编译Python&#xff1a;一种常用的解决方案 在Python开发中&#xff0c;为了获得更好的性能&#xff0c;我们通常会选择编译Python源代码。而在Windows平台上&#xff0c; Mingw编译器是一种常用的解决方案。本文将介绍Mingw编译Python的过程&#xff0c;并探讨其优缺点。…