MicroK8s离线部署方案:无网络环境下的K8s部署技巧
在生产环境中,很多企业出于安全考虑会限制服务器访问外部网络,这给Kubernetes(K8s)部署带来了挑战。MicroK8s作为轻量级K8s发行版,提供了完整的离线部署能力。本文将详细介绍如何在无网络环境下部署MicroK8s,包括镜像准备、本地仓库搭建和节点配置等关键步骤。
离线部署架构
MicroK8s离线部署采用"镜像仓库+离线安装包"的双核心架构。首先在有网络环境中准备包含所有依赖的Snap包和容器镜像,然后通过本地仓库实现无网络环境的节点部署。核心组件包括:
- 离线Snap包:包含MicroK8s运行所需的所有二进制文件和配置模板
- 本地容器仓库:存储K8s核心组件镜像及附加组件镜像
- 配置同步机制:通过预配置文件实现节点间配置一致性
准备工作
环境要求
- 至少2台服务器(1台作为仓库节点,1台作为工作节点)
- 操作系统:Ubuntu 20.04/22.04 LTS
- 硬件配置:每节点至少2CPU/4GB内存/20GB磁盘
- 内部网络:节点间可相互通信(建议千兆网络)
离线资源准备
在有网络环境中执行以下操作,准备离线部署所需资源:
-
下载MicroK8s Snap包:
# 创建工作目录 mkdir -p /offline-resources cd /offline-resources # 下载最新稳定版MicroK8s snap download microk8s --channel=1.28/stable --target-directory . -
获取核心依赖Snap包:
# 下载core22基础Snap snap download core22 --target-directory . -
准备离线安装脚本: 从项目仓库获取离线部署测试脚本:tests/libs/airgap.sh
部署本地镜像仓库
仓库节点配置
-
安装MicroK8s(有网络环境):
sudo snap install microk8s --classic --channel=1.28/stable -
启用内置容器仓库:
# 启用 registry 插件 sudo microk8s enable registry # 确认仓库状态 sudo microk8s kubectl get pods -n container-registry -
配置仓库访问策略: 编辑仓库配置文件,允许HTTP访问:microk8s-resources/default-args/certs.d/localhost__32000/hosts.toml
镜像同步
-
获取必要镜像列表:
# 导出当前环境镜像列表 sudo microk8s ctr image ls -q | grep -v "sha256:" > image-list.txt -
同步镜像到本地仓库:
# 遍历镜像列表,推送至本地仓库 while IFS= read -r image; do # 重命名镜像 mirror_image=$(echo $image | sed 's,\(docker.io\|k8s.gcr.io\|registry.k8s.io\),localhost:32000,g') # 复制并推送镜像 sudo microk8s ctr image convert $image $mirror_image sudo microk8s ctr image push $mirror_image --plain-http done < image-list.txt
离线节点部署
预配置文件准备
创建MicroK8s预配置文件,指定本地仓库地址:
# .microk8s.yaml
version: 0.1.0
extraKubeletArgs:
--cluster-dns: 10.152.183.10
--cluster-domain: cluster.local
containerdRegistryConfigs:
docker.io: |
[host."http://仓库节点IP:32000"]
capabilities = ["pull", "resolve"]
registry.k8s.io: |
[host."http://仓库节点IP:32000"]
capabilities = ["pull", "resolve"]
addons:
- name: dns
- name: storage
- name: registry
将此文件保存至:/root/snap/microk8s/common/.microk8s.yaml
离线安装MicroK8s
-
传输离线资源: 通过U盘或内部网络将以下文件复制到离线节点:
- microk8s_*.snap(MicroK8s安装包)
- core22_*.snap(基础依赖包)
- .microk8s.yaml(预配置文件)
-
安装Snap包:
# 安装基础依赖 sudo snap install core22_*.snap --dangerous # 安装MicroK8s sudo snap install microk8s_*.snap --dangerous --classic -
验证部署状态:
# 检查节点状态 sudo microk8s status # 查看运行的Pod sudo microk8s kubectl get pods -A
多节点集群配置
生成加入命令
在仓库节点执行:
# 生成离线环境的节点加入命令
sudo microk8s add-node --token-ttl 3600
加入工作节点
在离线节点执行(替换实际令牌和IP):
sudo microk8s join 192.168.1.100:25000/abcdef1234567890 --skip-verify
集群状态检查
# 检查节点状态
sudo microk8s kubectl get nodes
# 查看集群信息
sudo microk8s kubectl cluster-info
常见问题解决
仓库连接失败
症状:Pod启动失败,提示无法拉取镜像
解决:
- 检查仓库地址配置:microk8s-resources/default-args/certs.d/localhost__32000/hosts.toml
- 验证仓库节点网络连通性:
curl http://仓库节点IP:32000/v2/_catalog
节点加入超时
症状:执行join命令后长时间无响应
解决:
- 检查防火墙设置,确保25000端口开放
- 手动同步证书:microk8s-resources/certs/
资源不足
症状:Pod频繁重启或处于Pending状态
解决:
- 增加节点资源或调整资源限制
- 关闭不必要的附加组件:
sudo microk8s disable dashboard metrics-server
部署验证
基础功能测试
-
创建测试Pod:
sudo microk8s kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: offline-test spec: containers: - name: nginx image: nginx:alpine EOF -
检查Pod状态:
sudo microk8s kubectl get pods/offline-test
存储功能测试
启用hostpath存储并创建PVC:
# 启用hostpath存储
sudo microk8s enable hostpath-storage
# 创建测试PVC
sudo microk8s kubectl apply -f [tests/templates/pvc.yaml](https://link.gitcode.com/i/d9336ae5b455c91bdd72f7d10eb9cd96)
总结与最佳实践
MicroK8s提供了灵活的离线部署能力,通过本地仓库和预配置文件机制,可以在无网络环境中轻松部署K8s集群。关键最佳实践:
- 资源规划:至少准备3节点集群,确保高可用性
- 镜像管理:定期更新本地仓库镜像,保持与上游同步
- 配置备份:定期备份microk8s-resources/目录
- 版本控制:所有节点使用相同版本的MicroK8s和依赖包
官方文档:docs/提供了更多高级配置选项,可根据实际需求进行调整。通过本文介绍的方法,企业用户可以在严格的网络隔离环境中安全地部署和运行Kubernetes集群。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




