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

    Обзор

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

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

    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 для узлов управляющей плоскости

    ---
    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

    Ограничения и риски для узлов управляющей плоскости

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

    Справка

    Configure a MachineHealthCheck