Обновление и управление версиями

Процесс обновления control plane в DKP полностью автоматизирован.

  • В DKP поддерживаются последние пять версий Kubernetes.
  • Control plane можно откатывать на одну минорную версию назад и обновлять на несколько версий вперёд — шаг за шагом, по одной версии за раз.
  • Patch-версии (например, 1.27.31.27.5) обновляются автоматически вместе с версией Deckhouse, и управлять этим процессом нельзя.
  • Minor-версии задаются вручную в параметре kubernetesVersion в ресурсе ClusterConfiguration.

Изменение версии Kubernetes

  1. Откройте редактирование ClusterConfiguration:

    d8 system edit cluster-configuration
    
  2. Установите желаемую версию Kubernetes (kubernetesVersion):

    apiVersion: deckhouse.io/v1
    kind: ClusterConfiguration
    cloud:
      prefix: demo-stand
      provider: Yandex
    clusterDomain: cloud.education
    clusterType: Cloud
    defaultCRI: Containerd
    kubernetesVersion: "1.30"
    podSubnetCIDR: 10.111.0.0/16
    podSubnetNodeCIDRPrefix: "24"
    serviceSubnetCIDR: 10.222.0.0/16
    
  3. Сохраните изменения.
  4. Дождитесь окончания обновления. Отслеживать ход обновления можно с помощью команды d8 k get no. Обновление можно считать завершенным, когда в выводе команды у каждого узла кластера в колонке VERSION появится обновленная версия.

Мониторинг процесса обновления Kubernetes

Модуль control-plane-manager включает компонент update-observer, который предоставляет актуальную информацию о процессе обновления Kubernetes в кластере.

Компонент update-observer:

  • Читает конфигурацию кластера из секрета d8-cluster-configuration;
  • Отслеживает версии kubelet на всех узлах через nodeInfo.kubeletVersion;
  • Собирает версии всех экземпляров control plane по аннотации control-plane-manager.deckhouse.io/kubernetes-version;
  • Создаёт и обновляет ConfigMap d8-cluster-kubernetes в пространстве имён kube-system с подробным статусом обновления.

В ConfigMap d8-cluster-kubernetes отображаются:

  • Статус компонентов — версии компонентов control plane (kube-apiserver, kube-scheduler, kube-controller-manager) на каждом master-узле;
  • Прогресс обновления узлов — сколько узлов уже обновлено и сколько всего узлов должно быть обновлено;
  • Целевая и текущая версии — желаемая версия из конфигурации и фактическое состояние кластера во время обновления;
  • Расхождение версий — информация о компонентах, работающих не на целевой версии (в том числе на версии выше целевой);
  • Списки версий:
    • supportedVersions — минорные версии Kubernetes, поддерживаемые в текущем релизе DKP;
    • availableVersions — версии, доступные для выбора при обновлении или понижении в данном кластере. Набор ограничен максимальной когда-либо установленной минорной версией и правилом одного минорного шага при откате;
    • automaticVersion — минорная версия, которая будет использована при режиме обновления Automatic.

В фазе ControlPlaneUpdating поле status.progress отражает общий прогресс обновления с учётом промежуточных минорных версий. При многошаговом обновлении (например, 1.33 → 1.35) процент растёт по мере завершения каждого шага, а не только когда все компоненты control plane достигнут финальной целевой версии.

Минорные версии в ConfigMap (spec, status, а также метки k8s-version и max-k8s-version) задаются в том же формате, что и в ClusterConfiguration — без префикса v (например, "1.33").

Это позволяет в реальном времени видеть, какие компоненты обновляются, на каком этапе находится процесс, и не остановилось ли обновление на каком-либо узле или компоненте.

Для просмотра статуса обновления выполните команду:

d8 k get configmap d8-cluster-kubernetes -n kube-system -o yaml

Примеры содержимого ConfigMap

В data.spec и data.status хранится YAML с полем spec (целевая версия и режим обновления) и полем status (текущее состояние). Ниже приведены примеры для разных сценариев.

Кластер в актуальном состоянии (3 master-узла, 3 worker-узла)

