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

Posted

技术标签:

【中文标题】Kubernetes 无法从 gitlab 注册表中提取图像 unknown-sha256: <4ca..252> 意外提交摘要前提条件【英文标题】:Kubernetes fails to pull images from gitlab registry unknown-sha256: <4ca..252> unexpected commit digest precondition 【发布时间】:2021-10-08 08:28:37 【问题描述】:

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

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

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

    创建了具有 read_registry 访问权限的部署令牌 在 Kubernetes 中使用用户名和令牌作为密码创建了一个秘密 将imagePullSecrets 插入到部署yaml 文件中。 kubectl apply -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. 

已执行故障排除步骤。

    来自另一台服务器的docker login 工作正常。 docker pull 工作 在 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

【问题讨论】:

参数imagePullPolicy是怎么设置的? 我会将deployment.yml文件添加到原帖中 尝试配置imagePullPolicy: Always然后再次部署,这种情况下应该强制拉取镜像 我试过了。然后我将其更改为 IfNotPresent。但同样的错误 按照一些帖子的建议尝试清理/var/lib/containerd/io.containerd.content.v1.content/ingest/,但没有成功 【参考方案1】:

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

【讨论】:

以上是关于Kubernetes 无法从 gitlab 注册表中提取图像 unknown-sha256: <4ca..252> 意外提交摘要前提条件的主要内容,如果未能解决你的问题,请参考以下文章

无法安装 GitLab Kubernetes 托管应用程序 prometheus

Kubernetes 上的 GitLab Auto DevOps 挂起,网络超时,无法执行 yj

如何从gitlab-runner执行滚动更新

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

Jenkins + Gitlab + harbor + Kubernetes实现CI/CD

kubernetes(k8s)Gitlab CI Runner 的安装