我想在特定的 ns 中有一個可以洗掉所有命名空間 pod 的 cron 作業,我嘗試如下
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'
我得到一個錯誤,知道如何解決它嗎?這是我想從此命名空間中洗掉的 deamonset(位于 ns foo 中)的 pod foo,知道嗎?
這是錯誤:
`來自服務器的錯誤(禁止):pods被禁止:用戶“system:serviceaccount:foo:default”無法在命名空間“foo”中列出API組“”中的資源“pods”││流關閉了foo/restart-27415740的EOF- -1-495xg (kubectl)
uj5u.com熱心網友回復:
您的 pod 正在使用您運行它的服務帳戶的憑據。如果您沒有指定服務帳戶名稱 - 它將使用default一個,或者system:serviceaccount:foo:default在您的情況下
為默認 sa 賦予任何額外權限通常是個壞主意,并且默認情況下它沒有任何特殊權限,因此您需要創建一個額外的服務帳戶,授予其洗掉 pod 的權限,然后配置您的 cronjob 以使用它.
讓我們創建 sa named pod-exterminator,因為它會消滅pod:
kubectl create sa pod-exterminator
我們需要 create Role,它授予洗掉權限
kubectl create role pod-exterminator --verb=delete,list --resource=pods
我們也在授予list權限,因為沒有它--allswitch 將無法作業,您必須自己指定所有 pod 名稱
然后 a RoleBinding, 授予我們 sa 這些權利(foo 是您的命名空間名稱):
kubectl create rolebinding --serviceaccount foo:pod-exterminator \
--role pod-exterminator pod-exterminator
現在您可以serivceAccountName在 CronJob 規范中指定:
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'
也可以看看:
- https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/
- https://kubernetes.io/docs/reference/access-authn-authz/rbac/
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/425770.html
