Обеспечение того, чтобы Kubernetes не удалял нижестоящие объекты: подробное руководство

Kubernetes, популярная платформа оркестрации контейнеров, предлагает мощные функции для управления и масштабирования приложений. Однако в некоторых случаях вам может потребоваться запретить Kubernetes удалять нижестоящие объекты, такие как модули, постоянные тома или службы. В этой статье блога мы рассмотрим различные способы достижения этой цели и обеспечения стабильности и доступности ваших приложений.

Метод 1: использование поля «ownerReferences»
Один из способов запретить Kubernetes удалять нижестоящие объекты — установить поле «ownerReferences» в метаданных объекта, который вы хотите защитить. Это устанавливает отношения владения между объектами, гарантируя, что при удалении владельца зависимые объекты не будут удалены. Вот пример в YAML:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  ownerReferences:
    - apiVersion: apps/v1
      kind: Deployment
      name: my-deployment
      uid: <deployment-uid>

Метод 2: использование финализаторов
Kubernetes предоставляет механизм, называемый финализаторами, который позволяет добавлять пользовательскую логику или перехватчики перед удалением объекта. Добавив финализатор к нижестоящему объекту, вы можете запретить Kubernetes удалять его до тех пор, пока ваша пользовательская логика не завершится. Вот пример в YAML:

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
  finalizers:
    - my-finalizer

Метод 3: использование постоянных томов (PVC)
Если вы хотите запретить Kubernetes удалять нижестоящие объекты, такие как постоянные тома (PV) и постоянные тома (PVC), вы можете использовать retainполитика возврата. Если указать политику возврата как retain, PV и PVC не удаляются при удалении связанного объекта. Вот пример определения ПВХ:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
  storageClassName: standard
  volumeMode: Filesystem
  reclaimPolicy: Retain

Метод 4. Использование службы типа LoadBalancer
При использовании службы Kubernetes типа LoadBalancerвы можете предотвратить удаление нижестоящих объектов, таких как модули, используя проверки работоспособности внешнего балансировщика нагрузки.. Настроив проверки работоспособности для непосредственного тестирования модулей, балансировщик нагрузки удалит модуль только в том случае, если он не пройдет проверку работоспособности. Это гарантирует, что здоровые стручки не будут удалены преждевременно. Вот пример фрагмента YAML:

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: LoadBalancer
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Предотвращение удаления нижестоящих объектов Kubernetes имеет решающее значение для поддержания стабильности и доступности ваших приложений. Используя такие методы, как установка поля «ownerReferences», использование финализаторов, указание политик восстановления или настройка проверок работоспособности балансировщика нагрузки, вы можете гарантировать, что зависимые объекты не будут случайно удалены. Понимание этих методов поможет вам разработать надежные и отказоустойчивые развертывания Kubernetes.