下面的看不懂的话,还可以看下官方文档:https://kubernetes.io/zh/docs/tasks/configure-pod-container/configure-service-account/
=========
Kubernetes集群支持使用私有镜像编排容器。首先需创建密钥用于编排容器,并且可实现无密钥编排。
使用密钥编排容器
- 使用kubectl连接Kubernetes集群的Master节点,详情请参见通过kubectl连接Kubernetes集群。
- 执行以下命令,创建拉取私有镜像的密钥。
kubectl create secret docker-registry [$Reg_Secret] --docker-server=[$Registry] --docker-username=[$Username] --docker-password=[$Password] --docker-email=[$Email]
说明:
- [$Reg_Secret]为密钥的键名称,可自行定义。
- [$Registry]为Docker仓库地址。
- [$Username]为登录Docker仓库的用户名。
- [$Password]为登录Docker仓库的密码。
- [$Email]为邮件地址,该配置项可选填。
- 在编排的YAML文件中加入密钥相关配置项,完成后YAML文件类似如下。
containers: - name: foo image: [$Registry]/abc/test:1.0 imagePullSecrets: - name: [$Reg_Secret]
说明:
-
imagePullSecrets
配置为在声明拉取镜像时指定的密钥。 - 详情信息参见官方文档使用私有仓库。
-
实现无密钥编排
为了避免每次使用私有镜像部署时,都需要引用密钥,您可将secret添加到namespace的default service account中,详情请参见Add ImagePullSecrets to a service account。本例中采用手动配置的方式,修改命名空间的默认服务账户default,从而将此secret作为imagePullSecret,具体步骤如下:
- 执行以下命令,查看之前创建的密钥。
kubectl get secret [$Reg_Secret]
系统显示类似如下。NAME TYPE DATA AGE [$Reg_Secret] kubernetes.io/dockerconfigjson 1 13m
- 依次执行以下命令,将服务账号default的配置导出到
sa.yaml
文件并查看该文件。kubectl get serviceaccounts default -o yaml > ./sa.yaml
系统显示类似如下。
cat sa.yamlapiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default resourceVersion: "243024" ##注意该项 selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-3d50-11e5-b066-42010af0d7b6 secrets: - name: default-token-uudge
- 编辑
sa.yaml
文件,删除原resourceVersion
配置项,增加拉取镜像的密钥配置项imagePullSecrets
。修改后的配置如下所示。apiVersion: v1 kind: ServiceAccount metadata: creationTimestamp: 2015-08-07T22:02:39Z name: default namespace: default selfLink: /api/v1/namespaces/default/serviceaccounts/default uid: 052fb0f4-****-11e5-****-42010af0d7b6 secrets: - name: default-token-uudge imagePullSecrets: ##增加该项 - name: regsecret
- 执行以下命令,用
sa.yaml
配置文件更新default服务账号。kubectl replace serviceaccount default -f ./sa.yaml
系统显示类似如下。serviceaccount "default" replaced
- 本文以编排tomcat为例,执行
kubectl create -f
命令创建Pod。该配置文件如下所示。apiVersion: apps/v1 kind: Deployment metadata: name: tomcat-deployment labels: app: tomcat spec: replicas: 1 selector: matchLabels: app: tomcat template: metadata: labels: app: tomcat spec: containers: - name: tomcat image: [$Registry]/abc/test:1.0 ports: - containerPort: 8080
- 若配置正确,Pod会启动成功。执行如下命令,查看配置项。
kubectl get pod tomcat-XXX -o yaml
系统显示类似如下,确认无密钥编排成功。spec: imagePullSecrets: - nameregsecretey