前言
RKE2 完美结合了 RKE1 和 K3s。它继承了 K3s 的可用性、易操作性和部署模型、同时还继承了 RKE1 与上游 Kubernetes 的紧密结合关系
为了优化边缘部署,K3s 在某些地方与上游 Kubernetes 有所不同,但 RKE1 和 RKE2 可以与上游保持紧密一致
RKE2 不像 RKE1 一样依赖 Docker。RKE1 使用 Docker 来部署和管理 control plane 组件以及 Kubernetes 的容器运行时
RKE2 将 control plane 组件作为由 kubelet 管理的静态 pod 启动。嵌入式容器运行时是 containerd
资源列表
| 主机IP | 主机名称 | 主机角色 | 软件 |
|---|---|---|---|
| 192.168.111.50 | server1 | 主节点1 | cloud-controller-manager、kube-controller-manager、kube-apiserver、kube-proxy、kube-scheduler、etcd |
| 192.168.111.51 | server2 | 主节点2 | cloud-controller-manager、kube-controller-manager、kube-apiserver、kube-proxy、kube-scheduler、etcd |
| 192.168.111.52 | server3 | 主节点3 | cloud-controller-manager、kube-controller-manager、kube-apiserver、kube-proxy、kube-scheduler、etcd |
| 192.168.111.53 | agent1 | 工作节点1 | kube-proxy |
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.43.0.0/16 |
| Pod网段 | 10.42.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设置
设置各节点Host文件(所有 Server 和 Agent 节点)
vi /etc/hosts # 编辑文件,注意不能有空格
192.168.111.50 www.rke2.server1.com server1
192.168.111.51 www.rke2.server2.com server2
192.168.111.52 www.rke2.server3.com server3
192.168.111.53 www.rke2.agent1.com agent1
关闭各节点的防火墙(所有 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)
硬件
RAM:最低 4 GB(建议至少 8 GB)
CPU:最少 2(建议至少 4 CPU)
磁盘
RKE2 的性能取决于数据库的性能。由于 RKE2 嵌入式运行 etcd 并将数据目录存储在磁盘上,我们建议尽可能使用 SSD 以确保最佳性能
网络
RKE2 server 需要开放端口 6443 和 9345 才能供集群中的其他节点访问
使用 Flannel VXLAN 时,所有节点都需要能够通过 UDP 端口 8472 访问其他节点
如果要使用 Metrics Server,则需要在每个节点上打开端口 10250
重要提示:节点上的 VXLAN 端口会开放集群网络,让任何人均能访问集群。因此不要将 VXLAN 端口暴露给外界。请使用禁用 8472 端口的防火墙/安全组来运行节点
如果主机安装并启用了 NetworkManager,请确保将其配置为忽略 CNI 管理的接口
如果节点安装并启用了 Wicked,请确保转发 sysctl 配置已启用
入站网络规则
协议 端口 源 描述
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
IPv4/IPv6的双栈配置
IPv4/IPv6双栈网络支持将 IPv4 和 IPv6 地址分配给 Pod 和 Service。该功能从 RKE2 v1.21 开始受支持,v1.23 开始稳定,但默认不激活。要正确激活它,必须相应配置 RKE2 和所选的 CNI 插件。要在双栈模式下配置 RKE2,在 control plane 节点中,你必须为 pod 和service 设置有效的 IPv4/IPv6 双栈 cidr。为此请使用标志 --cluster-cidr 和 --service-cidr
#/etc/rancher/rke2/config.yaml
cluster-cidr: "10.42.0.0/16,2001:cafe:42:0::/56"
service-cidr: "10.43.0.0/16,2001:cafe:42:1::/112"
Containerd 镜像仓库配置
官网地址
RKE2启动时会检查 /etc/rancher/rke2/ 中是否存在 registries.yaml 文件,并指示 containerd 使用该文件中定义的镜像仓库
Server 节点默认是可以调度的,如果希望在 server 节点上运行工作负载,请确保在每个 server 节点上创建 registries.yaml 文件
要使镜像仓库更改生效,你需要在节点上启动 RKE2 之前配置此文件,或者在每个配置的节点上重启 RKE2
基于 TLS 的配置
mirrors:
docker.io:
endpoint:
# 使用不带 TLS 的纯文本 HTTP 镜像仓库,则需要指定 http://,否则会默认为 https://
- "https://registry.example.com:5000"
configs:
"registry.example.com:5000":
auth:
username: xxxxxx # 私有镜像仓库基本身份验证的用户名
password: xxxxxx # 私有镜像仓库基本身份验证的用户密码
tls:
cert_file: # 客户端证书路径,用于向镜像仓库进行身份验证
key_file: # 客户端密钥路径,用于向镜像仓库进行身份验证
ca_file: # 定义用于验证镜像仓库服务器证书文件的 CA 证书路径
insecure_skip_verify: # 定义是否应跳过镜像仓库的 TLS 验证的布尔值
RKE2 二进制文件预览
# 版本号
v1.27.1+rke2r1
v1.26.4+rke2r1
v1.25.9+rke2r1
高可用 RKE2 集群配置流程
一个高可用的 RKE2 集群由以下部分组成:
1、一个固定的注册地址,放在 Server 节点的前面,允许其他节点注册到集群
2、运行 etcd、Kubernetes API 和其他 control plane 服务的奇数个(推荐三个)Server 节点
3、零个或多个 Agent 节点,用于运行你的应用和服务
RKE2 Server 节点默认是可调度的,所以 HA RKE2 Server 集群的最小节点数是三个 Server 节点和零个 Agent 节点。要添加用于运行应用程序和服务的节点,请将 Agent 节点加入到你的集群中
安装 Server1 节点
使用脚本安装 RKE2 时,可以使用以下环境变量来配置安装:
1、INSTALL_RKE2_VERSION 不填则默认下载最新的stable版本
2、INSTALL_RKE2_TYPE 创建的 systemd 服务类型,默认 “server”,可选项:“server” 或 “agent”
3、INSTALL_RKE2_CHANNEL 用于获取 RKE2 下载 URL 的 Channel。默认为 stable。可选项:stable、latest、testing
4、INSTALL_RKE2_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 \
INSTALL_RKE2_VERSION=v1.25.9+rke2r1 \
INSTALL_RKE2_TYPE="server" \
sh -
rke2 --version
systemctl enable rke2-server.service && reboot # 设置开机自启并重启
# 启动成功后会将 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 中创建
cat /var/lib/rancher/rke2/server/node-token # 查看令牌,后期分配给其它server节点和agent节点
K10a32a5f546fef7d95f8fec8a905c3f46312dc8bb803791e2afb50ae24e8247239::server:a2857b0aeb012ec7701c1a469f77d476
添加 Server1 配置文件
注意:默认情况下,Server 节点是可调度的,因此你的工作负载可以在它们上启动。如果你希望拥有一个不会运行用户工作负载的专用 control plane则可以使用污点。所有节点都具有 CriticalAddonsOnly 污点时,NGINX Ingress 和 Metrics Server 插件将不部署,这些插件将保持挂起状态,直到没有污点的 Agent 节点添加到集群中
# 默认情况下RKE2读取 /etc/rancher/rke2/config.yaml配置文件启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
token: K106a28e1164ca73f219334c356a5c549c8113ac27b0b0423104d21a495d6f1d727::server:a75dc95cd1f6772a5a6af6050f5d46ca
tls-san:
- www.rke2.server1.com
- www.rke2.server2.com
- www.rke2.server3.com
# node配置
node-name: www.rke2.server1.com
node-taint: # 默认Server节点是可调度的,如果希望拥有一个不会运行用户工作负载的专用 control plane,则可以使用污点(taint)
- "CriticalAddonsOnly=true:NoExecute"
# 打标签
node-label:
- "node=Master"
# 设置阿里云镜像地址
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
重新加载配置并重启
systemctl restart rke2-server && systemctl status rke2-server
journalctl -u rke2-server -f
安装 Server2节点
安装
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="server" \
INSTALL_RKE2_VERSION=v1.25.9+rke2r1 \
sh -
添加 Server2 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
server: https://www.rke2.server1.com:9345
token: K106a28e1164ca73f219334c356a5c549c8113ac27b0b0423104d21a495d6f1d727::server:a75dc95cd1f6772a5a6af6050f5d46ca
tls-san:
- www.rke2.server1.com
- www.rke2.server2.com
- www.rke2.server3.com
# node配置
node-name: www.rke2.server2.com
# 打标签
node-label:
- "node=Master"
# 设置阿里云镜像地址
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
重新加载配置并重启
systemctl enable rke2-server.service # 设置开机自启
systemctl restart rke2-server && systemctl status rke2-server # 刷新文件并重启
journalctl -u rke2-server -f
安装 Server3 节点
安装
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="server" \
INSTALL_RKE2_VERSION=v1.25.9+rke2r1 \
sh -
添加 Server3 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
server: https://www.rke2.server1.com:9345
token: K106a28e1164ca73f219334c356a5c549c8113ac27b0b0423104d21a495d6f1d727::server:a75dc95cd1f6772a5a6af6050f5d46ca
tls-san:
- www.rke2.server1.com
- www.rke2.server2.com
- www.rke2.server3.com
# node配置
node-name: www.rke2.server3.com
# 打标签
node-label:
- "node=Master"
# 设置阿里云镜像地址
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
重新加载配置并重启
systemctl enable rke2-server.service # 设置开机自启
systemctl restart rke2-server && systemctl status rke2-server # 刷新文件并重启
journalctl -u rke2-server -f
安装 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.26.4+rke2r1 \
sh -
添加 agent1 配置文件
# 默认情况下,RKE2 将使用 /etc/rancher/rke2/config.yaml YAML 文件中的值来启动
mkdir -p /etc/rancher/rke2 && vi /etc/rancher/rke2/config.yaml
server: https://www.rke2.server1.com:9345
token: K106a28e1164ca73f219334c356a5c549c8113ac27b0b0423104d21a495d6f1d727::server:a75dc95cd1f6772a5a6af6050f5d46ca
# node 配置
node-name: www.rke2.agent1.com
# 打标签
node-label:
- "node=agent"
#设置阿里云镜像地址,加速下载
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
重新加载配置并重启
systemctl enable rke2-agent.service # 设置开机自启
systemctl restart rke2-agent && systemctl status rke2-agent
journalctl -u rke2-agent -f
集群访问(Server1节点操作)
/etc/rancher/rke2/rke2.yaml 中存储的 kubeconfig 文件用于配置对 Kubernetes 集群的访问。 如果你已经安装了上游的 Kubernetes 命令行工具(如 kubectl 或 helm),你需要用正确的 kubeconfig 路径配置它们。 这可以通过导出 KUBECONFIG 环境变量或调用 --kubeconfig 命令行标志来完成
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
vi /etc/profile # 编辑该文件并添加如下内容
export PATH=$PATH:/var/lib/rancher/rke2/bin
source /etc/profile
在 Service1 上查看集群运行情况
查看 rke2-server 服务日志
journalctl -u rke2-server -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> 39s v1.26.4+rke2r1
www.server1.com Ready control-plane,etcd,master 7m58s v1.26.4+rke2r1
www.server2.com Ready control-plane,etcd,master 4m51s v1.26.4+rke2r1
www.server3.com Ready control-plane,etcd,master 2m50s v1.26.4+rke2r1
查看集群Pod
# kubectl get pod -A -o wide
kubectl get pods -n kube-system -o wide # 查看 kube-system 空间下的资源
NAME IP NODE
cloud-controller-manager-www.server1.com 192.168.111.50 www.server1.com
cloud-controller-manager-www.server2.com 192.168.111.51 www.server2.com
cloud-controller-manager-www.server3.com 192.168.111.52 www.server3.com
etcd-www.server1.com 192.168.111.50 www.server1.com
etcd-www.server2.com 192.168.111.51 www.server2.com
etcd-www.server3.com 192.168.111.52 www.server3.com
kube-apiserver-www.server1.com 192.168.111.50 www.server1.com
kube-apiserver-www.server2.com 192.168.111.51 www.server2.com
kube-apiserver-www.server3.com 192.168.111.52 www.server3.com
kube-controller-manager-www.server1.com 192.168.111.50 www.server1.com
kube-controller-manager-www.server2.com 192.168.111.51 www.server2.com
kube-controller-manager-www.server3.com 192.168.111.52 www.server3.com
kube-scheduler-www.server1.com 192.168.111.50 www.server1.com
kube-scheduler-www.server2.com 192.168.111.51 www.server2.com
kube-scheduler-www.server3.com 192.168.111.52 www.server3.com
kube-proxy-www.server1.com 192.168.111.50 www.server1.com
kube-proxy-www.server2.com 192.168.111.51 www.server2.com
kube-proxy-www.server3.com 192.168.111.52 www.server3.com
kube-proxy-www.agent1.com 192.168.111.53 www.agent1.com
NAME IP NODE
rke2-canal-fmt8f 192.168.111.50 www.server1.com
rke2-canal-h78c8 192.168.111.51 www.server2.com
rke2-canal-zdbks 192.168.111.52 www.server3.com
rke2-canal-hxcwd 192.168.111.53 www.agent1.com
rke2-coredns-rke2-coredns-58f666fd54-s9cxt 10.42.0.2 www.server1.com
rke2-coredns-rke2-coredns-58f666fd54-ktskx 10.42.1.11 www.server2.com
rke2-coredns-rke2-coredns-autoscaler-7779bc6b6d-tzvmt 10.42.1.3 www.server2.com
NAME IP NODE
rke2-ingress-nginx-controller-kqrmp 10.42.1.13 www.server2.com
rke2-ingress-nginx-controller-9xzwg 10.42.2.2 www.server3.com
rke2-ingress-nginx-controller-q4pv4 10.42.3.2 www.agent1.com
NAME IP NODE
rke2-metrics-server-6d64b4595c-4wx8t 10.42.1.8 www.server2.com
rke2-snapshot-controller-8588c74f6d-767nd 10.42.1.12 www.server2.com
rke2-snapshot-validation-webhook-6f7fc46b7d-bqhnf 10.42.1.9 www.server2.com
helm-install-rke2-canal-c67zz 192.168.111.50 www.server1.com
helm-install-rke2-coredns-k2tvk 192.168.111.50 www.server1.com
helm-install-rke2-ingress-nginx-nkth2 10.42.1.6 www.server2.com
helm-install-rke2-metrics-server-7v599 10.42.1.5 www.server2.com
helm-install-rke2-snapshot-controller-crd-57gfv 10.42.1.2 www.server2.com
helm-install-rke2-snapshot-controller-s8rtv 10.42.1.7 www.server2.com
helm-install-rke2-snapshot-validation-webhook-kvkwf 10.42.1.4 www.server2.com
RKE2更新证书
自动更新证书
默认情况下 RKE2 中的证书在 12 个月后过期。如果证书已经过期或剩余的时间不足 90 天,则在 RKE2 重启时轮换证书
手动更新 Server1 证书
从 v1.21.8+rke2r1 开始可以手动轮换证书
systemctl stop rke2-server # 停止服务
rke2 certificate rotate # 更新证书
# 更新日志
INFO[0000] Server detected, rotating server certificates
INFO[0000] Rotating certificates for admin service
INFO[0000] Rotating certificates for etcd service
INFO[0000] Rotating certificates for api-server service
INFO[0000] Rotating certificates for controller-manager service
INFO[0000] Rotating certificates for cloud-controller service
INFO[0000] Rotating certificates for scheduler service
INFO[0000] Rotating certificates for rke2-server service
INFO[0000] Rotating dynamic listener certificate
INFO[0000] Rotating certificates for rke2-controller service
INFO[0000] Rotating certificates for auth-proxy service
INFO[0000] Rotating certificates for kubelet service
INFO[0000] Rotating certificates for kube-proxy service
INFO[0000] Successfully backed up certificates for all services to path /var/lib/rancher/rke2/server/tls-1684556942, please restart rke2 server or agent to rotate certificates
systemctl restart rke2-server # 启动服务
RKE2更新版本
首先升级 Server 节点,一次可以升级一个。升级完所有 Server 后再逐次升级 Agent 节点
所有 Server 节点
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="server" \
INSTALL_RKE2_VERSION=<版本号> \
sh -
systemctl restart rke2-server
所有 Agent 节点
curl -sfL https://rancher-mirror.rancher.cn/rke2/install.sh | INSTALL_RKE2_MIRROR=cn \
INSTALL_RKE2_TYPE="agent" \
INSTALL_RKE2_VERSION=<版本号> \
sh -
systemctl restart rke2-agent
查看集群各节点的版本
kubectl get nodes
RKE2默认集成 Helm
Helm 是 Kubernetes 的包管理工具。Helm Chart 为 Kubernetes YAML 清单文件提供了模板语法。通过 Helm,用户可以创建可配置的 deployment,而不仅仅只能使用静态文件
查找 RKE2 环境下的 Helm
- 全文搜索 helm 可执行文件
cd / && find -name "helm*" # 模糊搜索
# 执行文件
./var/lib/rancher/rke2/agent/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/28/fs/usr/bin/helm_v3
./var/lib/rancher/rke2/agent/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/28/fs/usr/bin/helm_v2
# 缓存文件
./root/.cache/helm
./root/.config/helm
#
./var/lib/kubelet/pods/1cabe4c5-0d75-4557-97e6-384c7ecdd853/containers/helm
./var/lib/kubelet/pods/f4d49807-ab75-492c-bdb1-6e00ee24a562/containers/helm
./var/lib/rancher/rke2/agent/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots
/27/fs/home/klipper-helm/.local/share/helm
/27/fs/home/klipper-helm/.local/share/helm/plugins/helm-set-status
/27/fs/home/klipper-helm/.local/share/helm/plugins/helm-set-status/helm-set-status
/27/fs/home/klipper-helm/.local/share/helm/plugins/helm-mapkubeapis
/30/fs/home/klipper-helm/.kube/cache/discovery/127.0.0.1_6443/helm.cattle.io
/29/fs/home/klipper-helm/.kube/cache/discovery/127.0.0.1_6443/helm.cattle.io
./var/log/containers/helm-install-rke2-canal-6cgr9_kube-system_helm-xxxxxx.log
./var/log/containers/helm-install-rke2-coredns-9mxnh_kube-system_helm-xxxx.log
./var/log/pods/kube-system_helm-install-rke2-coredns-9mxnh_1cabe4c5-0d75-4557-97e6-384c7ecdd853/helm
./var/log/pods/kube-system_helm-install-rke2-canal-6cgr9_f4d49807-ab75-492c-bdb1-6e00ee24a562/helm
./var/cache/apt/archives/helm_3.12.0-1_amd64.deb
./etc/apt/sources.list.d/helm-stable-debian.list
./usr/share/keyrings/helm.gpg
./root/.kube/cache/discovery/127.0.0.1_6443/helm.cattle.io
- 创建软连接
ln -s /var/lib/rancher/rke2/agent/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/28/fs/usr/bin/helm_v3 /usr/sbin/helm
Helm稳定版本安装(不用RKE2默认安装的Helm)
apt-get install curl gpg apt-transport-https --yes
# 没有梯子会比较慢
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
apt-get update && apt-get install helm
helm version
version.BuildInfo{Version:"v3.12.0", GitCommit:"c9f554d75773799f72ceef38c51210f1842a1dea", GitTreeState:"clean", GoVersion:"go1.20.3"}
RKE2上 Etcd 备份与恢复
默认 etcd 数据的目录:/var/lib/rancher/rke2/server/db/etcd
Server1节点上手动创建 etcd 数据快照
# 默认 etcd 数据的快照目录存储在 /var/lib/rancher/rke2/server/db/snapshots 目录
rke2 etcd-snapshot save --name 2023-05-23 # 手动备份数据
root@server1:/var/lib/rancher/rke2/server/db/snapshots # ls -lh # 查看当前目录的文件
总用量 27M
-rw------- 1 root root 23M 5月 23 21:05 2023-05-23-www.rke2.server1.com-1684847130【手动备份】
-rw------- 1 root root 4.3M 5月 21 12:00 etcd-snapshot-www.rke2.server1.com-1684641601【系统自动备份】
将指定快照恢复到现有节点
使用备份恢复 RKE2 时,旧的数据目录将被移动到 /var/lib/rancher/rke2/server/db/etcd-old-%date%/。然后 RKE2 将尝试通过创建一个新的数据目录来恢复快照,并使用一个具有一个 etcd 成员的新 RKE2 集群启动 etcd
- 必须在所有 Server 节点上停止 RKE2 服务
systemctl stop rke2-server
- 在 Server1 节点上启动快照恢复
rke2 server \
--cluster-reset \
--cluster-reset-restore-path=/var/lib/rancher/rke2/server/db/snapshots/etcd-snapshot-www.rke2.server1.com-1684641601
- 恢复完成后,在 Server1 节点上启动 rke2-server 服务
systemctl start rke2-server
- 删除其他 Server 节点上的 rke2 db 目录
rm -rf /var/lib/rancher/rke2/server/db
- 重启其他 Server 节点上的 rke2
systemctl restart rke2-server


2079

被折叠的 条评论
为什么被折叠?



