我的 Kubernetes 集群有内存压力限制,我需要修复(稍后)。
有时从几个被驱逐的豆荚到几十个不等。我创建了一个 Cronjob 规范来清理被驱逐的 pod。我在里面测试了命令,它在 powershell 上运行良好。
但是,我是否在规范中指定命名空间并不重要,将其部署到存在的每个命名空间,脚本似乎并没有删除我驱逐的 pod。
原始脚本:
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: delete-evicted-pods
spec:
schedule: "*/30 * * * *"
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
containers:
- name: kubectl-runner
image: bitnami/kubectl:latest
command: ["sh", "-c", "kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -"]
restartPolicy: OnFailure
我尝试使用关联的 RBAC 创建脚本,但也没有运气。
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
namespace: development
name: cronjob-runner
rules:
- apiGroups:
- extensions
- apps
resources:
- deployments
verbs:
- 'patch'
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: cronjob-runner
namespace: development
subjects:
- kind: ServiceAccount
name: sa-cronjob-runner
namespace: development
roleRef:
kind: Role
name: cronjob-runner
apiGroup: ""
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: sa-cronjob-runner
namespace: development
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: delete-all-failed-pods
spec:
schedule: "*/30 * * * *"
failedJobsHistoryLimit: 1
successfulJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
serviceAccountName: sa-cronjob-runner
containers:
- name: kubectl-runner
image: bitnami/kubectl:latest
command:
- /bin/sh
- -c
- kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
restartPolicy: OnFailure
我意识到我应该定义更好的内存限制,但是在我将 k8s 从 1.14 升级到 1.16 之前,这个功能是有效的。
我做错了什么或遗漏了什么?如果有帮助,我正在 Azure (AKS) 中运行。