MicroK8s离线部署方案:无网络环境下的K8s部署技巧

MicroK8s离线部署方案:无网络环境下的K8s部署技巧

【免费下载链接】microk8s MicroK8s is a small, fast, single-package Kubernetes for datacenters and the edge. 【免费下载链接】microk8s 项目地址: https://gitcode.com/gh_mirrors/mi/microk8s

在生产环境中,很多企业出于安全考虑会限制服务器访问外部网络,这给Kubernetes(K8s)部署带来了挑战。MicroK8s作为轻量级K8s发行版,提供了完整的离线部署能力。本文将详细介绍如何在无网络环境下部署MicroK8s,包括镜像准备、本地仓库搭建和节点配置等关键步骤。

离线部署架构

MicroK8s离线部署采用"镜像仓库+离线安装包"的双核心架构。首先在有网络环境中准备包含所有依赖的Snap包和容器镜像,然后通过本地仓库实现无网络环境的节点部署。核心组件包括:

  • 离线Snap包:包含MicroK8s运行所需的所有二进制文件和配置模板
  • 本地容器仓库:存储K8s核心组件镜像及附加组件镜像
  • 配置同步机制:通过预配置文件实现节点间配置一致性

MicroK8s架构

准备工作

环境要求

  • 至少2台服务器(1台作为仓库节点,1台作为工作节点)
  • 操作系统:Ubuntu 20.04/22.04 LTS
  • 硬件配置:每节点至少2CPU/4GB内存/20GB磁盘
  • 内部网络:节点间可相互通信(建议千兆网络)

离线资源准备

在有网络环境中执行以下操作,准备离线部署所需资源:

  1. 下载MicroK8s Snap包

    # 创建工作目录
    mkdir -p /offline-resources
    cd /offline-resources
    
    # 下载最新稳定版MicroK8s
    snap download microk8s --channel=1.28/stable --target-directory .
    
  2. 获取核心依赖Snap包

    # 下载core22基础Snap
    snap download core22 --target-directory .
    
  3. 准备离线安装脚本: 从项目仓库获取离线部署测试脚本:tests/libs/airgap.sh

部署本地镜像仓库

仓库节点配置

  1. 安装MicroK8s(有网络环境)

    sudo snap install microk8s --classic --channel=1.28/stable
    
  2. 启用内置容器仓库

    # 启用 registry 插件
    sudo microk8s enable registry
    
    # 确认仓库状态
    sudo microk8s kubectl get pods -n container-registry
    
  3. 配置仓库访问策略: 编辑仓库配置文件,允许HTTP访问:microk8s-resources/default-args/certs.d/localhost__32000/hosts.toml

镜像同步

  1. 获取必要镜像列表

    # 导出当前环境镜像列表
    sudo microk8s ctr image ls -q | grep -v "sha256:" > image-list.txt
    
  2. 同步镜像到本地仓库

    # 遍历镜像列表,推送至本地仓库
    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

  1. 传输离线资源: 通过U盘或内部网络将以下文件复制到离线节点:

    • microk8s_*.snap(MicroK8s安装包)
    • core22_*.snap(基础依赖包)
    • .microk8s.yaml(预配置文件)
  2. 安装Snap包

    # 安装基础依赖
    sudo snap install core22_*.snap --dangerous
    
    # 安装MicroK8s
    sudo snap install microk8s_*.snap --dangerous --classic
    
  3. 验证部署状态

    # 检查节点状态
    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启动失败,提示无法拉取镜像
解决

  1. 检查仓库地址配置:microk8s-resources/default-args/certs.d/localhost__32000/hosts.toml
  2. 验证仓库节点网络连通性:
    curl http://仓库节点IP:32000/v2/_catalog
    

节点加入超时

症状:执行join命令后长时间无响应
解决

  1. 检查防火墙设置,确保25000端口开放
  2. 手动同步证书:microk8s-resources/certs/

资源不足

症状:Pod频繁重启或处于Pending状态
解决

  1. 增加节点资源或调整资源限制
  2. 关闭不必要的附加组件:
    sudo microk8s disable dashboard metrics-server
    

部署验证

基础功能测试

  1. 创建测试Pod

    sudo microk8s kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Pod
    metadata:
      name: offline-test
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
    EOF
    
  2. 检查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集群。关键最佳实践:

  1. 资源规划:至少准备3节点集群,确保高可用性
  2. 镜像管理:定期更新本地仓库镜像,保持与上游同步
  3. 配置备份:定期备份microk8s-resources/目录
  4. 版本控制:所有节点使用相同版本的MicroK8s和依赖包

官方文档:docs/提供了更多高级配置选项,可根据实际需求进行调整。通过本文介绍的方法,企业用户可以在严格的网络隔离环境中安全地部署和运行Kubernetes集群。

【免费下载链接】microk8s MicroK8s is a small, fast, single-package Kubernetes for datacenters and the edge. 【免费下载链接】microk8s 项目地址: https://gitcode.com/gh_mirrors/mi/microk8s

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值