RKE2 K8s 生产集群部署
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:安装附加控制平面节点
在 server2 和 server3 上执行:
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)
在 agent1、agent2 等节点上执行:
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
从外部机器访问
- 将
rke2.yaml复制到本地~/.kube/config。 - 将文件中的
server: https://127.0.0.1:6443改为负载均衡器地址(若有)或某个控制平面节点 IP。 - 若直接使用节点 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