RKE2 K8s 生产集群部署

FreeGuideOnline 13阅读 2026-07-10

bash

关闭 swap

sudo swapoff -a sudo sed -i '/ swap / s/^/#/' /etc/fstab

加载内核模块

sudo modprobe br_netfilter sudo modprobe overlay

持久化加载

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf br_netfilter overlay EOF

设置 sysctl 参数

cat <<EOF | sudo tee /etc/sysctl.d/99-kubernetes.conf net.bridge.bridge-nf-call-iptables=1 net.ipv4.ip_forward=1 net.bridge.bridge-nf-call-ip6tables=1 EOF sudo sysctl --system


### 2. 安装基础依赖
Ubuntu/Debian:
```bash
sudo apt update && sudo apt install -y curl wget gnupg software-properties-common

CentOS/RHEL:

sudo yum install -y curl wget yum-utils

3. 配置主机名与 hosts

# 在每个节点设置唯一主机名,如 server1
sudo hostnamectl set-hostname server1

/etc/hosts 中添加所有节点的 IP 与主机名映射,确保节点间可互相解析。

安装 RKE2

步骤1:安装第一个控制平面节点(Server)

server1 上执行:

# 下载并安装 RKE2
curl -sfL https://get.rke2.io | sudo sh -

# 创建配置文件(嵌入式 etcd)
sudo mkdir -p /etc/rancher/rke2/
sudo tee /etc/rancher/rke2/config.yaml <<EOF
token: my-super-secret-token
tls-san:
  - <LOAD_BALANCER_IP_OR_HOSTNAME>
EOF
  • token:自定义集群 token,后续节点加入需相同。
  • tls-san:将外部负载均衡器 IP 或域名添加到 TLS 证书 SAN 中,否则 kubectl 访问 LB 时报证书不匹配。若未使用 LB,可省略。

启动 RKE2 server:

sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service

查看启动日志:

sudo journalctl -u rke2-server -f

步骤2:安装附加控制平面节点

server2server3 上执行:

curl -sfL https://get.rke2.io | sudo sh -
sudo mkdir -p /etc/rancher/rke2/
sudo tee /etc/rancher/rke2/config.yaml <<EOF
server: https://<server1_IP>:9345
token: my-super-secret-token
tls-san:
  - <LOAD_BALANCER_IP_OR_HOSTNAME>
EOF
  • server:第一个控制平面节点的 IP 和注册端口 9345。
  • token 必须与 server1 一致。

启动服务(注意也是 rke2-server 服务):

sudo systemctl enable rke2-server.service
sudo systemctl start rke2-server.service

确认节点加入后,etcd 集群将自动选举。

步骤3:安装工作节点(Agent)

agent1agent2 等节点上执行:

curl -sfL https://get.rke2.io | sudo INSTALL_RKE2_TYPE="agent" sh -
sudo mkdir -p /etc/rancher/rke2/
sudo tee /etc/rancher/rke2/config.yaml <<EOF
server: https://<server1_IP_or_LB_IP>:9345
token: my-super-secret-token
EOF
  • INSTALL_RKE2_TYPE="agent" 指定安装 agent 服务。
  • server 这里可以填写任意控制平面节点 IP 或负载均衡器地址。

启动 agent:

sudo systemctl enable rke2-agent.service
sudo systemctl start rke2-agent.service

配置 kubectl 访问集群

从控制平面节点本地访问

RKE2 自动生成 kubeconfig 在 /etc/rancher/rke2/rke2.yaml。通过环境变量引用:

export KUBECONFIG=/etc/rancher/rke2/rke2.yaml
sudo chmod 644 /etc/rancher/rke2/rke2.yaml
kubectl get nodes

从外部机器访问

  1. rke2.yaml 复制到本地 ~/.kube/config
  2. 将文件中的 server: https://127.0.0.1:6443 改为负载均衡器地址(若有)或某个控制平面节点 IP。
  3. 若直接使用节点 IP,可能需要 --insecure-skip-tls-verify,或添加 tls-san 后重新生成证书。

集群验证

kubectl get nodes

所有节点应处于 Ready 状态。控制平面节点会带有 control-plane 角色标签。

查看系统组件状态:

kubectl get pods -n kube-system

安装后基本配置

容器网络

RKE2 默认使用 Canal(Calico + Flannel),能满足绝大多数场景。若需纯 Calico,可在 config.yaml 中添加:

cni: calico

然后重启 RKE2 server 进程。注意:网络策略支持需额外启用。

持久化存储(以 Longhorn 为例)

# 安装 open-iscsi(所有工作节点)
sudo apt install -y open-iscsi   # Ubuntu
sudo yum install -y iscsi-initiator-utils   # CentOS

# 部署 Longhorn
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml
kubectl get pods -n longhorn-system

暴露 Longhorn UI(可选):

kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
  name: longhorn-frontend
  namespace: longhorn-system
spec:
  type: LoadBalancer
  ports:
  - port: 80
    targetPort: 8000
  selector:
    app: longhorn-ui
EOF

安装 NGINX Ingress Controller

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml

若使用 NodePort 访问,可能需要调整 Service 的 type 为 LoadBalancer 或修改 NodePort。

节点标签与调度策略

给工作节点打标签:

kubectl label node <agent_node> node-role.kubernetes.io/worker=true

避免控制平面节点运行业务 Pod(默认已有污点):

kubectl taint nodes <server_node> node-role.kubernetes.io/control-plane:NoSchedule

安全加固建议

  • 使用 私有 CA 证书:将自签证书放入 /var/lib/rancher/rke2/server/tls/ 下,重启服务。
  • 审计日志:在 config.yaml 中启用:
    audit-policy-file: /etc/rancher/rke2/audit-policy.yaml
    
  • Pod 安全标准:启用 PSA(Pod Security Admission),根据需求配置基线策略。
  • 定期更新:通过 curl -sfL https://get.rke2.io | sudo sh - 获取最新版本并重启服务。

常见问题与故障排除

节点无法加入集群

  • 确认 token 一致,且 server 地址可通(ping、telnet)。
  • 检查防火墙是否放行 9345、6443 端口。
  • 查看 /var/lib/rancher/rke2/agent/logs 或 journalctl。

etcd 集群健康检查

sudo /var/lib/rancher/rke2/bin/etcdctl --cacert=/var/lib/rancher/rke2/server/tls/etcd/server-ca.crt --cert=/var/lib/rancher/rke2/server/tls/etcd/server-client.crt --key=/var/lib/rancher/rke2/server/tls/etcd/server-client.key endpoint status --write-out=table

证书 SAN 不包含 LB 地址

重新生成并重启即可:

sudo rke2 certificate rotate
sudo systemctl restart rke2-server