目录
架构概览
技术栈
- Kubernetes 发行版: RKE2 v1.31.4
- 容器运行时: containerd (RKE2 内置)
- 网络插件: Cilium CNI (启用 kube-proxy 替换)
- Ingress 控制器: Nginx Ingress
- 管理平台: Rancher 2.12.2
- 证书管理: cert-manager v1.18.2
集群架构
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
┌─────────────────────────────────────────────────────┐ │ 负载均衡器 (可选) │ │ 80/443 → Nginx Ingress │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ RKE2 Server 节点 (Master) │ │ – etcd │ │ – kube–apiserver │ │ – kube–controller–manager │ │ – kube–scheduler │ │ – Cilium CNI │ │ – Rancher (管理界面) │ └─────────────────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────────────────┐ │ RKE2 Agent 节点 (Worker) │ │ – kubelet │ │ – Cilium Agent │ │ – 应用 Pod │ │ – Longhorn 存储 (推荐) │ └─────────────────────────────────────────────────────┘ |
环境准备
硬件要求
Server 节点 (Master)
| 资源 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核 |
| 内存 | 4 GB | 8 GB |
| 磁盘 | 50 GB | 100 GB |
| 网络 | 1 Gbps | 10 Gbps |
Agent 节点 (Worker)
| 资源 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 8 核 |
| 内存 | 4 GB | 16 GB |
| 磁盘 | 50 GB | 200 GB |
| 网络 | 1 Gbps | 10 Gbps |
操作系统要求
- 支持的系统: RHEL/CentOS 7/8/9, Ubuntu 20.04/22.04
- 内核版本: >= 4.18
- SELinux: Permissive 或 Disabled
- 防火墙: 配置或禁用
节点规划示例
| 角色 | 主机名 | IP 地址 | 说明 |
|---|---|---|---|
| Server | k8s-server-1 | 192.168.1.10 | Master 节点 |
| Agent | k8s-node-1 | 192.168.1.11 | Worker 节点 1 |
| Agent | k8s-node-2 | 192.168.1.12 | Worker 节点 2 (可选) |
网络规划
|
1 2 3 4 5 6 7 8 |
# Pod 网络 cluster-cidr: 172.16.0.0/16 # Service 网络 service-cidr: 172.17.0.0/16 # DNS 服务器 cluster-dns: 172.17.0.10 |
必需端口
Server 节点
| 端口 | 协议 | 用途 |
|---|---|---|
| 6443 | TCP | Kubernetes API |
| 9345 | TCP | RKE2 Agent 通信 |
| 2379-2380 | TCP | etcd (Server 间) |
| 10250 | TCP | kubelet |
| 80, 443 | TCP | Ingress |
Agent 节点
| 端口 | 协议 | 用途 |
|---|---|---|
| 10250 | TCP | kubelet |
| 30000-32767 | TCP | NodePort 服务 |
安装 RKE2 集群
第一步:准备离线安装文件
在有网络的环境中下载以下文件:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# 设置版本 export RKE2_VERSION=“v1.31.4+rke2r1” export RANCHER_VERSION=“2.12.2” export CERT_MANAGER_VERSION=“v1.18.2” # 1. 下载 RKE2 离线包 wget https://github.com/rancher/rke2/releases/download/${RKE2_VERSION}/rke2–images.linux–amd64.tar.zst wget https://github.com/rancher/rke2/releases/download/${RKE2_VERSION}/rke2.linux–amd64.tar.gz wget https://github.com/rancher/rke2/releases/download/${RKE2_VERSION}/sha256sum–amd64.txt wget https://get.rke2.io –O install.sh # 2. 下载 Rancher 相关文件 wget https://github.com/rancher/rancher/releases/download/v${RANCHER_VERSION}/rancher–images.txt wget https://github.com/rancher/rancher/releases/download/v${RANCHER_VERSION}/rancher–save–images.sh wget https://github.com/rancher/rancher/releases/download/v${RANCHER_VERSION}/rancher–load–images.sh # 3. 下载 cert-manager wget https://github.com/cert–manager/cert–manager/releases/download/${CERT_MANAGER_VERSION}/cert–manager.crds.yaml |
将所有文件传输到离线环境的 /data/rke2-artifacts/ 目录。
第二步:安装 Server 节点
1. 创建目录结构
|
1 2 3 4 5 6 |
# 创建数据目录 mkdir –p /data/rancher/rke2/agent/images mkdir –p /etc/rancher/rke2 # 创建软链接(保持兼容性) ln –sf /data/rancher /var/lib/rancher |
2. 复制镜像文件
|
1 2 3 |
# 复制镜像到指定位置(RKE2 会自动加载) cp /data/rke2–artifacts/rke2–images.linux–amd64.tar.zst \ /data/rancher/rke2/agent/images/ |
3. 安装 RKE2
|
1 2 3 4 5 6 |
cd /data/rke2–artifacts chmod +x install.sh INSTALL_RKE2_ARTIFACT_PATH=/data/rke2–artifacts \ INSTALL_RKE2_TYPE=server \ ./install.sh |
4. 创建配置文件
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
cat > /etc/rancher/rke2/config.yaml <<EOF # 节点配置 node–name: “k8s-server-1” node–ip: 192.168.1.10 # 数据目录 data–dir: /data/rancher/rke2 write–kubeconfig: /etc/rancher/rke2/rke2.yaml write–kubeconfig–mode: “0644” # TLS SAN(添加域名和 IP) tls–san: – “rancher.example.com” – “192.168.1.10” # CNI 配置 – 使用 Cilium cni: cilium # 网络配置 cluster–cidr: 172.16.0.0/16 service–cidr: 172.17.0.0/16 cluster–dns: 172.17.0.10 cluster–domain: cluster.local # Cilium 配置 cni–config: cilium: kubeProxyReplacement: strict enablePolicy: true policyEnforcementMode: always EOF |
5. 配置镜像仓库(如使用私有仓库)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
cat > /etc/rancher/rke2/registries.yaml <<EOF # 镜像代理配置 mirrors: docker.io: endpoint: – “https://registry.example.com” quay.io: endpoint: – “https://quay.example.com” # 私有仓库认证 configs: “registry.example.com”: auth: username: your–username password: your–password tls: insecure_skip_verify: false EOF |
6. 配置 Nginx Ingress
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
mkdir –p /data/rancher/rke2/server/manifests cat > /data/rancher/rke2/server/manifests/rke2–ingress–nginx–config.yaml <<EOF —– apiVersion: helm.cattle.io/v1 kind: HelmChartConfig metadata: name: rke2–ingress–nginx namespace: kube–system spec: valuesContent: |– controller: # 使用 hostNetwork 模式 hostNetwork: true kind: DaemonSet # 监听主机端口 service: type: ClusterIP # 容忍度配置 tolerations: – key: “node-role.kubernetes.io/control-plane” operator: “Exists” effect: “NoSchedule” # 配置 config: use–forwarded–headers: “true” compute–full–forwarded–for: “true” # 资源限制 resources: limits: cpu: 1000m memory: 512Mi requests: cpu: 100m memory: 128Mi EOF |
7. 启动 RKE2
|
1 2 3 4 5 6 |
# 启用并启动服务 systemctl enable rke2–server.service systemctl start rke2–server.service # 查看启动日志 journalctl –u rke2–server –f |
8. 配置 kubectl
|
1 2 3 4 5 6 7 8 9 10 11 |
# 设置环境变量 export KUBECONFIG=/etc/rancher/rke2/rke2.yaml export PATH=$PATH:/var/lib/rancher/rke2/bin # 添加到 bashrc cat >> ~/.bashrc <<EOF export KUBECONFIG=/etc/rancher/rke2/rke2.yaml export PATH=\$PATH:/var/lib/rancher/rke2/bin EOF source ~/.bashrc |
9. 验证 Server 节点
|
1 2 3 4 5 6 7 8 9 |
# 检查节点状态 kubectl get nodes # 预期输出 NAME STATUS ROLES AGE VERSION k8s–server–1 Ready control–plane,etcd,master 2m v1.31.4+rke2r1 # 检查系统 Pod kubectl get pods –A |
10. 获取 Agent 加入 Token
|
1 2 3 4 5 |
# 查看 token cat /data/rancher/rke2/server/node–token # 输出示例: # K10xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx::server:xxxxxxxxxxxxxxxx |
第三步:安装 Agent 节点
1. 准备 Agent 节点
|
1 2 3 4 5 6 7 8 9 10 |
# 创建目录 mkdir –p /data/rancher/rke2/agent/images mkdir –p /etc/rancher/rke2 # 创建软链接 ln –sf /data/rancher /var/lib/rancher # 复制镜像文件 cp /data/rke2–artifacts/rke2–images.linux–amd64.tar.zst \ /data/rancher/rke2/agent/images/ |
2. 安装 RKE2 Agent
|
1 2 3 4 5 6 |
cd /data/rke2–artifacts chmod +x install.sh INSTALL_RKE2_ARTIFACT_PATH=/data/rke2–artifacts \ INSTALL_RKE2_TYPE=agent \ ./install.sh |
3. 创建配置文件
|
1 2 3 4 5 6 7 8 9 10 11 12 |
cat > /etc/rancher/rke2/config.yaml <<EOF # 加入集群配置 server: https://192.168.1.10:9345 token: <从 Server 节点获取的 token> # 节点配置 node–name: “k8s-node-1” node–ip: 192.168.1.11 # 数据目录 data–dir: /data/rancher/rke2 EOF |
4. 配置镜像仓库(同 Server 节点)
|
1 2 3 4 5 6 7 |
cat > /etc/rancher/rke2/registries.yaml <<EOF # 与 Server 节点保持一致 mirrors: docker.io: endpoint: – “https://registry.example.com” EOF |
5. 启动 Agent
|
1 2 3 4 5 |
systemctl enable rke2–agent.service systemctl start rke2–agent.service # 查看日志 journalctl –u rke2–agent –f |
6. 验证节点加入
在 Server 节点上执行:
|
1 2 3 4 5 6 |
kubectl get nodes # 预期输出 NAME STATUS ROLES AGE VERSION k8s–server–1 Ready control–plane,etcd,master 10m v1.31.4+rke2r1 k8s–node–1 Ready <none> 2m v1.31.4+rke2r1 |
第四步:等待集群完全就绪
|
1 2 3 4 5 6 7 8 9 |
# 检查所有系统组件 kubectl get pods –A # 等待所有 Pod 运行 kubectl wait —for=condition=ready pod \ –l k8s–app=cilium –n kube–system —timeout=300s # 检查 Ingress Controller kubectl get pods –n kube–system | grep nginx |
安装 Rancher
第一步:安装 Helm
|
1 2 3 4 5 |
# 下载 Helm 安装脚本 curl –fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get–helm–3 | bash # 验证安装 helm version |
第二步:安装 cert-manager
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# 创建 namespace kubectl create namespace cert–manager # 安装 CRDs kubectl apply –f /data/rke2–artifacts/cert–manager.crds.yaml # 添加 Helm 仓库 helm repo add jetstack https://charts.jetstack.io helm repo update # 安装 cert-manager helm install cert–manager jetstack/cert–manager \ —namespace cert–manager \ —version v1.18.2 # 验证安装 kubectl get pods –n cert–manager # 等待就绪 kubectl wait —for=condition=ready pod \ –l app.kubernetes.io/instance=cert–manager \ –n cert–manager —timeout=300s |
第三步:安装 Rancher
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 创建 namespace kubectl create namespace cattle–system # 添加 Rancher Helm 仓库 helm repo add rancher–stable https://releases.rancher.com/server–charts/stable helm repo update # 安装 Rancher helm install rancher rancher–stable/rancher \ —namespace cattle–system \ —set hostname=rancher.example.com \ —set replicas=1 \ —set bootstrapPassword=admin # 等待 Rancher 启动 kubectl –n cattle–system rollout status deploy/rancher # 查看 Rancher Pod kubectl get pods –n cattle–system |
第四步:配置 Ingress
|
1 2 3 4 5 6 |
# 查看 Ingress kubectl get ingress –n cattle–system # 预期输出 NAME CLASS HOSTS ADDRESS PORTS AGE rancher nginx rancher.example.com 80, 443 2m |
验证和访问
配置 DNS 或 Hosts
在客户端机器的 /etc/hosts 文件中添加:
|
1 |
192.168.1.10 rancher.example.com |
访问 Rancher
在浏览器中打开:
|
1 |
https://rancher.example.com |
初始登录:
- 用户名:
admin - 密码:
admin(首次登录需要修改)
验证集群状态
登录 Rancher 后,检查:
- 集群状态:应显示为
Active - 节点列表:所有节点应为
Active状态 - 系统组件:所有组件应为
Healthy
常见问题
1. Pod 无法启动 – 镜像拉取失败
问题:ImagePullBackOff 错误
解决方案:
|
1 2 3 4 5 6 7 8 9 |
# 检查 registries.yaml 配置 cat /etc/rancher/rke2/registries.yaml # 检查 containerd 是否识别配置 grep –A 10 “registry.example.com” \ /var/lib/rancher/rke2/agent/etc/containerd/config.toml # 测试镜像拉取 crictl pull registry.example.com/rancher/rancher:v2.12.2 |
2. Agent 节点无法加入
问题:Agent 无法连接到 Server
排查步骤:
|
1 2 3 4 5 6 7 8 9 10 11 |
# 1. 测试网络连接 curl –k https://192.168.1.10:9345/ping # 2. 检查防火墙 firewall–cmd —list–ports # 3. 检查 token 是否正确 cat /etc/rancher/rke2/config.yaml # 4. 查看 Agent 日志 journalctl –u rke2–agent –f |
3. Rancher 无法访问
问题:浏览器无法访问 Rancher
排查步骤:
|
1 2 3 4 5 6 7 8 9 10 11 |
# 1. 检查 Ingress Controller kubectl get pods –n kube–system | grep nginx # 2. 检查 Rancher Pod kubectl get pods –n cattle–system # 3. 检查 Ingress 配置 kubectl get ingress –n cattle–system –o yaml # 4. 检查端口监听 netstat –tlnp | grep –E ’80|443′ |
4. Cilium 网络问题
问题:Pod 之间无法通信
解决方案:
|
1 2 3 4 5 6 7 8 9 10 11 |
# 检查 Cilium 状态 kubectl get pods –n kube–system –l k8s–app=cilium # 安装 Cilium CLI(可选) CILIUM_CLI_VERSION=v0.16.21 wget https://github.com/cilium/cilium–cli/releases/download/${CILIUM_CLI_VERSION}/cilium–linux–amd64.tar.gz tar xzvf cilium–linux–amd64.tar.gz mv cilium /usr/local/bin/ # 检查连通性 cilium connectivity test |
最佳实践
1. 高可用部署
生产环境建议:
- Server 节点:至少 3 个(奇数)
- Agent 节点:至少 2 个
- 负载均衡:为 Server 节点配置 LB
2. 数据备份
定期备份关键数据:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/bin/bash # 备份脚本示例 BACKUP_DIR=“/backup/rke2/$(date +%Y%m%d_%H%M%S)” mkdir –p ${BACKUP_DIR} # 备份 etcd tar czf ${BACKUP_DIR}/etcd.tar.gz \ –C /data/rancher/rke2/server db/ # 备份证书 tar czf ${BACKUP_DIR}/tls.tar.gz \ –C /data/rancher/rke2/server tls/ # 备份配置 tar czf ${BACKUP_DIR}/config.tar.gz \ –C /etc/rancher rke2/ echo “备份完成: ${BACKUP_DIR}” |
3. 监控告警
建议安装:
- Prometheus:监控指标收集
- Grafana:可视化展示
- AlertManager:告警通知
4. 日志管理
配置日志轮转:
|
1 2 3 |
# 编辑 /etc/systemd/journald.conf SystemMaxUse=1G SystemMaxFileSize=100M |
5. 安全加固
- 定期更新系统和组件
- 使用强密码和密钥认证
- 启用 RBAC 和网络策略
- 配置审计日志
6. 资源隔离
使用 Longhorn 时,避免在 Master 节点运行:
|
1 2 3 4 5 |
# 给 Master 节点添加 taint kubectl taint nodes k8s–server–1 \ node–role.kubernetes.io/master=:NoSchedule # Longhorn 会自动调度到 Worker 节点 |
总结
本文介绍了 RKE2 和 Rancher 的完整离线安装流程,主要步骤包括:
- ✅ 准备离线安装文件
- ✅ 安装 RKE2 Server 节点
- ✅ 添加 RKE2 Agent 节点
- ✅ 等待集群就绪
- ✅ 安装 Helm 和 cert-manager
- ✅ 安装 Rancher 管理平台
- ✅ 验证和访问
通过本指南,您应该能够在离线环境中成功部署一个生产级别的 Kubernetes 集群和 Rancher 管理平台。
参考资源
发表回复