Appearance
k8s运维(十)Kubernetes 集群拉取私有仓库镜像
在使用kubectl apply -f web.yaml的时候,出现pod ImagePullBackOff状态,Back-off pulling image "registry.cn-qingdao.aliyuncs.com/jameswu-web/web-deploy-demo:v1"
原因:registry.cn-qingdao.aliyuncs.com/jameswu-web/web-deploy-demo:v1 存放在自建的私有镜像仓库中。kubernetes 并不能直接使用 docker 的 /root/.docker/config.json 凭证拉取这个镜像,需要单独配置自己的凭证来拉取镜像。
一、密钥编排容器
指定Pod 上指定 ImagePullSecrets
// 查看 kubernetes 的 secret
$ kubectl get secret -o wide
NAME TYPE DATA AGE
default-token-4l9j5 kubernetes.io/service-account-token 3 11d
// 创建
$ kubectl create secret docker-registry aliyun-registry \
-n ns-web \
--docker-server=registry.cn-qingdao.aliyuncs.com \
--docker-username=xxx \
--docker-password=xxx \
--docker-email=2746665602@qq.com
kubectl create secret docker-registry foobar-registry
-n default 命名空间
--docker-server=私有镜像仓库地址
--docker-username=用户名
--docker-password=密码
--docker-email=邮箱
//再次查看
$ kubectl get secret -o wide
NAME TYPE DATA AGE
aliyun-registry kubernetes.io/dockerconfigjson 1 16s
default-token-4l9j5 kubernetes.io/service-account-token 3 11d
创建yaml,并指定imagePullSecrets
二、无密钥编排容器
Add ImagePullSecrets to a service account
- 查看验证secret
$ kubectl get secrets aliyun-registry
NAME TYPE DATA AGE
aliyun-registry kubernetes.io/dockerconfigjson 1 18h
- 添加secret到账号
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "aliyun-registry"}]}'
- 上面是自动添加,也可以手动添加
$ kubectl edit serviceaccount/default
修改成:
apiVersion: v1
kind: ServiceAccount
metadata:
creationTimestamp: 2021-07-07T22:02:39Z
name: default
namespace: default
uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6
imagePullSecrets:
- name: aliyun-registry # 新增
- 验证
$ kubectl run nginx --image=nginx --restart=Never
$ kubectl get pod nginx -o=jsonpath='{.spec.imagePullSecrets[0].name}{"\n"}'
验证输出
aliyun-registry