Периодический перезапуск pod'ов в k8s

Иногда бывают такие ситуации, когда приложение течет по памяти, надо его периодически перезапускать. Ну или причина может быть совсем другой, но все же. Итак

Диспозиция

  1. Приложение надо периодически перезапускать
  2. Приложение задеплоено в kubernetes

Реализация

RBAC

Создаем сервисный аккаунт, роль и привязку:

---
kind: ServiceAccount
apiVersion: v1
metadata:
  name: test-restart
  namespace: test-ns
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: test-restart
  namespace: test-ns
rules:
  - apiGroups: ["apps", "extensions"]
    resources: ["deployments"]
    resourceNames: ["your-deployment-name"]
    verbs: ["get", "patch", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: test-restart
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: test-restart
subjects:
  - kind: ServiceAccount
    name: test-restart
    namespace: test-ns

CronJob

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: test-restart
  namespace: test-ns
spec:
  concurrencyPolicy: Forbid
  schedule: '0 8 * * *' # cron spec of time, here, 8 o'clock
  jobTemplate:
    spec:
      backoffLimit: 2
      activeDeadlineSeconds: 600
      template:
        spec:
          serviceAccountName: test-restart
          restartPolicy: Never
          containers:
            - name: kubectl
              image: bitnami/kubectl
              command:
                - 'kubectl'
                - 'rollout'
                - 'restart'
                - 'deployment/your-deployment-name'

Не забудьте проверить и поменять все имена в этом шаблоне.

Далее применяем это и у вас будет кронджоба, которая будет по расписанию плавно перезапускать весь деплоймент. Такой метод оставляет доступным ваш сервис даже в момент рестарта.

Поделиться: DiasporaTwitterFacebookLinkedInHackerNewsEmailReddit

Похожие записи:



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