首页 > 解决方案 > 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

标签: dockerjenkinskubernetes

解决方案


您的工作流环境缺少Kubernetes 机密

当 Jenkins 执行时,Kubernetes 使用这些秘密作为凭证来提取注册表的图像。让注册表不受保护总是一个坏习惯,因此您应该停止提供命令行参数来强制使用不安全的注册表。要在管道中使用凭据,您不需要做任何特殊的事情,您可以像访问存储在 Jenkins 中的凭据一样访问它们。

我发现这个kubernetes-credentials-provider-plugin很有用,这里还有另一个工作 的 kubernetes-cd-plugin


推荐阅读