来自服务器的错误(BadRequest):pod“espace-client-client”中的容器“espace-client-client”正在等待启动:尝试拉取映像但失败

问题描述 投票:0回答:2

一个月前,我在 Kubernetes 产品集群上部署了我的第一个应用程序。

我可以从 gitlab 注册表部署我的 2 个服务(前/后)。

现在,我将一个新的 docker 镜像推送到 gitlab 注册表,并希望将其重新部署到产品中:

这是我的部署文件:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  annotations:
    reloader.stakater.com/auto: "true"
  labels:
    app: espace-client-client
  name: espace-client-client
  namespace: espace-client
spec:
  replicas: 1
  strategy: {}
  template:
    metadata:
      labels:
        app: espace-client-client
    spec:
      containers:
      - envFrom:
        - secretRef:
           name: espace-client-client-env
        image: registry.gitlab.com/xxx/espace_client/client:latest
        name: espace-client-client
        ports:
        - containerPort: 3000
        resources: {}
      restartPolicy: Always
      imagePullSecrets:
        - name: gitlab-registry

我不知道里面是什么

gitlab-registry
。我自己没有做,而且做这件事的人离开了工作人员:(不过,我拥有所有权限,所以,我只需要知道要在秘密中放入什么,也许删除它并重新创建它。

这个秘密似乎是基于我的.docker/config.json

➜  espace-client git:(k8s) ✗ kubectl describe secrets gitlab-registry                                                                                
Name:         gitlab-registry
Namespace:    default
Labels:       <none>
Annotations:  <none>

Type:  kubernetes.io/dockerconfigjson

Data
====
.dockerconfigjson:  174 bytes

我尝试删除现有的秘密,使用

注销
docker logout registry.gitlab.com
kubectl delete secret gitlab-registry

然后再次登录:

docker login registry.gitlab.com -u myGitlabUser
Password: 
Login Succeeded

并使用以下命令拉取图像:

docker pull registry.gitlab.com/xxx/espace_client/client:latest

有效。

文件:

~/.docker/config.json
看起来很奇怪:

{
        "auths": {
                "registry.gitlab.com": {}
        },
        "HttpHeaders": {
                "User-Agent": "Docker-Client/18.09.6 (linux)"
        },
        "credsStore": "secretservice"
}

它似乎不包含任何凭证...

然后我重新创造我的秘密

kubectl create secret generic gitlab-registry \
    --from-file=.dockerconfigjson=/home/julien/.docker/config.json \
    --type=kubernetes.io/dockerconfigjson

我也尝试这样做:

kubectl create secret docker-registry gitlab-registry --docker-server=registry.gitlab.com --docker-username=<your-name> --docker-password=<your-pword> --docker-email=<your-email>

并再次部署:

kubectl rollout restart deployment/espace-client-client -n espace-client

但我仍然有同样的错误:

Error from server (BadRequest): container "espace-client-client" in pod "espace-client-client-6c8b88f795-wcrlh" is waiting to start: trying and failing to pull image
docker kubernetes gitlab docker-registry kubernetes-secrets
2个回答
1
投票

您必须更新

gitlab-registry
密钥,因为此项用于让 Kubelet 使用凭证拉取 protected 镜像。

请使用

kubectl -n yournamespace delete secret gitlab-registry
删除旧密码,然后输入凭据重新创建它:

kubectl -n yournamespace create secret docker-registry my-secret --docker-server=DOCKER_REGISTRY_SERVER --docker-username=DOCKER_USER --docker-password=DOCKER_PASSWORD[ --docker-email=DOCKER_EMAIL]

哪里: -

DOCKER_REGISTRY_SERVER
是 GitLab Docker 注册表实例 -
DOCKER_USER
是拉取镜像的机器人账户的用户名 -
DOCKER_PASSWORD
是机器人账户附带的密码

您可以忽略

docker-email
,因为它不是强制性的(请注意方括号)。


0
投票

另一个可能导致镜像拉取失败的原因是机器的系统时间存在偏差。此偏差可能会导致在镜像拉取中执行的 tls 证书验证出现错误。您可以查看当前系统时间:

date
.

快速解决方法是手动设置正确的时间:

sudo date -s '2023-10-03 12:34:56'
。或者,您可以设置时间同步

要检查这是否确实是问题所在,您还可以尝试使用容器运行时 CLI 来拉取映像,例如

crictl pull hello-world
。如果这引发了有关 tls 无法验证证书的错误,则很可能是系统时间偏差造成的。

© www.soinside.com 2019 - 2024. All rights reserved.