SuperAPI AI 工具集

kubespray-airgap

部署与运维

查看项目

更新于 10-23 02:25

技能介绍

用途

该技能用于在无互联网访问的气隙(air-gapped)或离线环境中,使用 kubespray-offline 工具部署 Kubernetes 集群。其核心原则是:在可联网机器上预先下载全部所需二进制与容器镜像,生成自包含的 outputs/ 目录,转移到目标网络后完全离线完成部署,转移之后不再需要互联网。

主要能力

  • 通过 download-all.sh 按顺序执行 config.sh、precheck.sh、prepare-pkgs.sh、prepare-py.sh、get-kubespray.sh、pypi-mirror.sh、download-kubespray-files.sh、download-additional-containers.sh、create-repo.sh、copy-target-scripts.sh 等步骤完成资源打包。
  • 在 config.sh 中集中配置 KUBESPRAY_VERSION、RUNC_VERSION、CONTAINERD_VERSION、NERDCTL_VERSION、CNI_VERSION、NGINX_VERSION、REGISTRY_VERSION、REGISTRY_PORT 等版本与端口。
  • 生成的 outputs/ 目录包含 files(二进制)、images(镜像 tar.gz 与清单)、pypi(Python 包与索引)、rpms(RPM 包与仓库元数据)、playbook、各类 setup 与启动脚本,以及 nginx 配置。
  • 支持搭建私有容器镜像仓库、nginx 文件服务器,以及离线 yum 仓库与 pypi 镜像。
  • 支持通过 containerd 镜像镜像源(mirrors)将 docker.io、registry-1.docker.io、quay.io 等重定向到私有仓库。
  • 支持部署后向私有仓库推送额外镜像。
  • 提供 etcd ARM64 下载 404、ImagePullBackOff、平台不匹配、Flannel 子网环境缺失、DNS 解析、自签名证书等常见问题的排查方法。

使用方式

在联网机器上运行 download-all.sh 生成 outputs/ 目录并整体转移到气隙网络内的管理服务器,随后依次执行:

cd outputs && ./setup-container.sh
./start-nginx.sh
./setup-offline.sh
./setup-py.sh
./start-registry.sh
./load-push-all-images.sh
extract-kubespray.sh

ARM64 场景下加载镜像使用 ./load-push-all-images.sh --all-platforms。

在 inventory/mycluster/group_vars/all/offline.yml 中将 http_server、registry_host 及各类下载 URL、镜像仓库指向管理服务器地址(示例中使用 ADMIN_IP 占位),并配置 containerd_registries_mirrors。随后在 kubespray 目录中安装依赖、放置 offline.yml、运行 offline-repo 剧本和各节点仓库配置,最后执行 cluster.yml 部署集群:

ansible-playbook -i inventory/mycluster/inventory.ini offline-repo/playbook/offline-repo.yml
ansible-playbook -i inventory/mycluster/inventory.ini -v cluster.yml

仅应用镜像配置变更时可使用 --tags containerd。修改 kube_version 可通过修改 generate_list.sh 调用参数后重新运行 download-kubespray-files.sh。

适用场景

适用于向无互联网访问的网络部署 Kubernetes、使用 kubespray-offline 进行离线部署、为 Kubernetes 搭建私有容器镜像仓库、配置 containerd 使用内部镜像源,以及排查气隙环境中的镜像拉取问题。在线部署或一般性故障排查不适用本技能,应分别使用 kubespray-deployment 与 kubespray-troubleshooting。

限制与注意事项

需要一台可联网机器完成资源下载,并需将整个 outputs/ 目录传输至隔离网络。节点需能访问管理服务器的 80 与 35000 端口;DNS 未配置时需使用 IP 或维护 /etc/hosts。架构不一致需在所有下载 URL 中使用 image_arch 变量,ARM64 下加载镜像需加 --all-platforms。自签名证书可使用 skip_verify 或分发 CA 证书。须先运行 offline-repo 剧本再运行 cluster.yml。config.sh 中的版本需与 KUBESPRAY_VERSION 对应。部署前应确认 images.list 中所有镜像均已推送至仓库,否则会出现 DaemonSet/Deployment 失败。