Обновление#

Порядок получения обновлений#

После получения уведомления о наличии обновления необходимо его получить:

  • через Личный кабинет https://client.sbertech.ru/, предоставляемый в рамках договора поддержки;

  • через репозиторий ОС «SberLinux OS Server» по ссылке https://sberlinux.sbertech.ru/fstec/DropApp или обновленной ссылке, полученной от разработчика, с помощью команды dnf upgrade;

  • на физическом носителе (предоставляется по отдельному запросу).

Важно

Запрещается настройка служб автоматического обновления на использование внешних сторонних репозиториев.

После получения файла с обновлением убедитесь в его целостности и подлинности. Для этого выполните проверку электронной цифровой подписи (ЭЦП) файла.

Обновление поставляется с описанием последовательности действий, которые необходимо совершить для его установки.

До установки обновления рекомендуется выполнить процедуры, связанные с созданием и надежным хранением копий важных данных, и иные процедуры, обычно совершающиеся при выполнении небезопасных действий.

  1. Получите дистрибутив с обновлениями и следуйте шагам, описанным в документе Руководство по установке -> «Установка DropApp» -> «Развертывание кластера DropApp с помощью Ansible» -> «Подготовка файла с параметрами шаблонов» для размещения новых образов в репозитории образов и новых RPM-пакетов в репозитории RPM-пакетов.

  2. Убедитесь, что на nodes кластера dnf настроен на использование RPM-репозитория с новыми RPM-пакетами. Конфигурации можно посмотреть в каталоге /etc/yum.repos.d.

Создание конфигурации для обновления кластера#

Создание конфигурации для обновления кластера строится из следующих этапов:

  1. Подключение к control plane и создание конфигурации для обновления.

  2. Демонстрация обновления компонентов.

Подключение к Master node кластера с виртуальными машинами#

Для подключения к Master node (control plane) кластера с предыдущей версией DropApp, выполните следующие шаги:

  1. Выведите информацию о списке виртуальных машин, их IP-адресах и именах nodes:

    kubectl get nodes -o wide
    

    Пример вывода:

    NAME            STATUS   ROLES           AGE     VERSION    INTERNAL-IP         EXTERNAL-IP   OS-IMAGE                       KERNEL-VERSION                   CONTAINER-RUNTIME
    control-plane   Ready    control-plane   7h41m   v1.25.16   <0.0.0.0>   <none>        SberLinux 9.0 (Manaraga-fst)   5.14.0-427.20.1.sl9_4.1.x86_64   cri-o://1.25.5-dapp1.4.2+2.sl9.1
    worker1         Ready    <none>          7h41m   v1.25.16   <0.0.0.0>   <none>        SberLinux 9.0 (Manaraga-fst)   5.14.0-427.20.1.sl9_4.1.x86_64   cri-o://1.25.5-dapp1.4.2+2.sl9.1
    worker2         Ready    <none>          7h41m   v1.25.16   <0.0.0.0>   <none>        SberLinux 9.0 (Manaraga-fst)   5.14.0-427.20.1.sl9_4.1.x86_64   cri-o://1.25.5-dapp1.4.2+2.sl9.1
    
  2. Для удобства запишите IP-адреса в переменные:

    export CONTROL_PLANE_IP=<0.0.0.0>
    export WORKER1_IP=<0.0.0.0>
    export WORKER2_IP=<0.0.0.0>
    
  3. Подключитесь к control-plane через SSH:

    ssh $CONTROL_PLANE_IP
    
  4. На control-plane создайте конфигурацию для обновления кластера:

    vi clusterconfig_upgrade.yml
    
  5. Вставьте в файл конфигурации содержимое:

    apiVersion: kubeadm.k8s.io/v1beta3
    kind: ClusterConfiguration
    kubernetesVersion: v1.25.16
    dns:
      imageRepository: <registry_path>/<0.0.0>/dapp-coredns-2 # <registry_path> - путь к реестру с образами DropApp, <0.0.0> - версия DropApp
      imageTag: v1.9.4
    etcd:
      local:
        imageRepository: <registry_path>/<0.0.0>/dapp-etcd-2 # <registry_path> - путь к реестру с образами DropApp, <0.0.0> - версия DropApp
        imageTag: 3.5.12
    imageRepository: <registry_path>/<0.0.0>/dapp-kubernetes-2 # <registry_path> - путь к реестру с образами DropApp, <0.0.0> - версия DropApp
    clusterName: "dapp-cluster"
    networking:
      serviceSubnet: "0.0.0.0/00"
      podSubnet: "0.0.0.0/00"
      dnsDomain: "cluster.local"
    

