Периодический перезапуск pod'ов в k8s
Иногда бывают такие ситуации, когда приложение течет по памяти, надо его периодически перезапускать. Ну или причина может быть совсем другой, но все же. Итак
Диспозиция
- Приложение надо периодически перезапускать
- Приложение задеплоено в 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'
Не забудьте проверить и поменять все имена в этом шаблоне.
Далее применяем это и у вас будет кронджоба, которая будет по расписанию плавно перезапускать весь деплоймент. Такой метод оставляет доступным ваш сервис даже в момент рестарта.
Комментарии: