kubernates 拉取私有仓库镜像失败问题

1,518 阅读1分钟

        Kubernetes在自动pull私有镜像时,经常出现问题,导致ImagePullBackOff。即使在节点上使用docker login命令登录私有仓库,还是会失败,因此,kubernates pull私有镜像时,不会依赖docker的相关配置。

        那么,该问题怎么解决???

解决方案一:

        k8s提供了一下命令由于解决这个问题:

kubectl create secret docker-registry my-secret \
  --docker-server=DOCKER_REGISTRY_SERVER \
  --docker-username=DOCKER_USER \
  --docker-password=DOCKER_PASSWORD \
  --docker-email=DOCKER_EMAIL

其中:

1. my-secret为自定义,标识作用
2. server、username、password三个参数必须,email可选
3、其中可添加其他参数,如指定 --namespace参数,如不指定,则添加到default命名空间

那么配置好账户密码后,怎么使用呢?

在Deployment yml文件中配置imagePullSecrets即可

...
    spec:
      imagePullSecrets:
      - name: my-secret
      containers:
      - name: eureka
        image: registry.cn-hangzhou.aliyuncs.com/cloud/eureka:v1.2

...

解决方案二:

docker login命令执行后,会产生/root/.docker/config.json文件,内容为:

{
        "auths": {
                "registry.cn-hangzhou.aliyuncs.com": {
                        "auth": "emNmZmFeY29uOmZfbGNvbjY9MTIxMA=="
                }
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.06.3-ce (linux)"
        }

这个是docker保存的登录凭据,kubernates 可以复制此凭据,创建自己的相关配置。

复制命令为:

kubectl create secret generic my-secret --from-file=/root/.docker/config.json

然后在Deployment yml配置中配置imagePullSecrets即可。

注:

    删除secret请使用一下命令:

kubectl delete secrets my-secret