Демонстрация обновления компонентов#

  1. Просмотрите список node кластера с указанием их IP-адресов:

    kubectl get nodes -o wide
    

    Пример вывода:

    NAME            STATUS   ROLES           AGE   VERSION    INTERNAL-IP   
    control-plane   Ready    control-plane   21m   v1.25.16   0.0.0.0
    worker1         Ready    <none>          20m   v1.25.16   0.0.0.0
    worker2         Ready    <none>          19m   v1.25.16   0.0.0.0
    
  2. Установите пакет kubeadm с новой версией на каждом node кластера:

    ssh $CONTROL_PLANE_IP sudo dnf install -y kubeadm-1.25.16
    ssh $WORKER1_IP sudo dnf install -y kubeadm-1.25.16
    ssh $WORKER2_IP sudo dnf install -y kubeadm-1.25.16
    

    Пример вывода:

    Upgraded:
        kubeadm-1.25.16-dapp1.5.0+1.sl8.3.x86_64
        kubectl-1.25.16-dapp1.5.0+1.sl8.3.x86_64
        kubelet-1.25.16-dapp1.5.0+1.sl8.3.x86_64
    Complete
    
  3. Для проверки конфигурации сформируйте план обновления:

    sudo kubeadm upgrade plan 1.25.16 --config clusterconfig_upgrade.yml
    

    Пример вывода:

    Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm    upgrade apply':
    COMPONENT   CURRENT        TARGET
    kubelet     3 x v1.25.16   1.25.16
    
    Upgrade to the latest version in the v1.25 series:
    
    COMPONENT                 CURRENT          TARGET
    kube-apiserver            v1.25.16-dirty   1.25.16
    kube-controller-manager   v1.25.16-dirty   1.25.16
    kube-scheduler            v1.25.16-dirty   1.25.16
    kube-proxy                v1.25.16-dirty   1.25.16
    CoreDNS                   v1.9.3           v1.9.3
    etcd                      3.5.9            3.5.9-0
    
    You can now apply the upgrade by executing the following command:
    
        kubeadm upgrade apply 1.25.16
    
    Note: Before you can perform this upgrade, you have to update kubeadm to 1.25.16.
    

Обновление компонентов кластера#

  1. Обновление компонентов DropApp происходит через изменение версии образов и установки обновленных манифест-файлов с новой версией компонента при помощи команды:

    sudo kubeadm upgrade apply 1.25.16 --config clusterconfig_upgrade.yml
    

    Во время обновления kubeadm создает каталоги резервных копий с именем /etc/kubernetes/tmp, они представлены ниже:

    kubeadm-backup-etcd-<date>-<time>
    kubeadm-backup-manifests-<date>-<time>
    

    Где:

    • kubeadm-backup-etcd содержит резервную копию локальных данных Etcd для текущего Master node;

    • kubeadm-backup-manifests содержит резервную копию файлов манифеста статических системных pods для текущего Master node.

    Пример вывода:

    [upgrade/successful] SUCCESS! Your cluster was upgraded to "v1.25.16". Enjoy!
    [upgrade/kubelet] Now that your control plane is upgraded, please proceed with upgrading your kubelets if you haven't already done so.
    
  2. Перезапустите службу kubelet на Master node:

    ssh $CONTROL_PLANE_IP sudo systemctl daemon-reload
    ssh $CONTROL_PLANE_IP sudo systemctl restart kubelet
    
  3. Выполните drain для каждого Worker node с Master node:

    ssh $CONTROL_PLANE_IP
    kubectl drain worker1 --ignore-daemonsets --delete-emptydir-data
    kubectl drain worker2 --ignore-daemonsets --delete-emptydir-data
    
  4. Для каждого Worker node выполните следующий набор команд:

    ssh $WORKER1_IP sudo dnf -y install kubelet-1.25.16
    ssh $WORKER1_IP sudo systemctl daemon-reload
    ssh $WORKER1_IP sudo systemctl restart kubelet
    
    ssh $WORKER2_IP sudo dnf -y install kubelet-1.25.16
    ssh $WORKER2_IP sudo systemctl daemon-reload
    ssh $WORKER2_IP sudo systemctl restart kubelet
    
  5. С Master node для каждого Worker node выполните:

    ssh $CONTROL_PLANE_IP
    kubectl uncordon worker1
    kubectl uncordon worker2
    
  6. Проверьте запущенные nodes:

    kubectl get nodes
    

    Пример вывода:

    NAME            STATUS   ROLES           AGE   VERSION
    control-plane   Ready    control-plane   44m   v1.25.16
    worker1         Ready    <none>          43m   v1.25.16
    worker2         Ready    <none>          43m   v1.25.16
    
  7. Проверьте запущенные pods в namespace kube-system:

    kubectl get pods -n kube-system
    

    Пример вывода:

    NAME                                    READY   STATUS    RESTARTS       AGE
    cilium-9qr72                            1/1     Running   0              43m
    cilium-dmggq                            1/1     Running   0              43m
    cilium-operator-548cbb8f86-jp8nl        1/1     Running   0              7m11s
    cilium-operator-548cbb8f86-pcxpb        1/1     Running   0              7m17s
    cilium-r2kpj                            1/1     Running   0              43m
    coredns-595d945845-6vw8f                1/1     Running   0              7m11s
    coredns-595d945845-89qgd                1/1     Running   0              11m
    etcd-control-plane                      1/1     Running   1 (9m8s ago)   8m47s
    hubble-relay-6bfd5f44b9-q5mf2           1/1     Running   0              7m11s
    hubble-ui-bb9f5fb8c-pg6gg               2/2     Running   0              7m11s
    kube-apiserver-control-plane            1/1     Running   1 (9m8s ago)   8m41s
    kube-controller-manager-control-plane   1/1     Running   1 (9m8s ago)   8m48s
    kube-scheduler-control-plane            1/1     Running   1 (9m8s ago)   8m48s
    

Порядок контроля установки обновлений#

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