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

