【问题标题】:Issue Deleting Temporary pods问题删除临时 pod
【发布时间】:2019-12-17 16:30:27
【问题描述】:

我正在尝试使用 helm delete 删除临时 pod 和其他工件。我正在尝试运行此 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

我跑了

oc create -f ./mycron.yaml

这创建了 cronjob

每 5 分钟创建一个 pod,并且作为 cron 作业一部分的 helm 命令运行。

我希望删除以 temppods* 开头的工件/pod 名称。

我在 pod 的日志中看到的是:

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

【问题讨论】:

  • 你确定不需要 sh -c 吗?您正在使用 shell 语法。
  • 扩展@coderanger 所说的内容,使您的命令类似于["/bin/sh"] 和您的参数["-c", "helm delete --purge $(helm ls -a -q temppods.*)"]。它在本地工作,因为您在 shell 中运行,但在您的 cron 作业中,"$(helm ls -a -q temppods.*)" 被逐字作为helm 命令的 RELEASE 参数传递,并且 shell 并没有按照您认为的方式扩展.

标签: kubernetes openshift redhat kubernetes-helm


【解决方案1】:

CronJob 容器规范正在尝试删除一个名为(字面意思)的版本:

$(helm ls -a -q temppods.*)

此版本不存在,并且不符合helms 预期的命名约定。

为什么

alpine/helm:2.9.1 容器映像具有 entrypointhelm。这意味着任何参数都通过exec 直接传递给helm 二进制文件。由于没有运行 shell,因此不会发生 shell 扩展 ($())。

修复

要执行您期望的操作,您可以使用sh,它在 alpine 图像中可用。

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 并不是最可靠的工具。同时运行多个 helm 命令在同一个版本中交互通常会带来灾难,这在表面上看起来很可能。也许在其他方面存在问题来实现您正在实施的这个过程?

【讨论】:

  • 感谢它现在的工作。我已经没有关于我们如何最好地实现这一点的想法了。欢迎提出建议:)
  • 问另一个问题,描述您正在尝试解决的问题以及您目前正在使用的这个过程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多