如何使用nerdctl将镜像推送至K8S集群中的私有Registry Pod
使用nerdctl推送镜像至K8S集群私有Registry的操作指南
环境确认
- 3节点K8S集群(基于Kubespray搭建,containerd为容器运行时,无Docker二进制)
- 私有Registry已部署在
kube-systemnamespace,Pod IP为10.233.88.135(运行于node12节点)
1. 为本地镜像添加私有Registry标签
推送前需将本地应用镜像重新打标签,格式遵循[Registry地址]:[端口]/[镜像名]:[标签]。默认Registry端口为5000,执行命令:
# 替换为你的本地镜像名、标签以及Registry地址 nerdctl tag local-app:v1 10.233.88.135:5000/local-app:v1
2. 配置nerdctl信任HTTP私有Registry
Kubespray部署的Registry默认使用HTTP协议,nerdctl默认拒绝HTTP Registry的请求,需添加信任配置:
方式一:针对containerd全局配置(影响所有使用containerd的工具)
编辑/etc/containerd/config.toml,追加以下配置(若已有对应块则合并):
[plugins."io.containerd.grpc.v1.cri".registry.configs."10.233.88.135:5000".tls] insecure_skip_verify = true
修改后重启containerd:
systemctl restart containerd
方式二:仅针对nerdctl单独配置
在当前用户目录下创建~/.config/nerdctl/config.toml,添加:
[registry."10.233.88.135:5000"] insecure = true
3. 执行镜像推送命令
完成配置后,执行推送命令:
# 替换为你的镜像标签和Registry地址 nerdctl push 10.233.88.135:5000/local-app:v1
4. 验证推送结果
- 拉取镜像验证:
nerdctl pull 10.233.88.135:5000/local-app:v1
- 查看Registry内镜像列表:
curl http://10.233.88.135:5000/v2/_catalog
优化建议
Pod IP会随重启变化,建议使用Registry的ClusterIP(更稳定):
- 查询Registry Service的ClusterIP:
kubectl get svc -n kube-system | grep registry
- 将所有步骤中的
10.233.88.135替换为查询到的ClusterIP即可。
内容的提问来源于stack exchange,提问作者KHEMRAJD
相关产品推荐
相关产品推荐

