1. 创建 Docker 注册表的 Secret
首先,创建一个类型为 dockerconfigjson
的 Secret
,用于存储 Docker 注册表的认证信息。
方法 1: 使用 Docker CLI 和 kubectl
不适用于阿里云格式不一样
- 登录 Docker 注册表:
bash
docker login <your-registry-server>
这会生成一个包含认证信息的配置文件,通常位于 ~/.docker/config.json
。
- 创建 Secret:
bash
kubectl -n prom create secret generic myregistrykey \
--from-file=.dockerconfigjson=$HOME/.docker/config.json \
--type=kubernetes.io/dockerconfigjson
方法 2: 手动创建 YAML 文件
不适用于阿里云格式不一样
- Base64 编码
config.json
文件:
bash
cat ~/.docker/config.json | base64 -w 0
- 创建 Secret YAML 文件:
yaml
apiVersion: v1
kind: Secret
metadata:
name: myregistrykey
data:
.dockerconfigjson: <base64-encoded-json-string>
type: kubernetes.io/dockerconfigjson
- 应用 Secret:
bash
kubectl apply -f myregistrykey-secret.yaml
2. 将 imagePullSecrets
引用到 Pod
在创建 Pod 时,你需要在 Pod 的 YAML 文件中使用 imagePullSecrets
字段引用这个 Secret
。
Pod YAML 示例
yaml
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- name: mycontainer
image: <your-registry-server>/myimage:mytag
imagePullSecrets:
- name: myregistrykey
详细说明:
image
** 字段**: 指定容器要拉取的镜像,格式为<your-registry-server>/myimage:mytag
。imagePullSecrets
** 字段**: 用于指定拉取私有镜像时使用的Secret
。它是一个数组,因此你可以指定多个Secret
。
3. 设置命名空间的默认 imagePullSecrets
如果你希望在某个命名空间中默认使用某个 imagePullSecrets
,你可以修改该命名空间的 ServiceAccount
。
修改默认 ServiceAccount
yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: default
namespace: mynamespace
imagePullSecrets:
- name: myregistrykey
应用 ServiceAccount 配置:
bash
kubectl apply -f serviceaccount.yaml
4. 验证配置
创建 Pod 后,可以通过以下命令查看 Pod 是否正常启动,或者查看其事件日志,以确认镜像是否成功拉取:
bash
kubectl get pods
kubectl describe pod mypod