docker - Kubernetes Jenkins 插件 - 等待开始:尝试拉取镜像但失败
问题描述
我正在使用 Jenkins 的 Kubernetes 插件,从我的私人 Docker 注册表中提取似乎有问题。
这是一个“不受信任的”(无 SSL)Harbor 私有注册表。
当我从注册表中获取另一个 Jenkins 管道时,我必须--insecure-registry http://10.3.31.105 --insecure-registry 10.3.31.105
在/etc/systemd/system/docker.service.d/docker-options.conf
文件中进行设置。我想知道为了让 Kubernetes 以类似的方式使用不受信任的注册表,我需要做些什么特别的事情吗?
这是我正在使用的 pod 和我收到的错误:
[svc.jenkins@node1 ~]$ kubectl get pods
NAME READY STATUS RESTARTS AGE
message-service-7d9494544d-fvnkl 0/1 ImagePullBackOff 0 1m
[svc.jenkins@node1 ~]$ kubectl logs message-service-7d9494544d-fvnkl
Error from server (BadRequest): container "message-service" in pod "message-service-7d9494544d-fvnkl" is waiting to start: trying and failing to pull image
但是,Jenkins 作业成功退出:
Finished Kubernetes deployment
Finished: SUCCESS
解决方案
您的工作流环境缺少Kubernetes 机密。
当 Jenkins 执行时,Kubernetes 使用这些秘密作为凭证来提取注册表的图像。让注册表不受保护总是一个坏习惯,因此您应该停止提供命令行参数来强制使用不安全的注册表。要在管道中使用凭据,您不需要做任何特殊的事情,您可以像访问存储在 Jenkins 中的凭据一样访问它们。
我发现这个kubernetes-credentials-provider-plugin很有用,这里还有另一个工作 的 kubernetes-cd-plugin。
推荐阅读
- eve - 我们如何使用 python-eve app db 驱动程序动态更改 mongo_prefix?
- string - Julia:字符串的空向量
- vb.net - VB RS.exe - 未定义数据源
- java - 如何解决 Java 错误“pool-1-thread-xxxx”java.lang.OutOfMemory
- python - Django 1.10 模板 - 在 HTML 模板中打印两个相邻的 python 列表
- ruby-on-rails - 使用 select2 从多选 Rails 表单中预选值
- javascript - 数据表服务器端 ajax 和 sAjaxSource 具有不同的请求参数
- angularjs - AngularJs:未捕获的错误:[$injector:modulerr]
- r - R - 如果 pmax 命令中的列不存在,则跳过它们
- join - Flink:如何在一对多流的连接中立即发出输出