关于kubernetes拉取私库镜像需要注意的点

刚开始完k8s,总会遇到很多坑,因为是开源项目,版本总在更新,所以要时刻关注自己使用的版本有哪些不一样的命令和参数。
本次采坑是想让k8s可以在建立pod时可以到私库中拉取镜像。根据官网或网上资料,可以通过创建secret记录私库鉴权信息。具体做法如下:
首先在其中一个node上登录私有仓库(docker 访问私库的配置,这里不做描述)
docker login my.registry
登录成功后会在/root/.docker目录下生产config.json文件,然后执行如下命令:
cat /root/.docker/config.json | base64 -w 0
该命令会将你的认证信息通过base64编码,生成一个编码之后的字符串。
在kubernetes中的master节点中创建secret.yaml:
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
type: kubernetes.io/dockercfg
data:
.dockercfg: ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=

在kubernetes中的master节点创建secret:
kubectl create -f secret.yaml
查看secret是否创建:
kubectl get secret
之后在创建其他元素的时候指定:imagesPullSecrets即可。
例如:
pod:
apiVersion: v1
kind: Pod
metadata:
name: redis-test
containers:

  • name: redis-test
    image: my.registry/redis
    imagePullSecrets:
  • name: myregistrykey
    至此是网上和官网提供的可以让k8s启动pod时访问私库的方法。
    很多人也是可以使用,但由于k8s一直在更新版本,网上很多资料都是建立在旧版本基础上进行验证,在新版本中一些参数有变更。
    本次采坑就是在于编辑secret元素时type和date参数有变动,从k8s 1.8之后,kubernetes.io/dockercfg就变成kubernetes.io/dockerconfigjson,相对应 .dockercfg也变成.dockerconfigjson,所以在使用k8s 1.8以后版本创建secret时,元素要变成如下:
    apiVersion: v1
    kind: Secret
    metadata:
    name: myregistrykey
    data:
    .dockerconfigjson: ewoJImF1dGhzIjogewoJCSJidXMuZ2EiOiB7CgkJCSJhdXRoIjogIllXUnRhVzQ2WVdSdGFXNHhOVGszTlRNPSIKCQl9Cgl9Cn0=
    type: kubernetes.io/dockerconfigjson
    不然在创建完secret后,pod启动会报需要验证或者找不到镜像的错误,而无法正常使用镜像。

猜你喜欢

转载自blog.51cto.com/13748725/2122064