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
中犯了一个愚蠢的错误,并且没有提及端口号为<gitlab-host>:5050
的端点。
除非您想在 k8s 节点上运行 ctr 命令,否则不需要在 config.toml 中添加私有注册表。
【讨论】:
以上是关于Kubernetes 无法从 gitlab 注册表中提取图像 unknown-sha256: <4ca..252> 意外提交摘要前提条件的主要内容,如果未能解决你的问题,请参考以下文章
无法安装 GitLab Kubernetes 托管应用程序 prometheus
Kubernetes 上的 GitLab Auto DevOps 挂起,网络超时,无法执行 yj
Jenkins + Gitlab + harbor + Kubernetes实现CI/CD