Ubuntu 24.04系统上离线部署RKE2高可用K8s集群
·
离线部署RKE2高可用Kubernetes集群操作指南
在Ubuntu 24.04系统上离线部署RKE2 Kubernetes集群,需要综合考虑系统环境准备、离线资源获取、集群配置及高可用架构设计。以下是详细的操作流程,结合了多个权威参考资料的最佳实践。
一、部署环境规划与准备
1.1 集群节点规划
建议采用3个控制平面节点和2个工作节点的高可用架构,具体规划如下表所示:
| 节点名称 | 主机名 | IP地址 | 操作系统 | 节点角色 |
|---|---|---|---|---|
| 控制节点1 | rke2-server-01 | 192.168.122.11 | Ubuntu 24.04 | 控制平面 |
| 控制节点2 | rke2-server-02 | 192.168.122.12 | Ubuntu 24.04 | 控制平面 |
| 控制节点3 | rke2-server-03 | 192.168.122.13 | Ubuntu 24.04 | 控制平面 |
| 工作节点1 | rke2-worker-01 | 192.168.122.21 | Ubuntu 24.04 | 工作节点 |
| 工作节点2 | rke2-worker-02 | 192.168.122.22 | Ubuntu 24.04 | 工作节点 |
1.2 系统环境初始化(所有节点执行)
所有节点需要执行以下基础配置,确保环境一致性:
# 1. 关闭防火墙(生产环境需按需配置)
sudo systemctl stop ufw && sudo systemctl disable ufw
# 2. 关闭SWAP分区
sudo swapoff -a
sudo sed -i '/swap/s/^/#/' /etc/fstab
# 3. 配置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
cat <<EOF | sudo 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
EOF
sudo sysctl --system
# 4. 设置主机名(以server-01为例)
sudo hostnamectl set-hostname rke2-server-01
# 5. 配置hosts文件
sudo tee -a /etc/hosts <<EOF
192.168.122.11 rke2-server-01 rke2-server-01.contoso.intra
192.168.122.12 rke2-server-02 rke2-server-02.contoso.intra
192.168.122.13 rke2-server-03 rke2-server-03.contoso.intra
192.168.122.21 rke2-worker-01 rke2-worker-01.contoso.intra
192.168.122.22 rke2-worker-02 rke2-worker-02.contoso.intra
EOF
# 6. 配置时间同步
sudo apt update
sudo apt install chrony -y
sudo systemctl enable --now chronyd
二、离线资源获取与分发
2.1 准备离线镜像仓库(可选)
在生产环境中,建议搭建私有镜像仓库作为离线镜像源:
# 在可访问互联网的机器上执行
# 1. 下载RKE2安装脚本和二进制文件
wget https://github.com/rancher/rke2/releases/download/v1.33.5+rke2r1/rke2.linux-amd64.tar.gz
wget https://github.com/rancher/rke2/releases/download/v1.33.5+rke2r1/rke2-images.linux-amd64.tar.gz
# 2. 下载安装脚本
curl -sfL https://get.rke2.io --output install.sh
# 3. 创建离线镜像包(使用skopeo或docker save)
# 此处以docker为例(需提前安装docker)
docker pull registry.cn-hangzhou.aliyuncs.com/rancher/mirrored-pause:3.6
docker save -o pause.tar registry.cn-hangzhou.aliyuncs.com/rancher/mirrored-pause:3.6
2.2 离线安装包分发
将下载的离线资源复制到所有集群节点:
# 使用scp或ansible批量分发
for node in rke2-server-01 rke2-server-02 rke2-server-03 rke2-worker-01 rke2-worker-02; do
scp rke2.linux-amd64.tar.gz rke2-images.linux-amd64.tar.gz root@$node:/tmp/
done
三、RKE2控制平面部署
3.1 安装RKE2(第一个控制节点)
在第一个控制节点(rke2-server-01)上执行:
# 1. 创建配置目录
mkdir -p /etc/rancher/rke2/
# 2. 创建RKE2配置文件
cat > /etc/rancher/rke2/config.yaml <<EOF
token: 123456 # 集群token,用于节点加入
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
node-taint:
- "node-role.kubernetes.io/control-plane:NoSchedule"
tls-san:
- rke2-server-01
- rke2-server-01.contoso.intra
- 192.168.122.11
write-kubeconfig-mode: "0644"
EOF
# 3. 安装RKE2(离线模式)
tar xzf /tmp/rke2.linux-amd64.tar.gz -C /usr/local
cp /tmp/rke2-images.linux-amd64.tar.gz /var/lib/rancher/rke2/agent/images/
# 4. 启动RKE2服务
systemctl enable --now rke2-server.service
# 5. 等待服务启动并导入镜像
while [ ! -f /run/k3s/containerd/containerd.sock ]; do
echo "等待containerd socket文件生成..."
sleep 5
done
# 6. 导入离线镜像
/var/lib/rancher/rke2/bin/ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images import /var/lib/rancher/rke2/agent/images/rke2-images.linux-amd64.tar.gz
# 7. 配置环境变量
echo 'export PATH=$PATH:/var/lib/rancher/rke2/bin' >> ~/.bashrc
echo 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml' >> ~/.bashrc
source ~/.bashrc
# 8. 验证安装
crictl images # 查看已加载的镜像
kubectl get nodes # 查看节点状态
3.2 配置高可用控制平面
获取第一个节点的token和server-url,用于其他控制节点加入:
# 1. 获取token和server-url
cat /var/lib/rancher/rke2/server/token
# 输出类似:K10c3b1c5a8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6::server:123456
# 2. 在第二个控制节点(rke2-server-02)上配置
cat > /etc/rancher/rke2/config.yaml <<EOF
server: https://192.168.122.11:9345
token: K10c3b1c5a8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6::server:123456
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
node-taint:
- "node-role.kubernetes.io/control-plane:NoSchedule"
tls-san:
- rke2-server-02
- rke2-server-02.contoso.intra
- 192.168.122.12
EOF
# 3. 安装并启动服务(同第一个节点步骤)
# 4. 重复上述步骤配置第三个控制节点
四、工作节点加入集群
在工作节点上执行以下配置:
# 1. 创建工作节点配置文件
cat > /etc/rancher/rke2/config.yaml <<EOF
server: https://192.168.122.11:9345
token: K10c3b1c5a8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6::server:123456
system-default-registry: "registry.cn-hangzhou.aliyuncs.com"
EOF
# 2. 安装RKE2 Agent
tar xzf /tmp/rke2.linux-amd64.tar.gz -C /usr/local
cp /tmp/rke2-images.linux-amd64.tar.gz /var/lib/rancher/rke2/agent/images/
# 3. 启动Agent服务
systemctl enable --now rke2-agent.service
# 4. 导入镜像
while [ ! -f /run/k3s/containerd/containerd.sock ]; do
sleep 5
done
/var/lib/rancher/rke2/bin/ctr -a /run/k3s/containerd/containerd.sock -n k8s.io images import /var/lib/rancher/rke2/agent/images/rke2-images.linux-amd64.tar.gz
五、集群验证与网络配置
5.1 验证集群状态
在任意控制节点上执行:
# 1. 查看集群节点状态
kubectl get nodes -o wide
# 预期输出:
# NAME STATUS ROLES AGE VERSION
# rke2-server-01 Ready control-plane,etcd,master 10m v1.33.5+rke2r1
# rke2-server-02 Ready control-plane,etcd,master 8m v1.33.5+rke2r1
# rke2-server-03 Ready control-plane,etcd,master 5m v1.33.5+rke2r1
# rke2-worker-01 Ready <none> 3m v1.33.5+rke2r1
# rke2-worker-02 Ready <none> 2m v1.33.5+rke2r1
# 2. 查看核心组件状态
kubectl get pods -n kube-system
# 3. 验证etcd集群状态
kubectl exec -n kube-system etcd-rke2-server-01 -- etcdctl member list
5.2 配置Calico网络插件(可选)
RKE2默认使用Canal(Calico+Flannel),如需纯Calico配置:
# 创建calico-config.yaml
apiVersion: helm.cattle.io/v1
kind: HelmChartConfig
metadata:
name: rke2-calico
namespace: kube-system
spec:
valuesContent: |-
installation:
calicoNetwork:
bgp: disabled
ipPools:
- blockSize: 26
cidr: 10.42.0.0/16
encapsulation: VXLAN
natOutgoing: Enabled
nodeSelector: all()
ipam:
type: Calico
felixConfiguration:
bpfLogLevel: ""
# 应用配置
kubectl apply -f calico-config.yaml
六、生产环境优化建议
6.1 安全加固措施
# 1. 配置Pod安全策略
kubectl apply -f - <<EOF
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
name: restricted
spec:
privileged: false
allowPrivilegeEscalation: false
requiredDropCapabilities:
- ALL
volumes:
- 'configMap'
- 'emptyDir'
- 'projected'
- 'secret'
- 'downwardAPI'
- 'persistentVolumeClaim'
hostNetwork: false
hostIPC: false
hostPID: false
runAsUser:
rule: 'MustRunAsNonRoot'
seLinux:
rule: 'RunAsAny'
supplementalGroups:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
fsGroup:
rule: 'MustRunAs'
ranges:
- min: 1
max: 65535
EOF
# 2. 启用审计日志
cat >> /etc/rancher/rke2/config.yaml <<EOF
audit-policy-file: /etc/rancher/rke2/audit.yaml
kube-apiserver-arg:
- audit-log-path=/var/lib/rancher/rke2/server/logs/audit.log
- audit-log-maxage=30
- audit-log-maxbackup=10
- audit-log-maxsize=100
EOF
6.2 监控与日志方案
# 安装Prometheus Stack(离线需提前准备镜像)
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 创建values.yaml配置
cat > prometheus-values.yaml <<EOF
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 50Gi
grafana:
adminPassword: "admin123"
persistence:
enabled: true
size: 10Gi
EOF
# 离线安装(需提前下载chart和镜像)
helm install prometheus prometheus-community/kube-prometheus-stack -f prometheus-values.yaml
七、常见问题排查
7.1 节点无法加入集群
# 检查token和server地址
cat /etc/rancher/rke2/config.yaml
# 查看服务日志
journalctl -u rke2-server.service -f
journalctl -u rke2-agent.service -f
# 验证网络连通性
telnet 192.168.122.11 9345
7.2 镜像拉取失败
# 检查镜像仓库配置
cat /etc/rancher/rke2/registries.yaml
# 手动导入镜像
ctr -n k8s.io images import /path/to/image.tar
# 验证镜像列表
crictl images
7.3 etcd集群状态异常
# 检查etcd成员状态
kubectl exec -n kube-system etcd-$(hostname) -- etcdctl endpoint health
# 查看etcd日志
kubectl logs -n kube-system etcd-$(hostname) -f
八、维护与升级操作
8.1 集群备份与恢复
# 备份etcd数据
kubectl exec -n kube-system etcd-$(hostname) -- etcdctl snapshot save /var/lib/rancher/rke2/server/db/snapshot.db
# 恢复etcd数据
systemctl stop rke2-server.service
/var/lib/rancher/rke2/bin/etcdctl snapshot restore /path/to/snapshot.db --data-dir /var/lib/rancher/rke2/server/db
systemctl start rke2-server.service
8.2 RKE2版本升级
# 下载新版本离线包
wget https://github.com/rancher/rke2/releases/download/v1.34.0+rke2r1/rke2.linux-amd64.tar.gz
# 逐个节点升级(先工作节点,后控制节点)
systemctl stop rke2-server.service
tar xzf rke2.linux-amd64.tar.gz -C /usr/local
systemctl start rke2-server.service
通过以上完整流程,可以在Ubuntu 24.04系统上成功部署一个高可用的RKE2 Kubernetes集群。整个部署过程强调了离线环境下的资源管理、高可用架构的实现以及生产环境的最佳实践配置。实际部署时,请根据具体网络环境和硬件配置调整相关参数。
参考来源
更多推荐
所有评论(0)