杨友山 2019-12-06
如果从private register中拉取image:也可以参考这个地址:
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials
1、在阿里云的容器镜像服务
安装使用文档见如下:
镜像仓库的创建:参考下边的这些文档
https://help.aliyun.com/document_detail/60997.html?spm=a2c4g.11186623.6.552.4ab711be5f17Ph
https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.547.29635696tHx2sO
2、private registries may require keys to read images from them. Credentials can be providerd in several ways!
对于公司内部的项目,一般不建议放到公有开放的镜像仓库,一般会花钱购买docker的私有仓库或者在自己的服务器上搭建私仓,但是不管怎么样,我们要如何使k8s能够拉取下来私有仓库的镜像呢?
a、在node上边登陆阿里云的私有仓库,保证调度过来pod时可以及时拉取到镜像
docker login registry-vpc.cn-shenzhen.aliyuncs.com
zhangyan
123qweasd
如果此时认证失败,请参考文档:
https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.547.29635696xo62rf
之后我们可以在配置文件中查看登陆情况
此时,我们虽然在各node节点可以docker pull命令拉取镜像,但是无法通过k8s创建pod方式拉取镜像
下边我们介绍如何在k8s创建pod时拉取镜像
3、需要在master上生成secret秘钥
kubectl create secret docker-registry summerzhangregsecret --docker-server=registry-vpc.cn-shenzhen.aliyuncs.com --docker-username=zhangyan --docker-password=123qweasd
解释:
summerzhangregsecret :指定秘钥的键名称,可自行定义
--docker-server :指定docker仓库的地址
--docker-username :指定docker仓库账号
--docker-password :指定docker仓库密码
--docker-email: 指定docker邮件地址(选填)
可以在系统中查看一下最新的secret
注意:可以看到当前除了默认的秘钥,还有我们刚才生成的,另外需要注意的是,该秘钥只能在对应的namespace中使用,也就是这里使用的default,如果需要用到其他namespace,比如:test,就需要在生成secret的时候指定namespace的参数: -n test
注意:参考官方
This needs to be done for each pod that is using a private registry.
However, setting of this field can be automated by setting the imagePullSecrets in a serviceAccount resource. Check Add ImagePullSecrets to a Service Account for detailed instructions.
You can use this in conjunction with a per-node .docker/config.json. The credentials will be merged. This approach will work on Google Kubernetes Engine.
创建sa
kubectl create sa summer
将ImagePullSecrets添加到sa
kubectl patch serviceaccount default -p ‘{"imagePullSecrets": [{"name": "summerzhangregsecret"}]}‘
可以用kubectl get sa summer -o yaml来查看sa和secret是否绑定成功
4、在生成pod时的yaml文件中加入秘钥参数。
注意或者可以不新创建sa,把自己创建的secret绑定到serviceaccount 的default上也是可以的,但是我这里自己创建了sa,所以就需要在yaml文件中多一个sa的字段,要不然他就会去找default的sa.
参考官方文档: https://kubernetes.io/docs/concepts/containers/images/#using-a-private-registry
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentials
https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#add-imagepullsecrets-to-a-service-account
注意:
如果以上都已经做完,在拉取镜像的时候还是报没有docker login或者镜像仓库不存在,则看一下,生成的secret的用户名密码是否错误:
kubectl get secret summerzhangregsecret -o yaml
mkdir /secret
cd /secret
echo eyJhdXRocyI6eyJyZWdpc3RyeS12cGMuY24tc2hlbnpoZW4uYWxpeXVuY3MuY29tIjp7InVzZXJuYW1lIjoic3VtbWVyQGxhbnpodXhpbmciLCJwYXNzd29yZCI6IjEyM3F3ZWFzZCIsImVtYWlsIjoiMTU1MTA2ODQ3NjhAMTYzLmNvbSIsImF1dGgiOiJjM1Z0YldWeVFHeGhibnBvZFhocGJtYzZNVEl6Y1hkbFlYTmsifX19 > token
base64 -d token
比对上边解析出的用户名密码和仓库,看是否是正确的。如果不正确,请重新生成secret和重新绑定serviceaccount