задание kubernetes cron, которое должно выполняться каждые 10 минут и должно удалять модули, которые находятся в состоянии «Завершение» во всех пространствах имен в кластере?

#kubernetes #jobs #google-kubernetes-engine #kubectl #kubernetes-cronjob

#kubernetes #Вакансии #google-kubernetes-engine #kubectl #kubernetes-cronjob

Вопрос:

задание kubernetes cron, которое должно выполняться каждые 10 минут и должно удалять модули, которые находятся в состоянии «Завершение» во всех пространствах имен в кластере? пожалуйста, помогите мне out….am проблема со скриптом оболочки bash one liner

   apiVersion: batch/v1
  kind: Job
  metadata:
  name: process-item-$ITEM
  labels:
  jobgroup: jobexample
  spec:
  template:
  metadata:
  name: jobexample
  labels:
    jobgroup: jobexample
spec:
  containers:
  - name: c
    image: busybox
    command: ["sh", "-c", "echo Processing item $ITEM amp;amp; sleep 5"]
  restartPolicy: Never
  

Комментарии:

1. Зачем вам это нужно?

2. в моем кластере по какой-то причине модули переходят в состояние завершения, и на самом деле не завершая его, они остаются там, поэтому я не хочу вручную переходить к каждому модулю и удалять модули, которые находятся в состоянии завершения, поэтому я ищу cron, который это делает @cgcgbcbc

3. Вы устанавливаете pod.Spec.TerminationGracePeriodSeconds в своем шаблоне модуля, чтобы завершающие модули уничтожались через определенный период

4. @cgcgbcbc если вы не возражаете, можете ли вы опубликовать образец yaml, в котором есть эта функция?

5. @cgcgbcbc я должен добавить это при развертывании?

Ответ №1:

Перечислите все завершающие модули во всех пространствах имен в формате {namespace}.{name}

 kubectl get pods --field-selector=status.phase=Terminating --output=jsonpath='{range .items[*]}{.metadata.namespace}{"."}{.metadata.name}{"n"}{end}' --all-namespaces=true
  

Учитывая имя модуля и его пространство имен, его можно принудительно удалить с помощью

 kubectl delete pods <pod> --grace-period=0 --force --ns=<namespace>
  

В одной строке

 for i in `kubectl get pods --field-selector=status.phase=Terminating --output=jsonpath='{range .items[*]}{.metadata.namespace}{"."}{.metadata.name}{"n"}{end}' --all-namespaces=true`; do kubectl delete pods ${i##*.} --grace-period=0 --force --ns=${i%%.*}; done