apiVersion: v1
data:
  spec: |
    desiredVersion: "1.32"
    updateMode: Manual
  status: |
    currentVersion: "1.32"
    supportedVersions:
    - "1.30"
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    availableVersions:
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    automaticVersion: "1.33"
    phase: UpToDate
    controlPlane:
    - name: master-1
      phase: UpToDate
      components:
        kube-apiserver: "1.32"
        kube-controller-manager: "1.32"
        kube-scheduler: "1.32"
    - name: master-2
      phase: UpToDate
      components:
        kube-apiserver: "1.32"
        kube-controller-manager: "1.32"
        kube-scheduler: "1.32"
    - name: master-0
      phase: UpToDate
      components:
        kube-apiserver: "1.32"
        kube-controller-manager: "1.32"
        kube-scheduler: "1.32"
    nodes:
      desiredCount: 6
      upToDateCount: 6
kind: ConfigMap
metadata:
  annotations:
    cause: idle
    lastReconciliationTime: "2026-02-02T01:13:05Z"
    lastUpToDateTime: "2026-01-30T16:26:36Z"
  creationTimestamp: "2026-01-16T16:48:45Z"
  labels:
    heritage: deckhouse
    k8s-version: "1.32"
    max-k8s-version: "1.33"
  name: d8-cluster-kubernetes
  namespace: kube-system
  resourceVersion: "20837731"
  uid: ba981996-f737-469c-9ce1-53aa46135994

Начало обновления (например, понижение версии Kubernetes)

Целевая версия уже задана, control plane или узлы ещё переходят на неё.

apiVersion: v1
data:
  spec: |
    desiredVersion: "1.32"
    updateMode: Manual
  status: |
    currentVersion: "1.33"
    supportedVersions:
    - "1.30"
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    availableVersions:
    - "1.32"
    - "1.33"
    - "1.34"
    automaticVersion: "1.33"
    phase: ControlPlaneUpdating
    progress: 0%
    controlPlane:
    - name: master-0
      phase: Updating
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    - name: master-1
      phase: Updating
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    - name: master-2
      phase: Updating
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    nodes:
      desiredCount: 6
      upToDateCount: 0
kind: ConfigMap
metadata:
  annotations:
    cause: downgradeK8s
    lastReconciliationTime: "2026-02-02T11:34:42Z"
    lastUpToDateTime: "2026-02-02T11:09:59Z"
  creationTimestamp: "2026-01-16T16:48:45Z"
  labels:
    heritage: deckhouse
    k8s-version: "1.33"
    max-k8s-version: "1.33"
  name: d8-cluster-kubernetes
  namespace: kube-system
  resourceVersion: "21379847"
  uid: ba981996-f737-469c-9ce1-53aa46135994

Обновление control plane в процессе

Часть master-узлов уже на новой версии, часть ещё обновляется. В status.progress отображается прогресс в процентах.

apiVersion: v1
data:
  spec: |
    desiredVersion: "1.32"
    updateMode: Manual
  status: |
    currentVersion: "1.33"
    supportedVersions:
    - "1.30"
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    availableVersions:
    - "1.32"
    - "1.33"
    - "1.34"
    automaticVersion: "1.33"
    phase: ControlPlaneUpdating
    progress: 60%
    controlPlane:
    - name: master-0
      phase: Updating
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    - name: master-1
      phase: Updating
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    - name: master-2
      phase: UpToDate
      components:
        kube-apiserver: "1.32"
        kube-controller-manager: "1.32"
        kube-scheduler: "1.32"
    nodes:
      desiredCount: 6
      upToDateCount: 6
kind: ConfigMap
metadata:
  annotations:
    cause: downgradeK8s
    lastReconciliationTime: "2026-02-02T11:41:55Z"
    lastUpToDateTime: "2026-02-02T11:09:59Z"
  creationTimestamp: "2026-01-16T16:48:45Z"
  labels:
    heritage: deckhouse
    k8s-version: "1.33"
    max-k8s-version: "1.33"
  name: d8-cluster-kubernetes
  namespace: kube-system
  resourceVersion: "21388343"
  uid: ba981996-f737-469c-9ce1-53aa46135994

Промежуточный шаг многошагового обновления (например, 1.33 → 1.35)

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

