Docker image无法在Jenkins Kubernetes建造管道中存活
我们希望使用Jenkins文件中的ArgoCD进行部署(这与我们的目的略有不同,但距离足够近),在完成一些实验后,我们希望尝试使用CLI的官方容器,因此我们将此代码段添加到我们的管道kubernetes yaml中:Docker image无法在Jenkins Kubernetes建造管道中存活,jenkins,kubernetes,jenkins-pipeline,argocd,Jenkins,Kubernetes,Jenkins Pipeline,Argocd,我们希望使用Jenkins文件中的ArgoCD进行部署(这与我们的目的略有不同,但距离足够近),在完成一些实验后,我们希望尝试使用CLI的官方容器,因此我们将此代码段添加到我们的管道kubernetes yaml中: - name: argocdcli image: argoproj/argocli command: - argo args: - version tty: true 不幸的是,让这些容器保持活动状态的通常方法是调用容器中的c
- name: argocdcli
image: argoproj/argocli
command:
- argo
args:
- version
tty: true
不幸的是,让这些容器保持活动状态的通常方法是调用容器中的cat
,而该容器不存在,因此它失败得很惨。实际上,这里唯一的命令是“argo”命令,它没有无限睡眠的方式。(我们将向上游报告此情况,以便修复此问题,但在我们等待时……)
因此,我的问题是,有没有办法向库伯内特斯表明,我们知道这个豆荚不能靠自己维持生存,因此不能立即将其拆除 不幸的是,这是不可能的,因为正如您所说,
argo
是此图像上唯一可用的命令
可以证实:
正如我们在这个输出上看到的,运行argo是这个容器所做的全部工作:
$ kubectl run -i --tty --image argoproj/argocli argoproj1 --restart=Never
argo is the command line interface to Argo
Usage:
argo [flags]
argo [command]
...
您可以选择基于此创建自己的映像,并包括睡眠,因此可以像本例中那样保持其运行:
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
为什么它需要在完成后继续运行?@coderanger显然这就是Jenkins-kubernetes插件在其代理中运行容器的方式。有一个“永远睡眠”命令可以让pod保持运行,然后Jenkins根据需要调用pod中的实际命令。感谢您的关注。我不得不从pod中转储文件系统以进行调查(这确实需要更好的工具)。但问题是,是否有办法让kubernetes忽略这一点并保持pod正常运行?您将命令更改为在后台运行argo,然后使用
cat
或sleep
来保持主进程运行在Kubernetes上无法做到这一点。在kubernetes一侧,没有“保持”、“等待”、“睡眠”或任何其他选项可以用来在完成任务后保持这个吊舱。
apiVersion: v1
kind: Pod
metadata:
name: busybox
namespace: default
spec:
containers:
- name: busybox
image: busybox:1.28
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always