原创

Kubernetes使用私有仓库

在使用Kubernetes部署应用程序时,大概率会使用私有docker仓库。其实使用私有仓库的逻辑还是比较简单的,只需要登录私有仓库并pull镜像即可。但是在操作上还是不那么直观的。


设置私有仓库登录信息的方式有两种,导入配置文件docker/config.json和使用命令生成登录信息。这些信息记录在secrets中。


导入配置文件的方式你需要使用docker login命令登录你的私有仓库,登录成功之后会在~/.docker/config.json找到登录成功的配置文件。使用命令行导入配置文件即可

kubectl create secret generic regcred \
    --from-file=.dockerconfigjson=<path/to/.docker/config.json> \
    --type=kubernetes.io/dockerconfigjson


命令行生成登录信息的方式就比较简单了。直接执行命令,kubernetes会自动生成登录信息。

kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>


使用时在pod的yaml中指定imagePullSecrets。

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec:
  containers:
  - name: private-reg-container
    image: <your-private-image>
  imagePullSecrets:
  - name: regcred

这里有一个问题是以后每次新增pod的时候都要配置这个属性,而且这个属性可能会随着环境变化而变化。查看文档可知,在sa上也有一个imagePullSecrets,kubernetes在拉取镜像时会读取这里的值。这样就可以不在pod中配置imagePullSecrets。

kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "regcred"}]}'


在登录信息发生变更的时候只要删除并重新创建secrets,保持名称一致。sa中记录的imagePullSecrets不需要改变。

kubectl delete secrets regcred
kubectl create secret docker-registry regcred --docker-server=<your-registry-server> --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>
正文到此结束
该篇文章的评论功能已被站长关闭