В инструкции описано, как настроить K8s Cleaner для очистки кластера от неиспользуемых или неработающих артефактов на примере автоматического удаления подов в нерабочем состоянии.
Аналогично настраивается очистка и для других типов ресурсов Kubernetes, таких как неиспользуемые сервисы, устаревшие Deployment, неактуальные ConfigMap или секреты.
Перед началом работы
У вас должен быть создан кластер Managed Kubernetes и группа узлов.
В кластер установите плагин K8s Cleaner.
Проверьте, что K8s Cleaner установлен корректно:
kubectl get pods -n k8s-cleanerПод должен быть в статусе «Running».
Шаг 1. Создайте Cleaner с правилами уборки кластера
Cleaner автоматически удаляет поды в состоянии «Failed», у которых хотя бы один контейнер завершился с причиной «Error» и ненулевым кодом выхода exitCode != 0.
Создайте файл cloudru-cleaner.yaml и сохраните следующий манифест:
apiVersion: apps.projectsveltos.io/v1alpha1kind: Cleanermetadata:name: cloudru-error-state-podsspec:schedule: "*/10 * * * *"resourcePolicySet:resourceSelectors:- kind: Podgroup: ""version: v1excludeDeleted: falseevaluate: |function evaluate()hs = {}hs.matching = false-- Check if pod phase is Failedif obj.status.phase == "Failed" then-- Check container status for Error terminationif obj.status.containerStatuses thenfor _, containerStatus in ipairs(obj.status.containerStatuses) doif containerStatus.state and containerStatus.state.terminated then-- Match only pods terminated with reason "Error" and exit code != 0if containerStatus.state.terminated.reason == "Error" andcontainerStatus.state.terminated.exitCode ~= 0 thenhs.matching = truebreakendendendendendreturn hsendaction: Scannotifications:- name: reporttype: CleanerReportГде:
spec.schedule — расписание для выполнения очистки в CRON-формате.
Запись */10 * * * * означает, что поиск объектов для очистки выполняется каждые 10 минут.
spec.resourcePolicySet.resourceSelectors.kind — тип ресурса для уборки.
В примере проверяются поды.
spec.resourcePolicySet.resourceSelectors.evaluate — Lua-скрипт, который реализует логику фильтрации.
В примере:
выполняется проверка, что под находится в статусе «Failed»;
среди контейнеров выполняется поиск таких, которые завершились с причиной «Error» и ненулевым exit code;
возвращается флаг hs.matching — если true, под попадет под действие Cleaner.
spec.action — действие, которое нужно выполнить для найденных ресурсов.
Возможные значения:
Delete — удалить соответствующие объекты из кластера.
Scan — объекты, соответствующие правилу, фиксируются в отчете.
Режим подходит для тестирования и отладки.
В терминале или PowerShell выполните команду:
kubectl apply -f cloudru-cleaner.yamlРезультат:
cleaner.apps.projectsveltos.io/cloudru-error-state-pods created
Шаг 2. Создайте под
Создайте файл cloudru-error-demo-pod.yaml и сохраните следующий манифест:
apiVersion: v1kind: Podmetadata:name: error-demo-podnamespace: defaultspec:containers:- name: demo-containerimage: emk8s.cr.cloud.ru/busyboxcommand: ["sh", "-c", "exit 1"]restartPolicy: NeverВ терминале или PowerShell выполните команду:
kubectl apply -f cloudru-error-demo-pod.yamlТакой под отработает и перейдет в статус «Failed», а его контейнер в state.terminated.reason: Error с exitCode: 1.
Проверьте его статус:
kubectl describe podsПримерный результат:
Labels: <none>Annotations: <none>Status: Failed...State: TerminatedReason: ErrorExit Code: 1...Подождите 10–15 минут.
Шаг 3. Проверьте отчет
В терминале или PowerShell выполните команду:
kubectl get reportРезультат:
cloudru-error-state-pods 2m29sЧтобы посмотреть подробный отчет, выполните команду:
kubectl describe report cloudru-error-state-pods
- Перед началом работы
- Шаг 1. Создайте Cleaner с правилами уборки кластера
- Шаг 2. Создайте под
- Шаг 3. Проверьте отчет