K8s集群离线包准备:实现内网机房无公网运维升级
内网环境下K8s运维的挑战
对于部署在隔离机房或涉密网络中的Kubernetes集群,通常无法直接访问公网镜像仓库和软件源。这导致集群版本升级、组件修复、安全补丁安装等运维操作变得困难。传统在线方式不可用,而手动逐节点拷贝组件又容易出错且效率低下。因此,提前准备完整的离线包,成为保障内网集群可持续运维的关键前提。
离线包准备的核心内容
镜像离线包
K8s运行依赖大量系统组件镜像(如kube-apiserver、kube-controller-manager、kube-scheduler、kube-proxy、etcd、pause等),以及必要的DNS和网络插件镜像(如CoreDNS、Calico或Flannel)。建议使用kubeadm config images list命令查看所需的镜像列表,并通过docker save或ctr save(针对containerd运行时)将镜像打包为tar文件,同时保留镜像的tag和版本信息。
二进制及软件包
需要准备kubelet、kubeadm、kubectl等K8s主程序二进制文件,以及CRI运行时(如containerd或CRI-O)的安装包。此外,还需包含依赖的systemd服务文件、CNI插件二进制(如bridge、loopback、portmap等)。建议从官方发布渠道下载与目标版本一致的二进制,避免版本不匹配。
系统依赖与RPM/DEB包
部分组件在安装时需要特定的系统库(如iptables、ipvsadm、conntrack-tools等)。可通过yumdownloader或apt download在相同操作系统的联网机器上提前获取所有依赖包,然后同步到内网环境。务必核对操作系统版本和架构(x86_64、arm64等),确保兼容性。
离线包的组织与校验
建议按以下目录结构组织:
- images/ - 存放所有镜像tar包
- bin/ - 存放kubeadm、kubelet、kubectl及CNI插件
- packages/ - 存放RPM/DEB系统依赖
- scripts/ - 存放导入、安装、升级的自动化脚本
所有文件在打包前应生成SHA256校验值清单,防止传输过程中损坏。同时,建议在准备完成后,先在一台与内网环境完全相同的测试机上执行完整的导入与升级演练,验证离线包的完整性。
内网机房的运维升级流程
- 通过U盘、移动硬盘或内部高速网络,将离线包分发至集群各节点。
- 执行镜像导入脚本,将images目录下的tar包导入到节点本地镜像存储中。
- 安装或升级系统依赖包,确保各节点的运行环境一致。
- 使用kubeadm的config子命令配置升级参数,并通过kubeadm upgrade逐节点完成控制平面和工作节点的升级。
- 升级后执行kubectl get nodes和各Pod状态检查,确认集群健康。
注意事项与最佳实践
- 离线包版本需与集群当前版本匹配,升级只能逐版本递增,不可跨大版本跳跃(例如从1.24直接升级到1.28,应先到1.25、1.26、1.27再至1.28)。
- 定期更新离线包,以包含最新的安全补丁和稳定版本的优化。
- 建立离线包的版本管理机制,记录每次更新的内容、时间及适用集群范围。
- 若内网存在私有镜像仓库,可将离线包中的镜像推送到私有仓库中,节点仅需配置从私有仓库拉取,而非在每个节点重复导入。
通过完善的离线包准备,内网机房可以在完全隔离公网的条件下,稳定、可控地完成K8s集群的运维与升级,确保业务连续性与安全合规要求。