刚开始完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启动会报需要验证或者找不到镜像的错误,而无法正常使用镜像。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