docker - Kubernetes 无法从 gitlab 注册表中提取图像 unknown-sha256: <4ca..252> 意外提交摘要前提条件
问题描述
过去几周一直在学习 Kubernetes。我最近构建了一个裸机 kubernetes 集群,其中包含 (3) 个主节点和 (3) 个工作节点(容器运行时)。安装了另一个启用了容器注册表的独立裸机 gitlab 服务器。
我使用 docker build 成功构建了一个带有自定义 index.html 的简单 nginx 容器,并将其推送到注册表;到目前为止,一切都很好。
现在我想使用上面构建的图像创建一个简单的 pod。
所以,做了以下步骤。
- 创建了一个具有 read_registry 访问权限的部署令牌
- 在 Kubernetes 中使用用户名和令牌作为密码创建了一个秘密
- 插入
imagePullSecrets
到部署 yaml 文件中。 - 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.
故障排除步骤如下。
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
解决方案
我发现了问题。我在注册表部分犯了一个愚蠢的错误/etc/containerd/config.toml
,没有提到带有端口号的端点<gitlab-host>:5050
。
除非您想在 k8s 节点上运行 ctr 命令,否则不需要在 config.toml 中添加私有注册表。
推荐阅读
- react-native - 无法解析模块`@expo/vector-icons/fonts/Ionicons.ttf`
- c - printf 函数在输入之前不起作用
- php - 如何将 DI 容器注入控制器?
- g++ - avr-strip:无法识别输入文件“libfoo.a(bar.cpp.o)”的格式
- google-sheets - 如果每个收件人都满足某个单元格值,则向收件人发送电子邮件
- java - 在 Windows 命令提示符下运行 Java 文件不起作用
- node.js - Openui5 jquery POST 到 Node.js 服务器包含服务器端的空请求正文
- excel - 通过遍历 URL 列表从网站中提取 HTML 代码
- javascript - module.exports 函数未在另一个文件的 require 后定义
- logstash - 阻止未授权并区分用户