CCE集群中使用私有镜像实践
更新时间:2022-12-01
私有镜像指位于私有仓库中的Docker镜像,用户需要使用仓库用户名密码登入(docker login)后才能拉取。在CCE集群中,需要为Pod配置imagePullSecrets,才能够在集群中使用私有镜像启动Pod中的容器。
1. 创建用于私有镜像拉取的secret (imagePullSecrets)
使用kubectl命令行创建,需要先获取
- 镜像仓库登录用户名
- 镜像仓库登录密码
- 邮箱地址
- 镜像仓库服务器地址
创建命令为
Plain Text
1kubectl create secret docker-registry <secret名称> \
2 --docker-server=<镜像仓库服务器地址> \
3 --docker-username=<镜像仓库用户名> \
4 --docker-password=<镜像仓库密码> \
5 --docker-email=<邮箱地址>
关于镜像仓库服务器地址(--docker-server
参数):
- 对于存储在百度智能云容器镜像服务CCR的私有镜像(镜像地址为
registry.baidubce.com/<namespace>/<name>:<tag>
),镜像仓库服务器地址参数须填写为--docker-server='https://registry.baidubce.com'
。 - 对于存储在百度智能云镜像仓库的私有镜像(镜像地址为
hub.baidubce.com/<namespace>/<name>:<tag>
),镜像仓库服务器地址参数须填写为--docker-server='https://hub.baidubce.com'
。 - 其他第三方镜像仓库请按照实际服务器地址进行配置,可参考 社区说明文档 或咨询镜像服务提供商。
注意:
- secret需与引用该secret的pod在同一个k8s命名空间内。
后续推荐使用 CCR,创建 CCR 镜像仓库 Secret 命令如下:
Plain Text
1kubectl create secret docker-registry private-repo-auth \
2 --docker-server=registry.baidubce.com \
3 --docker-username=<镜像仓库用户名> \
4 --docker-password=<镜像仓库密码> \
5 --docker-email=<邮箱地址>
创建完毕后,可以通过kubectl get secret
查看到一个类型为 kubernetes.io/dockerconfigjson
的secret被创建。
Plain Text
1$ kubectl get secret
2NAME TYPE DATA AGE
3default-token-bx894 kubernetes.io/service-account-token 3 4d
4private-repo-auth kubernetes.io/dockerconfigjson 1 2m
2. 在pod spec中指定拉取镜像的secret
在 pod.spec.imagePullSecrets
中指定secret的名称,即可在pod中使用相应的私有镜像。
以创建一个Deployment为例,假设已经在default命名空间中通过上述方式创建了名为private-repo-auth
的secret,对应的Deployment yaml文件如下:
Plain Text
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: my-nginx
5spec:
6 replicas: 1
7 selector:
8 matchLabels:
9 app: my-nginx
10 template:
11 metadata:
12 name: my-nginx
13 labels:
14 app: my-nginx
15 spec:
16 imagePullSecrets:
17 - name: private-repo-auth
18 containers:
19 - name: my-nginx
20 image: nginx
注意:
- 可以在同一个pod中指定多个拉取镜像的secret,用于拉取Pod中声明的来自多个来源的私有镜像。