Kubernetes 删除临时POD的问题
我正在尝试使用helm delete删除临时吊舱和其他工件。我正试图运行这个头盔删除运行的时间表。这是我的独立命令,它有效Kubernetes 删除临时POD的问题,kubernetes,openshift,redhat,kubernetes-helm,Kubernetes,Openshift,Redhat,Kubernetes Helm,我正在尝试使用helm delete删除临时吊舱和其他工件。我正试图运行这个头盔删除运行的时间表。这是我的独立命令,它有效 helm delete--purge$(helm ls-a-q temppods.*) 但是,如果我尝试按如下计划运行此程序,我会遇到问题 以下是mycron.yaml的外观: apiVersion: batch/v1beta1 kind: CronJob metadata: name: cronbox namespace: mynamespace spec:
helm delete--purge$(helm ls-a-q temppods.*)
但是,如果我尝试按如下计划运行此程序,我会遇到问题
以下是mycron.yaml的外观:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: cronbox
namespace: mynamespace
spec:
serviceAccount: cron-z
successfulJobsHistoryLimit: 1
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: cronbox
image: alpine/helm:2.9.1
args: ["delete", "--purge", "$(helm ls -a -q temppods.*)"
env:
- name: TILLER_NAMESPACE
value: mynamespace-build
- name: KUBECONFIG
value: /kube/config
volumeMounts:
- mountPath: /kube
name: kubeconfig
restartPolicy: OnFailure
volumes:
- name: kubeconfig
configMap:
name: cronjob-kubeconfig
我跑
这就创建了cronjob
每隔5分钟就会创建一个pod,并且作为cron作业一部分的helm命令会运行
我希望删除以temppods*开头的工件/吊舱名称
我在吊舱日志中看到的是:
Error: invalid release name, must match regex ^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])+$ and the length must not longer than 53
CronJob容器规范正在尝试删除名为(字面意思)的版本: 此版本不存在,并且未能满足helm的预期命名约定 为什么?
alpine/helm:2.9.1
集装箱图像具有helm
。这意味着任何参数都将通过直接传递到helm
二进制文件。由于没有运行shell,因此不会发生shell扩展($()
)
修理
要实现您的期望,您可以使用阿尔卑斯山图像中提供的sh
sh -uexc 'releases=$(helm ls -a -q temppods.*); helm delete --purge $releases'
在Pod规范中,这转化为:
spec:
containers:
- name: cronbox
command: 'sh'
args:
- '-uexc'
- 'releases=$(helm ls -a -q temppods.*); helm delete --purge $releases;'
掌舵
另外,当集群或发布进入模糊状态时,helm并不是最可靠的工具。在同一版本中同时运行多个头盔命令与之交互通常意味着灾难,从表面上看这似乎是可能的。也许在实现您正在实施的流程的其他方式中存在问题?您确定不需要sh-c吗?您正在使用shell语法。扩展@coderanger所说的内容,使您的命令类似于
[“/bin/sh”]
和args[“-c”,“helm delete--purge$(helm ls-a-q temppods.*)
。它可以在本地工作,因为您在shell中运行,但是在cron作业中,“$(helm ls-a-q temppods.*”
作为helm
命令的释放参数被逐字传递,shell并没有像您想象的那样扩展。感谢它现在的工作。我对如何最好地实施这一点已经没有想法了。建议欢迎:)提出另一个问题,描述您试图解决的问题以及您目前使用的流程。
sh -uexc 'releases=$(helm ls -a -q temppods.*); helm delete --purge $releases'
spec:
containers:
- name: cronbox
command: 'sh'
args:
- '-uexc'
- 'releases=$(helm ls -a -q temppods.*); helm delete --purge $releases;'