Изучение системы самовосстановления Kubernetes: методы и примеры кода

Система самовосстановления Kubernetes — это способность Kubernetes автоматически обнаруживать сбои или аномалии в системе и восстанавливаться после них, не требуя ручного вмешательства. Это гарантирует сохранение желаемого состояния приложений и инфраструктуры, определенного в манифестах Kubernetes, а любые отклонения исправляются автоматически.

В Kubernetes есть несколько методов и функций, которые способствуют его возможностям самовосстановления. Вот некоторые из них вместе с примерами кода:

  1. Контроллеры репликации. Контроллеры репликации обеспечивают постоянную работу указанного количества реплик модулей. Если модуль выходит из строя или завершает работу, контроллер репликации автоматически запускает новый модуль для поддержания желаемого количества реплик.
apiVersion: v1
kind: ReplicationController
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app-image
  1. Наборы реплик. Наборы реплик — это версия контроллеров репликации нового поколения. Они предоставляют более продвинутые селекторы для управления репликами модулей и позволяют масштабировать их на основе метрик. Наборы реплик также обрабатывают сбои модулей и обеспечивают поддержание желаемого количества реплик.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app-image
  1. Развертывания. Развертывания предоставляют абстракцию более высокого уровня для управления наборами реплик и развертывания обновлений приложений. Они поддерживают чередующиеся обновления, которые позволяют развертывать устройства без простоев за счет постепенного обновления модулей в кластере.
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app-image
  1. Проверки жизнеспособности. Пробы жизнеспособности используются для проверки работоспособности отдельных модулей. Kubernetes периодически отправляет запросы модулю, и если ответ указывает на сбой, Kubernetes перезапускает модуль.
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app-container
    image: my-app-image
    livenessProbe:
      httpGet:
        path: /healthcheck
        port: 8080
      initialDelaySeconds: 10
      periodSeconds: 15
  1. Проверки готовности. Пробы готовности используются для определения того, готов ли модуль обслуживать трафик. Если модуль не проходит проверку готовности, он удаляется из конечных точек службы до тех пор, пока не пройдет проверку.
apiVersion: v1
kind: Pod
metadata:
  name: my-app
spec:
  containers:
  - name: my-app-container
    image: my-app-image
    readinessProbe:
      httpGet:
        path: /healthcheck
        port: 8080
      initialDelaySeconds: 5
      periodSeconds: 10