从 cronjob 中删除 ns 中的所有 pods

delete all pods in ns from cronjob

我想在特定的 ns 中有一个 cron 作业,它将能够删除所有命名空间 pod,我试过如下

apiVersion: batch/v1
kind: CronJob
metadata:
  name: restart
  namespace: foo
spec:
  concurrencyPolicy: Forbid
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      backoffLimit: 2
      activeDeadlineSeconds: 600
      template:
        spec:
          restartPolicy: Never
          containers:
            - name: kubectl
              image: bitnami/kubectl:1.22.3
              command:
                - 'kubectl'
                - 'delete'
                - '--all'
                - 'pods'
                - '--namespace=foo'

我收到一个错误,知道如何解决吗? 这是我想从此命名空间 foo 中删除的 deamonset(在 ns foo 中)的 pods,知道吗?

这是错误:

`Error from server (Forbidden): pods is forbidden: User "system:serviceaccount:foo:default" cannot list resource "pods" in API group "" in the namespace "foo ││ Stream closed EOF for foo/restart-27415740--1-495xg (kubectl)

您的 pod 使用的是您 运行 作为服务帐户的凭据。如果您没有指定服务帐户名称 - 它将使用 default 一个,或者在您的情况下使用 system:serviceaccount:foo:default

给默认sa任何额外的权限通常是个坏主意,默认情况下它没有任何特殊权限,所以你需要创建一个额外的服务帐户,授予它删除的权限pods 然后配置您的 cronjob 以使用它。

让我们创建一个名为 pod-exterminator 的 sa,因为它将 消灭 pods:

kubectl create sa pod-exterminator

我们需要创建 Role,它授予删除权限

kubectl create role pod-exterminator --verb=delete,list --resource=pods

我们也授予 list 权限,因为没有它 --all 开关将无法工作,您必须自己指定所有 pod 名称

然后 RoleBinding,授予我们 sa 这些权利(foo 是您的命名空间名称):

 kubectl create rolebinding --serviceaccount foo:pod-exterminator \
 --role pod-exterminator pod-exterminator

现在您可以在 CronJob 规范中指定 serivceAccountName

apiVersion: batch/v1
kind: CronJob
metadata:
  name: restart
  namespace: foo
spec:
  concurrencyPolicy: Forbid
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      backoffLimit: 2
      activeDeadlineSeconds: 600
      template:
        spec:
          serviceAccountName: pod-exterminator
          restartPolicy: Never
          containers:
            - name: kubectl
              image: bitnami/kubectl:1.22.3
              command:
                - 'kubectl'
                - 'delete'
                - '--all'
                - 'pods'
                - '--namespace=foo'

另请参阅: