从 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'
另请参阅:
我想在特定的 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'
另请参阅: