k8s使用阿里云的私有镜像仓库html
若是从private register中拉取image:也能够参考这个地址:
https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/#registry-secret-existing-credentialsnode
一、在阿里云的容器镜像服务
安装使用文档见以下:
镜像仓库的建立:参考下边的这些文档
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.29635696tHx2sOdocker
二、private registries may require keys to read images from them. Credentials can be providerd in several ways!json
对于公司内部的项目,通常不建议放到公有开放的镜像仓库,通常会花钱购买docker的私有仓库或者在本身的服务器上搭建私仓,可是无论怎么样,咱们要如何使k8s可以拉取下来私有仓库的镜像呢?服务器
a、在node上边登录阿里云的私有仓库,保证调度过来pod时能够及时拉取到镜像
docker login registry-vpc.cn-shenzhen.aliyuncs.com
zhangyan
123qweasdapp
若是此时认证失败,请参考文档:
https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.547.29635696xo62rfide
以后咱们能够在配置文件中查看登录状况
此时,咱们虽然在各node节点能够docker pull命令拉取镜像,可是没法经过k8s建立pod方式拉取镜像ui
下边咱们介绍如何在k8s建立pod时拉取镜像
三、须要在master上生成secret秘钥
kubectl create secret docker-registry summerzhangregsecret --docker-server=registry-vpc.cn-shenzhen.aliyuncs.com --docker-username=zhangyan --docker-password=123qweasd --docker-email=15510684768@163.comthis
解释:
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是否绑定成功
四、在生成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