Alb*_*rto 1 cron amazon-web-services kubernetes
我想在特定的 ns 内有一个 cron 作业,它将能够删除所有命名空间 pod,我尝试如下
\napiVersion: 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'\nRun 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
您的 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)
也可以看看:
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |