Kubernetes theory
October 2, 2022

Liveness Probe, Readiness Probe

Пробы - это хелсчеки состояния ресурсов. С их помощью можно проверить жив ли контейнер в поде или ресурс в контейнере.

Liveness Probe - контролирует состояние приложения во время его жизни. Работает постоянно.

Readness Probe - проверяет готово ли приложение принимать трафик. Если не готово, оно убирается из балансировки. Работает постоянно.

       containers:
        - name: nginx
          image: nginx:latest
          livenessProbe:
            failureThreshold: 3
            successThreshold: 1
            httpGet:
              path: /
              port: 80
            periodSeconds: 10
            timeoutSeconds: 1
            initialDelaySeconds: 5
          readinessProbe:
            failureThreshold: 3
            successThreshold: 1
            exec:
              command:
              - curl
              - http://127.0.0.1:80
            periodSeconds: 10
            timeoutSeconds: 1
            initialDelaySeconds: 5

httpGet: - этот блок из двух проверок. Первая по сути является curl к корневой директории. А вторая проверка доступности 80 порта.
exec: - это почти аналог httpGet, но здесь прямо передается команда для выполнения.
failureThreshold: 3 - проверка проводится 3 раза, прежде чем под признается недоступным.
periodSeconds: 10 - говорит о том, как часто должна проводиться эта проверка. Здесь она проводится раз в 10 секунд.
successThreshold: 1 - достаточно одной успешной пробы, чтобы считать, что с приложением все ОК.
timeoutSeconds: 1 - таймаут при ожидании ответа.
initialDelaySeconds: 5 - первую пробу делаем спустя 5 секунд. У тяжелых приложений, например, БД или Java приложение имеет смысл выставить это значение чуть больше, чтобы успело стартануть пока его не кильнули.

Deployment с хелсчеками:

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cam-nginx
  namespace: default
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
        - name: cam-nginx
          image: nginx:latest
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 3
            httpGet:
              path: /
              port: 80
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
            initialDelaySeconds: 5
          readinessProbe:
            failureThreshold: 3
            exec:
              command:
              - curl
              - http://127.0.0.1:80
            periodSeconds: 10
            successThreshold: 1
            timeoutSeconds: 1
            initialDelaySeconds: 5
      restartPolicy: Always
EOF