首页 > 解决方案 > Kubernetes 无法从 gitlab 注册表中提取图像 unknown-sha256: <4ca..252> 意外提交摘要前提条件

问题描述

过去几周一直在学习 Kubernetes。我最近构建了一个裸机 kubernetes 集群,其中包含 (3) 个主节点和 (3) 个工作节点(容器运行时)。安装了另一个启用了容器注册表的独立裸机 gitlab 服务器。

我使用 docker build 成功构建了一个带有自定义 index.html 的简单 nginx 容器,并将其推送到注册表;到目前为止,一切都很好。

现在我想使用上面构建的图像创建一个简单的 pod。
所以,做了以下步骤。

  1. 创建了一个具有 read_registry 访问权限的部署令牌
  2. 在 Kubernetes 中使用用户名和令牌作为密码创建了一个秘密
  3. 插入imagePullSecrets到部署 yaml 文件中。
  4. kubectl 应用 -f nginx.yaml。

Kubernetes pod 状态保持在ImagePullBackOff.

Failed to pull image "<gitlab-host>:5050/<user>/<project>/nginx:v1": rpc error: code = FailedPrecondition desc = failed to pull and unpack image  
"<gitlab-host>:5050/<user>/<project>/nginx:v1": failed commit on ref "unknown-sha256:4ca40a571e91ac4c425500a504490a65852ce49c1f56d7e642c0ec44d13be252": unexpected commit digest sha256:0d899af03c0398a85e36d5cd7ee9a8828e5618db255770a4a96331785ff26d9c, expected sha256:4ca40a571e91ac4c425500a504490a65852ce49c1f56d7e642c0ec44d13be252: failed precondition. 

故障排除步骤如下。

  1. docker login从另一台服务器工作。
  2. docker pull作品
  3. 在 kubernetes 调度 pod 的工作节点之一中,我做了ctr image pull哪些工作

做了一些谷歌搜索,但找不到任何解决方案。所以,我在这里作为最后的手段来解决这个问题。
感谢我得到的任何帮助。

我的部署 nginx.yml 文件

---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: <gitlab-host>:5050/<username>/<project>/nginx:v1
        imagePullPolicy: IfNotPresent
        name: nginx
      imagePullSecrets:
      - name: regcred

标签: dockerkubernetesgitlabcontainerd

解决方案


我发现了问题。我在注册表部分犯了一个愚蠢的错误/etc/containerd/config.toml,没有提到带有端口号的端点<gitlab-host>:5050
除非您想在 k8s 节点上运行 ctr 命令,否则不需要在 config.toml 中添加私有注册表。


推荐阅读