Kubernetes 删除临时POD的问题

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删除临时吊舱和其他工件。我正试图运行这个头盔删除运行的时间表。这是我的独立命令,它有效

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;'