如何在Kubernetes中将指定版本Nginx镜像同步至本地/私有仓库(生产安全视角)
如何留存指定版本Nginx镜像并在Kubernetes中稳定使用
没问题,咱们一步步来搞定这个事儿——既要把指定版本的Nginx镜像牢牢存下来,还要确保Kubernetes能稳稳用上,就算官方仓库下架也不怕。
一、先把指定版本镜像拉到本地
首先用Docker命令拉取你需要的x.x版本镜像,执行:
docker pull nginx:x.x
拉取完成后,用下面的命令确认镜像已经在本地:
docker images | grep nginx
你应该能看到nginx:x.x的条目,说明本地已经有备份了。
二、推送到私有仓库(生产环境必备)
本地镜像只能在单台机器用,生产环境的Kubernetes集群有多个节点,必须把镜像放到私有仓库才能共享。步骤如下:
- 给镜像打私有仓库标签
格式是私有仓库地址/镜像名:版本,比如你的私有仓库地址是my-registry.com,就执行:
这个标签是告诉Docker要把镜像推到哪个私有仓库位置。docker tag nginx:x.x my-registry.com/nginx:x.x - 登录私有仓库
执行登录命令,输入你的私有仓库用户名和密码:docker login my-registry.com - 推送镜像到私有仓库
执行推送命令:
推送完成后,你可以登录私有仓库的管理界面(比如Harbor、Docker Registry的web页面)确认镜像已经存在。docker push my-registry.com/nginx:x.x
三、在Kubernetes中使用私有仓库的镜像
接下来配置Kubernetes使用这个私有镜像,分两种情况:
情况1:私有仓库不需要认证(不推荐生产环境用)
直接在Deployment的YAML文件里指定私有仓库的镜像地址就行,比如:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: my-registry.com/nginx:x.x ports: - containerPort: 80
情况2:私有仓库需要认证(生产环境标准配置)
生产环境的私有仓库一般都需要认证,这时候要先创建存储拉取凭证的Secret:
- 创建镜像拉取Secret
执行下面的命令,替换成你的私有仓库信息:kubectl create secret docker-registry regcred \ --docker-server=my-registry.com \ --docker-username=your-username \ --docker-password=your-password \ --docker-email=your-email@example.com - 在Deployment中引用这个Secret
修改Deployment的YAML,添加imagePullSecrets字段,让Kubernetes拉取镜像时使用这个凭证:apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: my-registry.com/nginx:x.x ports: - containerPort: 80 imagePullSecrets: - name: regcred
额外注意点
- 如果只是本地开发测试用Kubernetes(比如kind、minikube),可以不用推私有仓库,直接把本地镜像导入到集群节点里(比如
kind load docker-image nginx:x.x),但生产环境一定要用私有仓库。 - 定期检查私有仓库里的镜像是否存在,最好设置镜像保留策略,防止误删除。
- 如果你的私有仓库是自签名证书,还要给Kubernetes节点配置信任该证书,不然会拉取失败。
内容的提问来源于stack exchange,提问作者Anil Kumar P
相关产品推荐
相关产品推荐

