Cluster-manager#

Особенности cluster-manager#

cluster-manager — это специфичное для Kubernetes инсталляций К2 Облака приложение, которое отвечает за изменение количества рабочих узлов в кластере. Это приложение работает с Instance Metadata API и Kubernetes API для обеспечения необходимой интеграции этих компонентов. Cluster-manager отвечает за:

  • мониторинг состояния кластера (Готов / Не готов);

  • безопасное удаление рабочих узлов.

  • информирование о сроке действия сертификатов API в кластере.

Мониторинг состояния кластера#

Cluster-manager постоянно запрашивает информацию о количестве рабочих узлов, зарегистрированных в кластере Kubernetes. Если это значение не соответствует фактическому количеству экземпляров в кластере, то состояние кластера становится Не готов. Такое поведение характерно для кластера во время добавления и удаления рабочих узлов, так как изначально происходит запуск экземпляра, и только спустя некоторое время этот экземпляр регистрируется в качестве рабочего узла кластера. Если количество зарегистрированных рабочих узлов в кластере соответствует количеству запущенных экземпляров, состояние кластера становится Готов.

Cluster-manager регулярно запрашивает информацию о сроке действия сертификатов API для мастер-узлов в кластере. В случае если срок действия сертификата составляет менее двух недель, пользователю направляются оповещения о скором его окончании. Для корректного отображения срока действия сертификатов их необходимо обновлять автоматически с помощью опции Автообновление сертификатов или вручную с помощью утилиты kubeadm. При обновлении вручную все сертификаты, в том числе сертификаты etcd, следует обновлять одновременно, например при помощи команды kubeadm certs renew all. Если сертификаты обновляются выборочно, отслеживание сертификатов может производиться некорректно.

Безопасное удаление узла#

При получении уведомления об удалении рабочего узла cluster-manager, используя Kubernetes API, удаляет рабочий узел из кластера. После успешного удаления рабочего узла из кластера, запускается процесс удаления экземпляра.

Режим обслуживания#

Для обслуживания мастер-узла, например, обновления ядра операционной системы, требуется перевести его в состояние SchedulingDisabled. Cluster-manager синхронизирует состояние SchedulingDisabled между кластером и облаком.

Восстановление недоступных мастер-узлов#

Cluster-manager периодически проверяет доступность мастер-узлов и, в случае их недоступности, запускает восстановление. Под восстановлением подразумевается удаление недоступного экземпляра и создание нового, с сохранением сетевого интерфейса. Мастер-узлы в состоянии SchedulingDisabled не восстанавливаются.

Последствия удаления cluster-manager#

Пользователям не рекомендуется изменять настройки этого приложения и конфигурацию его деплоя в кластер. Пользователь теряет возможность уменьшать количество рабочих узлов в кластере с помощью веб-интерфейса К2 Облака:

  • при удалении cluster-manager из кластера;

  • при перемещении запущенного процесса с мастер-узла на один из рабочих узлов.

Также перестанет работать мониторинг состояния кластера.

Установка в кластер#

Cluster-manager автоматически устанавливается в каждый кластер, который создаётся в сервисе Кластеры Kubernetes К2 Облака. Процесс cluster-manager запускается на мастер-узле кластера.

Используемые настройки
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: cluster-manager
rules:
  - apiGroups:
      - ""
    resources:
      - nodes
    verbs:
      - list
      - get
      - delete
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: cluster-manager
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-manager
subjects:
- kind: ServiceAccount
  name: cluster-manager
  namespace: kube-system
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: cluster-manager
  namespace: kube-system

---
kind: Deployment
apiVersion: apps/v1
metadata:
  labels:
    k8s-app: cluster-manager
  name: cluster-manager
  namespace: kube-system
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: cluster-manager
  template:
    metadata:
      labels:
        k8s-app: cluster-manager
    spec:
      nodeSelector:
        node-role.kubernetes.io/master: ""
      containers:
        - name: cluster-manager
          image: registry.k2.cloud/kaas/kubernetes-manager:v0.7.0
          imagePullPolicy: Always
          env:
            - name: PYTHONUNBUFFERED
              value: "1"
      serviceAccountName: cluster-manager
      tolerations:
        - key: node-role.kubernetes.io/master
          effect: NoSchedule

Обновление cluster-manager#

Пользователям направляются оповещения о необходимости обновления cluster-manager при появления его новой версии. Оповещения отображаются на странице ресурса Кластеры Kubernetes на вкладке Предупреждения. Текст оповещения содержит необходимую для обновления команду kubectl и ссылку на манифест в формате yaml.