Kubernetes удалить работу под - PullRequest
0 голосов
/ 11 октября 2018

Я хотел знать, возможно ли иметь работу в Кубернетесе, которая будет выполняться каждый час и будет удалять определенные модули.Мне нужно это как временную остановку, чтобы исправить проблему.

Ответы [ 3 ]

0 голосов
/ 11 октября 2018

Возможно, существует другой обходной путь.

Вы можете создать датчик жизнеспособности (очень просто, если у вас его еще нет), который не запускается через час и всегда терпит неудачу.

livenessProbe:
  tcpSocket:
    port: 1234
  initialDelaySeconds: 3600

Это подождет 3600 секунд (1 час), а затем попытается подключиться к порту 1234, и, если это не удастся, будет убит контейнер (не модуль!).

0 голосов
/ 11 октября 2018

Да, это возможно.

Я думаю, что самый простой способ - просто вызывать API Kubernernes прямо с работы.Учитывая, что RBAC настроен, что-то вроде этого:

apiVersion: batch/v1
kind: Job
metadata:
  name: cleanup
spec:
  serviceAccountName: service-account-that-has-access-to-api
  template:
    spec:
      containers:
      - name: cleanup
        image: image-that-has-curl
        command:
        - curl
        - -ik 
        - -X
        - DELETE
        - -H
        - "Authorization: Bearer $(cat /var/run/secrets/kubernetes.io/serviceaccount/token)"
        - https://kubernetes.default.svc.cluster.local/api/v1/namespaces/{namespace}/pods/{name}
      restartPolicy: Never
  backoffLimit: 4

Вы также можете запустить прокси-сервер kubectl для подключения к кластеру, используя localhost.Дополнительная информация здесь

Или даже запуск простого kubectl в модуле также является опцией: Kubernetes - Как запускать команды kubectl внутри контейнера?

0 голосов
/ 11 октября 2018

Используйте CronJob ( 1 , 2 ) для запуска задания каждый час.

API K8S доступен из Pod ( 3 * 1008)*) с соответствующими разрешениями.Когда Pod создается, ему присваивается default ServiceAccount ( 4 ) по умолчанию.default ServiceAccount не имеет RoleBinding и, следовательно, default ServiceAccount, а также Pod не имеет разрешений для вызова API.

Если роль (с разрешениями) создана и сопоставлена ​​с default ServiceAccount, то всеСтручки по умолчанию получат эти разрешения.Итак, лучше создать новый ServiceAccount, а не изменять default ServiceAccount.

Итак, вот шаги для RBAC ( 5 )

  • СозданиеServiceAccount
  • Создание роли с надлежащими разрешениями (удаление модулей)
  • Сопоставление ServiceAccount с ролью с использованием RoleBinding
  • Используйте вышеуказанный ServiceAccount в определении Pod
  • Создайте модуль / контейнер с кодом / командами для удаления модулей

Я знаю, что это немного сбивает с толку, но K8S работает именно так.

...