手把手教你搞定RKE2离线安装:从CentOS7.6环境准备到第一个Pod跑起来 手把手教你搞定RKE2离线安装从CentOS7.6环境准备到第一个Pod跑起来在完全隔离的内网环境中部署Kubernetes集群是许多金融、政务、军工等对安全性要求极高行业的刚需。RKE2作为Rancher实验室推出的轻量级Kubernetes发行版凭借其全兼容性、军事级安全特性和简化的离线部署流程正成为企业级私有化部署的首选方案。本文将彻底拆解从零开始搭建RKE2集群的每个技术细节特别针对无外网访问的生产环境提供可复制的完整解决方案。1. 离线环境的核心挑战与应对策略离线部署的本质是构建一个自包含的软件生态闭环。与常规安装相比我们需要解决三大核心问题依赖隔离所有组件包括容器镜像、二进制文件、配置文件必须预先下载并存储在本地环境适配操作系统配置必须完全匹配Kubernetes的运行要求故障自愈安装过程无法实时获取外部支持每个步骤都需要具备错误回滚能力针对CentOS 7.6这类经典但稍显陈旧的操作系统我们采用以下技术路线# 系统兼容性检查清单 cat /etc/redhat-release # 确认版本为7.6 uname -r # 内核版本应≥3.10.0-1160 lscpu # 建议至少2核CPU free -h # 建议至少4GB内存 df -h / # 根分区建议≥50GB提示生产环境强烈建议使用相同版本的干净系统镜像初始化所有节点避免因系统差异导致不可预期的问题。2. 系统级准备工作深度解析2.1 网络配置的精细调整NetworkManager与Kubernetes网络插件的冲突是离线环境中最常见的坑。以下配置不仅解决基础兼容问题还优化了容器网络的性能表现# 创建网络管理排除规则 cat EOF /etc/NetworkManager/conf.d/rke2-canal.conf [keyfile] unmanaged-devicesinterface-name:cali*;interface-name:flannel*;interface-name:wireguard* EOF # 重载配置并验证 systemctl reload NetworkManager nmcli device status | grep -E cali|flannel # 应无输出关键参数说明unmanaged-devices声明这些接口由Kubernetes CNI插件直接管理wireguard*为未来可能使用的加密通信预留配置项2.2 安全模块的平衡配置完全关闭防火墙和SELinux虽然简单但存在安全隐患。更专业的做法是精细配置# 防火墙保留但放行必要端口 firewall-cmd --permanent --add-port6443/tcp # Kubernetes API firewall-cmd --permanent --add-port8472/udp # Flannel VXLAN firewall-cmd --permanent --add-port10250/tcp # Kubelet API firewall-cmd --reload # SELinux切换为宽容模式 setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config2.3 内核模块的静态加载离线环境无法动态获取内核模块必须确保关键模块在启动时自动加载# 内核模块配置文件 cat EOF /etc/modules-load.d/rke2.conf overlay br_netfilter ip_vs ip_vs_rr ip_vs_wrr ip_vs_sh nf_conntrack EOF # 立即加载模块 modprobe overlay modprobe br_netfilter sysctl --system故障排查技巧dmesg | grep -i error检查模块加载错误lsmod | grep ip_vs验证IPVS模块状态3. RKE2离线安装实战3.1 构建本地软件仓库在可联网的跳板机上准备所有依赖# 下载核心组件示例版本请替换为最新 export RKE2_VERSIONv1.25.9rke2r1 curl -LO https://github.com/rancher/rke2/releases/download/${RKE2_VERSION}/rke2-images.linux-amd64.tar.zst curl -LO https://github.com/rancher/rke2/releases/download/${RKE2_VERSION}/rke2.linux-amd64.tar.gz curl -LO https://github.com/rancher/rke2/releases/download/${RKE2_VERSION}/sha256sum-amd64.txt curl -sfL https://get.rke2.io --output install.sh # 验证文件完整性 sha256sum -c sha256sum-amd64.txt3.2 节点初始化流程控制平面节点安装# 部署二进制文件 mkdir -p /var/lib/rancher/rke2/agent/images/ cp rke2-images.linux-amd64.tar.zst /var/lib/rancher/rke2/agent/images/ cp rke2.linux-amd64.tar.gz /usr/local/bin/ tar xzf rke2.linux-amd64.tar.gz -C /usr/local/bin/ chmod x /usr/local/bin/rke2 # 创建配置文件 mkdir -p /etc/rancher/rke2/ cat EOF /etc/rancher/rke2/config.yaml token: securetoken2023 tls-san: [node1.internal,10.18.97.185] system-default-registry: registry.internal:5000 node-taint: - CriticalAddonsOnlytrue:NoExecute EOF # 启动服务 systemctl enable rke2-server --now工作节点加入集群# 从控制节点获取token ssh node1 cat /var/lib/rancher/rke2/server/node-token # 工作节点配置 cat EOF /etc/rancher/rke2/config.yaml server: https://node1.internal:9345 token: 上一步获取的token system-default-registry: registry.internal:5000 EOF # 以agent模式启动 INSTALL_RKE2_TYPEagent systemctl enable rke2-agent --now4. 私有镜像仓库集成Harbor作为企业级私有仓库的首选需要与RKE2深度集成# /etc/rancher/rke2/registries.yaml 配置示例 mirrors: registry.internal:5000: endpoint: - http://registry.internal:5000 configs: registry.internal:5000: tls: insecure_skip_verify: true auth: username: admin password: Harbor12345关键验证步骤# 检查镜像拉取策略 kubectl get pods -n kube-system -o jsonpath{.items[*].spec.containers[*].image} # 测试私有仓库连通性 crictl pull registry.internal:5000/library/nginx:alpine5. 集群验证与故障诊断5.1 健康状态检查# 核心组件状态 kubectl get pods -n kube-system -o wide # 网络连通性测试 kubectl run test-$(date %s) --imageregistry.internal:5000/library/busybox --rm -it -- ping 10.43.0.1 # 存储卷测试 kubectl apply -f - EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi EOF5.2 常见问题处理指南场景1服务启动超时journalctl -u rke2-server -f --no-pager | grep -A 10 -B 10 ERROR可能原因镜像拉取失败 → 检查registry.yaml配置端口冲突 →netstat -tulnp | grep 6443证书问题 → 检查/var/lib/rancher/rke2/server/tls/场景2节点NotReady# 检查kubelet日志 journalctl -u kubelet -f # 网络插件诊断 kubectl logs -n kube-system -l apprke2-canal -c canal典型解决方案确认网络插件镜像已正确加载检查节点防火墙规则验证内核模块加载情况6. 生产环境优化建议稳定性增强配置# /etc/rancher/rke2/config.yaml 高级参数 kubelet-arg: - max-pods250 - image-gc-high-threshold85 - image-gc-low-threshold80 kube-controller-manager-arg: - node-monitor-grace-period40s - pod-eviction-timeout5m0s资源隔离方案# 为关键组件分配保留资源 cat EOF /etc/rancher/rke2/config.yaml.d/90-reserved.yaml kube-reserved: cpu: 1 memory: 1Gi system-reserved: cpu: 500m memory: 512Mi eviction-hard: memory.available: 200Mi nodefs.available: 10% EOF备份与恢复策略# 定期快照关键目录 tar czf rke2-backup-$(date %Y%m%d).tar.gz \ /etc/rancher/rke2 \ /var/lib/rancher/rke2/server \ /var/lib/kubelet