手把手教你用RKE在离线环境搭建K8s集群,并用Rancher 2.5.7管理(含镜像导入与避坑指南)

发布时间:2026/6/2 21:46:44

手把手教你用RKE在离线环境搭建K8s集群,并用Rancher 2.5.7管理(含镜像导入与避坑指南) 企业级离线K8s集群实战RKE与Rancher全链路部署指南在金融、军工等对网络安全要求极高的行业场景中离线环境部署Kubernetes集群已成为刚需。本文将完整呈现基于RKE工具链的离线部署方案重点解决私有镜像仓库构建、集群网络隔离配置、Rancher管理平面集成等核心痛点。不同于常规教程的步骤罗列我们将从企业真实生产视角剖析离线环境下的特殊处理逻辑与故障树分析。1. 离线环境架构设计与资源规划1.1 基础设施拓扑设计典型的企业级离线K8s集群架构需考虑以下要素[物理隔离区] ├── 镜像构建跳板机带临时外网 │ ├── Docker构建环境 │ └── 镜像同步工具链 └── 生产隔离区 ├── Harbor私有仓库集群 ├── RKE控制平面节点3节点高可用 ├── Worker计算节点池 └── Rancher管理节点独立部署关键隔离策略使用物理隔离网闸或单向光纤实现镜像从构建区到生产区的单向传输控制平面节点建议采用Bonding技术实现网络冗余所有节点需统一时间源部署本地NTP服务器1.2 硬件资源配置基准节点类型vCPU内存存储网络带宽典型数量控制平面节点832GB200GB10Gbps3Worker节点1664GB1TB25GbpsN2Harbor仓库节点1664GB10TB*25Gbps2Rancher节点416GB100GB1Gbps1*存储容量建议按镜像总量×3规划需考虑版本保留策略1.3 软件版本黄金组合经过上百次生产验证的稳定版本搭配# 组件版本快照 RKE_VERSION1.4.6 KUBERNETES_VERSIONv1.23.17 DOCKER_VERSION20.10.23 HARBOR_VERSION2.7.2 RANCHER_VERSION2.6.11 # 较2.5.7有重大安全更新2. 离线镜像供应链建设2.1 私有仓库高可用部署Harbor的离线安装需特别注意证书配置# 生成自签名证书跳板机执行 openssl req -newkey rsa:4096 -nodes -sha256 \ -keyout harbor.key -x509 -days 3650 \ -out harbor.crt -subj /CCN/STBeijing/LBeijing/OExample/CNharbor.example.com # 证书分发到所有节点 for node in ${NODE_LIST}; do scp harbor.crt ${node}:/etc/docker/certs.d/harbor.example.com/ done仓库关键配置参数# harbor.yml核心片段 external_url: https://harbor.example.com harbor_admin_password: ComplexPassword123 database: password: DBSecret456 storage: filesystem: rootdirectory: /data/harbor ca_bundle: /etc/harbor/ssl/harbor.crt2.2 镜像全生命周期管理Rancher官方镜像处理流程优化镜像清单生成# 获取指定版本镜像清单 wget https://github.com/rancher/rancher/releases/download/v2.6.11/rancher-images.txt # 追加自定义组件镜像 echo quay.io/coreos/etcd:v3.5.6 rancher-images.txt镜像批量下载脚本增强# 增加重试机制和并行下载 PARALLEL5 while read image; do while ! docker pull $image; do echo Retrying $image... sleep 5 done done rancher-images.txt 镜像推送安全策略# 使用Robot Account进行推送 docker login harbor.example.com -u robot\$k8s-push -p SecureToken1233. RKE集群深度配置3.1 集群配置文件工程化cluster.yml的最佳实践模板nodes: - address: 10.99.68.62 internal_address: 172.16.68.62 # 使用内部管理网络 user: k8s-admin role: [controlplane, etcd] ssh_key_path: /home/k8s-admin/.ssh/k8s_rsa labels: rack: rack-a storage: ssd private_registries: - url: harbor.example.com user: robot\$k8s-pull password: SecureToken456 is_default: true services: etcd: snapshot: true retention: 72h creation: 12h kubelet: extra_args: max-pods: 250 image-gc-high-threshold: 90 network: options: flannel_backend_type: vxlan flannel_backend_port: 84723.2 离线环境特殊参数内核参数调优所有节点# /etc/sysctl.d/99-k8s.conf net.ipv4.ip_forward 1 net.bridge.bridge-nf-call-iptables 1 vm.swappiness 0 kernel.panic 10 kernel.panic_on_oops 1磁盘挂载优化# /etc/fstab 追加 /dev/sdb1 /var/lib/docker xfs defaults,noatime,nodiratime,nobarrier 0 0 /dev/sdc1 /var/lib/kubelet xfs defaults,noatime,nodiratime 0 04. Rancher管理平面集成4.1 高可用安装模式选择方案对比部署方式资源消耗复杂度适用场景单节点Docker低简单开发测试环境Helm HA部署高复杂生产环境K3s嵌入式中中等边缘计算场景推荐生产环境使用Helm HA部署helm install rancher rancher-latest/rancher \ --namespace cattle-system \ --set hostnamerancher.example.com \ --set replicas3 \ --set ingress.tls.sourcesecret \ --set privateCAtrue \ --set auditLog.level24.2 集群导入安全加固访问控制配置# 生成访问令牌 kubectl create serviceaccount cluster-admin -n kube-system kubectl create clusterrolebinding cluster-admin \ --clusterrolecluster-admin \ --serviceaccountkube-system:cluster-admin网络策略限制# rancher-network-policy.yaml kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: rancher-access spec: podSelector: matchLabels: app: rancher ingress: - from: - namespaceSelector: matchLabels: name: cattle-system policyTypes: - Ingress5. 故障排查手册5.1 常见错误代码速查错误码可能原因解决方案ImagePullBackOff镜像仓库认证失败检查registry-secret配置CrashLoopBackOff资源配额不足调整requests/limitsNetworkPluginNotReadyCNI插件未正确安装检查/opt/cni/bin目录内容NodeNotReadykubelet服务异常查看journalctl -u kubelet5.2 诊断工具集关键检查命令# 检查节点准备情况 kubectl get nodes -o wide --show-labels # 查看组件健康状态 kubectl get componentstatuses # 网络连通性测试 kubectl run net-check --imagealpine --restartNever --rm -it -- ping 10.96.0.1日志收集脚本#!/bin/bash # gather-logs.sh for node in $(kubectl get nodes -o name); do mkdir -p logs/${node#node/} kubectl debug ${node} -it --imagealpine -- \ sh -c tar czf - /var/log/{kubelet,docker}/* logs/${node#node/}/logs.tgz done

相关新闻