写在前面

使用阿里云镜像仓库,docker push了之后,使用docker pull可以成功拉取仓库中的镜像。

但是使用k8s的yaml文件,kubectl apply -f xxx.yaml时,一直不成功:

[root@m ~]# kubectl get pods
NAME                               READY   STATUS         RESTARTS   AGE
springboot-demo-857c5b668d-4xx48   0/1     ErrImagePull   0          8s

我们查看pod详情时:

[root@m ~]# kubectl describe pod springboot-demo-857c5b668d-4xx48
Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  27s                default-scheduler  Successfully assigned default/springboot-demo-857c5b668d-4xx48 to w2
  Normal   BackOff    25s                kubelet, w2        Back-off pulling image "registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0"
  Warning  Failed     25s                kubelet, w2        Error: ImagePullBackOff
  Normal   Pulling    14s (x2 over 27s)  kubelet, w2        Pulling image "registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0"
  Warning  Failed     13s (x2 over 26s)  kubelet, w2        Failed to pull image "registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo, repository does not exist or may require 'docker login'
  Warning  Failed     13s (x2 over 26s)  kubelet, w2        Error: ErrImagePull
[r

提示说使用docker login,可是我已经docker login过了呀!

问题解决

查阅资料发现,如果使用私有云docker仓库的话,不光需要docker login,k8s也需要一个secret!

在Kubernetes 集群中配置正确的凭证来访问该镜像仓库

在 Kubernetes 集群中配置正确的凭证来访问镜像仓库,您可以按照以下步骤操作:

1、首先,您需要在集群中创建一个 Kubernetes 密钥(secret),用于存储镜像仓库的凭证。可以使用以下命令创建一个 secret 对象:

kubectl create secret docker-registry <secret-name> \
     --docker-username=<username> \
     --docker-password=<password> \
     --docker-email=<email> \
     --docker-server=<registry>

其中:

<secret-name> 是您为 secret 指定的名称,例如 my-registry-secret。
<username> 是您在镜像仓库的用户名。
<password> 是您在镜像仓库的密码。
<email> 是与您在镜像仓库的账号相关联的电子邮件。
<registry> 是您的镜像仓库地址。
这将创建一个 secret 对象,并将镜像仓库的凭证存储在其中。

2、接下来,您需要在使用该凭证的部署(deployment)或其他相关资源中引用该 secret。可以在相关资源的定义文件中添加以下部分:

spec:
     template:
       spec:
         imagePullSecrets:
         - name: <secret-name>

这将告诉 Kubernetes 使用给定的 secret 来拉取镜像。

3、保存并应用更改后的 YAML 文件:

kubectl apply -f <file-name>.yaml
确保将 <file-name> 替换为实际的 YAML 文件名。
经过以上步骤,Kubernetes 集群就配置了正确的凭证来访问镜像仓库。在部署中指定了正确的 secret,Kubernetes 将在拉取镜像时自动使用该凭证。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