从 cronjob 中删除 ns 中的所有 pod

Alb*_*rto 1 cron amazon-web-services kubernetes

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

\n
apiVersion: batch/v1\nkind: CronJob\nmetadata:\n  name: restart\n  namespace: foo\nspec:\n  concurrencyPolicy: Forbid\n  schedule: "*/1 * * * *"\n  jobTemplate:\n    spec:\n      backoffLimit: 2\n      activeDeadlineSeconds: 600\n      template:\n        spec:\n          restartPolicy: Never\n          containers:\n            - name: kubectl\n              image: bitnami/kubectl:1.22.3\n              command:\n                - 'kubectl'\n                - 'delete'\n                - '--all'\n                - 'pods'\n                - '--namespace=foo'\n
Run Code Online (Sandbox Code Playgroud)\n

我收到一个错误,知道如何解决它吗?\n这是一个 deamonset 的 Pod(位于 ns foo 中),我想从这个命名空间中删除它foo,知道吗?

\n

这是错误:

\n
\n

`来自服务器的错误(禁止):pod 被禁止:用户\n"system:serviceaccount:foo:default" 无法在命名空间 "foo \xe2\x94\x82\xe2\ 中的 API\ngroup "" 中列出资源 "pods" x94\x82 流已关闭 EOF for\nfoo/restart-27415740--1-495xg (kubectl)

\n
\n

And*_*rew 5

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

为默认 sa 授予任何附加权限通常是一个坏主意,并且默认情况下它没有任何特殊权限,因此您需要创建一个附加服务帐户,授予其删除 pod 的权限,然后配置您的 cronjob 来使用它。

让我们创建 sanamed pod-exterminator,因为它会消灭pod:

kubectl create sa pod-exterminator
Run Code Online (Sandbox Code Playgroud)

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

kubectl create role pod-exterminator --verb=delete,list --resource=pods
Run Code Online (Sandbox Code Playgroud)

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

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

 kubectl create rolebinding --serviceaccount foo:pod-exterminator \
 --role pod-exterminator pod-exterminator
Run Code Online (Sandbox Code Playgroud)

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

kubectl create sa pod-exterminator
Run Code Online (Sandbox Code Playgroud)

也可以看看: