Debian11之 RKE2 部署 K8S 集群

前言

官方地址

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.50server1主节点1cloud-controller-manager、kube-controller-manager、kube-apiserver、kube-proxy、kube-scheduler、etcd
192.168.111.51server2主节点2cloud-controller-manager、kube-controller-manager、kube-apiserver、kube-proxy、kube-scheduler、etcd
192.168.111.52server3主节点3cloud-controller-manager、kube-controller-manager、kube-apiserver、kube-proxy、kube-scheduler、etcd
192.168.111.53agent1工作节点1kube-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 需要开放端口 64439345 才能供集群中的其他节点访问
使用 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 二进制文件预览

Github下载地址
在这里插入图片描述

# 版本号
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 配置文件

RKE2 Server CLI

注意:默认情况下,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 节点加入到你的集群中

RKE2 Agent CLI

安装 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  523 21:05 2023-05-23-www.rke2.server1.com-1684847130【手动备份】
-rw------- 1 root root 4.3M  521 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

将快照恢复到新节点

k8s 添加到 rancher 上时报错 kubectl -n cattle-system logs cattle-cluster-agent-86cfb649b5-n4p4f INFO: Environment: CATTLE_ADDRESS=192.168.231.207 CATTLE_CA_CHECKSUM=14337b46e043fc2debe39c22be62b5dcb264f6c5aa8cd44c0ee39b797ad8598c CATTLE_CLUSTER=true CATTLE_CLUSTER_AGENT_PORT=tcp://10.102.239.179:80 CATTLE_CLUSTER_AGENT_PORT_443_TCP=tcp://10.102.239.179:443 CATTLE_CLUSTER_AGENT_PORT_443_TCP_ADDR=10.102.239.179 CATTLE_CLUSTER_AGENT_PORT_443_TCP_PORT=443 CATTLE_CLUSTER_AGENT_PORT_443_TCP_PROTO=tcp CATTLE_CLUSTER_AGENT_PORT_80_TCP=tcp://10.102.239.179:80 CATTLE_CLUSTER_AGENT_PORT_80_TCP_ADDR=10.102.239.179 CATTLE_CLUSTER_AGENT_PORT_80_TCP_PORT=80 CATTLE_CLUSTER_AGENT_PORT_80_TCP_PROTO=tcp CATTLE_CLUSTER_AGENT_SERVICE_HOST=10.102.239.179 CATTLE_CLUSTER_AGENT_SERVICE_PORT=80 CATTLE_CLUSTER_AGENT_SERVICE_PORT_HTTP=80 CATTLE_CLUSTER_AGENT_SERVICE_PORT_HTTPS_INTERNAL=443 CATTLE_CLUSTER_REGISTRY= CATTLE_INGRESS_IP_DOMAIN=sslip.io CATTLE_INSTALL_UUID=97fc10be-fbb9-446f-aab3-efa93d462e5f CATTLE_INTERNAL_ADDRESS= CATTLE_IS_RKE=false CATTLE_K8S_MANAGED=true CATTLE_NODE_NAME=cattle-cluster-agent-86cfb649b5-n4p4f CATTLE_RANCHER_PROVISIONING_CAPI_VERSION= CATTLE_RANCHER_WEBHOOK_VERSION=104.0.3+up0.5.3 CATTLE_SERVER=https://172.16.101.173:4433 CATTLE_SERVER_VERSION=v2.9.3 INFO: Using resolv.conf: search cattle-system.svc.cluster.local svc.cluster.local cluster.local nameserver 10.96.0.10 options ndots:5 ERROR: https://172.16.101.173:4433/ping is not accessible (Failed to connect to 172.16.101.173 port 4433 after 0 ms: Couldn't connect to server)
最新发布
11-13
当在将 k8s 添加到 Rancher 上时,`cattle - cluster - agent` 日志显示 `https://172.16.101.173:4433/ping` 无法访问(`Failed to connect to 172.16.101.173 port 4433 after 0 ms: Couldn't connect to server`),可尝试以下解决办法: ### 网络连通性检查 - **检查网络可达性**:在 `cattle - cluster - agent` 所在的节点上,使用 `ping` 命令测试与 `172.16.101.173` 的网络连通性,使用 `telnet` 命令测试端口 `4433` 是否开放。 ```bash ping 172.16.101.173 telnet 172.16.101.173 4433 ``` - **检查防火墙设置**:确保 `cattle - cluster - agent` 所在节点的防火墙允许访问 `172.16.101.173:4433`,同时也要检查目标服务器 `172.16.101.173` 的防火墙是否允许来自 `cattle - cluster - agent` 所在节点的访问。可以通过以下命令开放端口: ```bash # 对于 CentOS/RHEL 系统 firewall-cmd --zone=public --add-port=4433/tcp --permanent firewall-cmd --reload # 对于 Ubuntu/Debian 系统 ufw allow 4433/tcp ``` - **检查路由设置**:确保从 `cattle - cluster - agent` 所在节点到 `172.16.101.173` 有正确的路由。可以使用 `ip route` 命令查看路由表。 ### Rancher 服务器检查 - **检查 Rancher 服务状态**:确保 Rancher 服务器正常运行,并且监听在 `172.16.101.173:4433` 端口。可以通过以下命令检查 Rancher 服务状态: ```bash systemctl status rancher netstat -tulnp | grep :4433 ``` - **检查 Rancher 配置**:确保 Rancher 配置中使用的 IP 地址和端口是 `172.16.101.173:4433`。可以查看 Rancher 的配置文件进行确认。 ### 证书和 TLS 配置检查 - **检查证书有效性**:如果 Rancher 使用了 HTTPS,确保证书是有效的,并且 `cattle - cluster - agent` 信任该证书。可以尝试在 `cattle - cluster - agent` 所在节点上使用 `curl` 命令访问 `https://172.16.101.173:4433/ping`,并忽略证书验证: ```bash curl -k https://172.16.101.173:4433/ping ``` - **更新证书**:如果证书过期或无效,需要更新证书,并确保 `cattle - cluster - agent` 能够获取到最新的证书。 ### 重新部署 cattle - cluster - agent 如果以上步骤都没有解决问题,可以尝试删除并重新部署 `cattle - cluster - agent`: ```bash # 删除 cattle - cluster - agent Pod kubectl delete pod -l app=cattle-cluster-agent # 重新部署 cattle - cluster - agent # 按照 Rancher 提供的添加集群的步骤重新执行部署命令 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大能嘚吧嘚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值