• Русский
  • Настройка MachineHealthCheck

    Обзор

    MachineHealthCheck — это ресурс в Cluster API, который позволяет пользователям определять условия, при которых Machines в кластере следует считать неисправными. MachineHealthCheck задается в управляющем кластере и применяется к конкретному кластеру рабочих нагрузок.

    При создании MachineHealthCheck пользователи указывают тайм-аут для каждого из условий, которые они определяют для проверки Node машины. Если любое из этих условий сохраняется в течение указанного тайм-аута, для Machine будет выполнено восстановление. По умолчанию действие восстановления Machine должно инициировать создание новой Machine для замены отказавшей, однако провайдеры могут подключать более сложные внешние решения для восстановления.

    WARNING

    MachineHealthCheck использует механизм rolling update в Cluster API. Во время rolling update все ранее подключенные диски удаляются и заменяются новыми дисками на вновь созданных машинах. Убедитесь, что никакие функции кластера или рабочие нагрузки не зависят от данных, хранящихся на исходных дисках.

    Предварительные требования

    Прежде чем пытаться настроить MachineHealthCheck, у вас должен быть рабочий управляющий кластер, в котором развернут как минимум один MachineDeployment или KubeadmControlPlane.

    Настройка MachineHealthCheck для MachineDeployment

    Чтобы настроить MachineHealthCheck для MachineDeployment, необходимо создать ресурс MachineHealthCheck в управляющем кластере.

    ---
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: MachineHealthCheck
    metadata:
      name: <machinehealthcheck-name>
      namespace: cpaas-system
    spec:
      clusterName: <cluster-name>
      nodeStartupTimeout: 30m
      selector:
        matchExpressions:
        - key: cluster.x-k8s.io/deployment-name
          operator: Exists
      unhealthyConditions:
      - type: Ready
        status: Unknown
        timeout: 600s
      - type: Ready
        status: "False"
        timeout: 600s

    Настройка MachineHealthCheck для узлов control plane

    ---
    apiVersion: cluster.x-k8s.io/v1beta1
    kind: MachineHealthCheck
    metadata:
      name: <control-plane-machinehealthcheck-name>
      namespace: cpaas-system
    spec:
      clusterName: <cluster-name>
      maxUnhealthy: 1
      selector:
        matchLabels:
          cluster.x-k8s.io/control-plane: ""
      unhealthyConditions:
        - type: Ready
          status: Unknown
          timeout: 600s
        - type: Ready
          status: "False"
          timeout: 600s
    WARNING

    Ограничения и риски для узлов control plane

    • Сбой лидера Etcd при недоступности Kubelet: автоматическое восстановление может завершиться неудачей, если неисправный узел является текущим лидером etcd и служба kubelet на нем не работает. Cluster API пытается перенести лидерство etcd перед удалением узла, но при этом опирается на kubelet, который проксирует запросы к локальному экземпляру etcd. Если kubelet не отвечает, передача лидерства не может быть выполнена, что блокирует ротацию.
    • Риск потери кворума: проявляйте осторожность при настройке MachineHealthCheck для узлов control plane. Агрессивные тайм-ауты или неверная конфигурация могут привести к удалению нескольких узлов control plane, что потенциально нарушит кворум etcd и сделает control plane кластера недоступной.

    Справка

    Configure a MachineHealthCheck