Поле status.currentVersion отражает текущий шаг обновления (активную минорную версию, до которой в данный момент доводится кластер). При этом в рамках одного шага отдельные компоненты control plane могут временно работать на разных минорных версиях.

Поле progress учитывает весь путь обновления, включая промежуточные версии. По этой причине его значение может быть существенно больше 0 % ещё до того, как все компоненты достигнут целевой версии.

apiVersion: v1
data:
  spec: |
    desiredVersion: "1.35"
    updateMode: Manual
  status: |
    currentVersion: "1.34"
    supportedVersions:
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    - "1.35"
    availableVersions:
    - "1.33"
    - "1.34"
    - "1.35"
    automaticVersion: "1.33"
    phase: ControlPlaneUpdating
    progress: 60%
    controlPlane:
    - name: master-0
      phase: Updating
      components:
        kube-apiserver: "1.35"
        kube-controller-manager: "1.34"
        kube-scheduler: "1.34"
    - name: master-1
      phase: Updating
      components:
        kube-apiserver: "1.34"
        kube-controller-manager: "1.34"
        kube-scheduler: "1.34"
    - name: master-2
      phase: Updating
      components:
        kube-apiserver: "1.34"
        kube-controller-manager: "1.34"
        kube-scheduler: "1.34"
    nodes:
      desiredCount: 6
      upToDateCount: 0
kind: ConfigMap
metadata:
  annotations:
    cause: upgradeK8s
    lastReconciliationTime: "2026-04-17T09:43:08Z"
    lastUpToDateTime: "2026-04-15T13:43:59Z"
  creationTimestamp: "2026-01-16T16:48:45Z"
  labels:
    heritage: deckhouse
    k8s-version: "1.33"
    max-k8s-version: "1.33"
  name: d8-cluster-kubernetes
  namespace: kube-system
  resourceVersion: "1753458"
  uid: ba981996-f737-469c-9ce1-53aa46135994

Кластер в актуальном состоянии (2 master-узла, 1 arbitr-узел и 3 worker-узла)

apiVersion: v1
data:
  spec: |
    desiredVersion: "1.33"
    updateMode: Manual
  status: |
    currentVersion: "1.33"
    supportedVersions:
    - "1.30"
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    availableVersions:
    - "1.32"
    - "1.33"
    - "1.34"
    automaticVersion: "1.33"
    phase: UpToDate
    controlPlane:
    - name: master-0
      phase: UpToDate
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    - name: master-1
      phase: UpToDate
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    nodes:
      desiredCount: 6
      upToDateCount: 6
kind: ConfigMap
metadata:
  annotations:
    cause: upgradeK8s
    lastReconciliationTime: "2026-02-02T11:09:59Z"
    lastUpToDateTime: "2026-02-02T11:09:59Z"
  creationTimestamp: "2026-01-16T16:48:45Z"
  labels:
    heritage: deckhouse
    k8s-version: "1.33"
    max-k8s-version: "1.33"
  name: d8-cluster-kubernetes
  namespace: kube-system
  resourceVersion: "21357074"
  uid: ba981996-f737-469c-9ce1-53aa46135994

Сбой одного или нескольких компонентов control plane

У master-узла phase: Failed, в поле description — причина (например, под или контейнер не в состоянии Running):

apiVersion: v1
data:
  spec: |
    desiredVersion: "1.32"
    updateMode: Manual
  status: |
    currentVersion: "1.32"
    supportedVersions:
    - "1.30"
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    availableVersions:
    - "1.31"
    - "1.32"
    - "1.33"
    - "1.34"
    automaticVersion: "1.33"
    phase: ControlPlaneUpdating
    progress: 73%
    controlPlane:
    - name: master-1
      phase: UpToDate
      components:
        kube-apiserver: "1.32"
        kube-controller-manager: "1.32"
        kube-scheduler: "1.32"
    - name: master-2
      phase: Updating
      components:
        kube-apiserver: "1.33"
        kube-controller-manager: "1.33"
        kube-scheduler: "1.33"
    - name: master-0
      phase: Failed
      components:
        kube-apiserver: "1.32"
        kube-controller-manager: "1.32"
        kube-scheduler: "1.32"
    nodes:
      desiredCount: 6
      upToDateCount: 6
kind: ConfigMap
metadata:

Дополнительные ресурсы