You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否默认配置Kubernetes使用镜像源搭建离线集群(containerd+Nexus)

可行性确认

完全可行。containerd原生支持配置镜像镜像(mirror),可将公共镜像源的拉取请求重定向到你的Nexus私有仓库;同时Nexus可作为镜像代理或私有存储仓库,缓存公共镜像、存储离线镜像,完全适配Kubernetes集群的离线环境需求。

具体实施步骤

1. 配置Nexus镜像仓库

  • 创建代理仓库:分别为Kubernetes常用镜像源(如docker.io、registry.k8s.io、k8s.gcr.io、quay.io)创建代理仓库,用于缓存公共镜像;若已有离线镜像包,可创建宿主仓库用于存储这些镜像。
  • 创建仓库组:将上述代理仓库和宿主仓库加入同一个仓库组,生成统一的镜像拉取地址(例如http://<nexus-ip>:8081/repository/docker-group/),简化后续配置。
  • 若使用HTTP协议的Nexus仓库,需确认集群节点允许访问该HTTP地址(避免HTTPS证书校验问题)。

2. 配置containerd镜像镜像规则

编辑节点上的containerd主配置文件/etc/containerd/config.toml:

[plugins."io.containerd.grpc.v1.cri".registry]
  config_path = ""

  # 配置镜像源映射(mirror)
  [plugins."io.containerd.grpc.v1.cri".registry.mirrors]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"]
      endpoint = ["http://<nexus-ip>:8081/repository/docker-hub/"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."registry.k8s.io"]
      endpoint = ["http://<nexus-ip>:8081/repository/k8s-registry/"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."k8s.gcr.io"]
      endpoint = ["http://<nexus-ip>:8081/repository/k8s-gcr/"]
    [plugins."io.containerd.grpc.v1.cri".registry.mirrors."quay.io"]
      endpoint = ["http://<nexus-ip>:8081/repository/quay/"]

  # 允许HTTP仓库跳过TLS校验(仅当Nexus用HTTP时配置)
  [plugins."io.containerd.grpc.v1.cri".registry.configs]
    [plugins."io.containerd.grpc.v1.cri".registry.configs."<nexus-ip>:8081".tls]
      insecure_skip_verify = true

重启containerd使配置生效:

systemctl restart containerd

3. Kubernetes集群补充配置

  • 镜像拉取策略:在Pod定义中设置imagePullPolicy: IfNotPresent,减少不必要的镜像拉取请求;若Nexus开启了认证,需创建imagePullSecrets并关联到Pod或Service Account。
  • 组件镜像适配:对于Kubernetes核心组件(如kube-apiserver、kube-proxy),若部署时指定了镜像地址,可直接替换为Nexus仓库地址(例如registry.k8s.io/kube-apiserver:v1.28.0 → <nexus-ip>:8081/repository/k8s-registry/kube-apiserver:v1.28.0);或依赖containerd的mirror规则自动重定向,无需手动修改。

4. 验证配置有效性

  • 在集群节点上执行镜像拉取测试:
    crictl pull docker.io/library/nginx:latest
    
    检查镜像来源是否为Nexus:
    crictl inspecti nginx:latest | grep -i "repo"
    
  • 创建测试Pod:
    apiVersion: v1
    kind: Pod
    metadata:
      name: test-nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        imagePullPolicy: IfNotPresent
    
    查看Pod状态及拉取事件,确认镜像从Nexus获取且Pod正常启动:
    kubectl describe pod test-nginx
    
注意事项
  • 离线迁移前,需提前在Nexus中缓存所有集群所需镜像(包括Kubernetes组件、应用依赖镜像),避免迁移后无法拉取。
  • 确保所有集群节点能访问Nexus服务器的IP和端口,无防火墙或网络策略限制。
  • 若Nexus启用认证,需在containerd配置中添加认证信息,或在Kubernetes中配置imagePullSecrets。

内容的提问来源于stack exchange,提问作者Guillaume

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:20:31