Обновление#
Порядок получения обновлений#
После получения уведомления о наличии обновления необходимо его получить:
через Личный кабинет
https://client.sbertech.ru/, предоставляемый в рамках договора поддержки;через репозиторий ОС «SberLinux OS Server» по ссылке
https://sberlinux.sbertech.ru/fstec/DropAppили обновленной ссылке, полученной от разработчика, с помощью командыdnf upgrade;на физическом носителе (предоставляется по отдельному запросу).
Важно
Запрещается настройка служб автоматического обновления на использование внешних сторонних репозиториев.
После получения файла с обновлением убедитесь в его целостности и подлинности. Для этого выполните проверку электронной цифровой подписи (ЭЦП) файла.
Обновление поставляется с описанием последовательности действий, которые необходимо совершить для его установки.
До установки обновления рекомендуется выполнить процедуры, связанные с созданием и надежным хранением копий важных данных, и иные процедуры, обычно совершающиеся при выполнении небезопасных действий.
Получите дистрибутив с обновлениями и следуйте шагам, описанным в документе Руководство по установке -> «Установка DropApp» -> «Развертывание кластера DropApp с помощью Ansible» -> «Подготовка файла с параметрами шаблонов» для размещения новых образов в репозитории образов и новых RPM-пакетов в репозитории RPM-пакетов.
Убедитесь, что на nodes кластера
dnfнастроен на использование RPM-репозитория с новыми RPM-пакетами. Конфигурации можно посмотреть в каталоге/etc/yum.repos.d.
Создание конфигурации для обновления кластера#
Создание конфигурации для обновления кластера строится из следующих этапов:
Подключение к control plane и создание конфигурации для обновления.
Демонстрация обновления компонентов.
Подключение к Master node кластера с виртуальными машинами#
Для подключения к Master node (control plane) кластера с предыдущей версией DropApp, выполните следующие шаги:
Выведите информацию о списке виртуальных машин, их 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Для удобства запишите IP-адреса в переменные:
export CONTROL_PLANE_IP=<0.0.0.0> export WORKER1_IP=<0.0.0.0> export WORKER2_IP=<0.0.0.0>Подключитесь к
control-planeчерез SSH:ssh $CONTROL_PLANE_IPНа
control-planeсоздайте конфигурацию для обновления кластера:vi clusterconfig_upgrade.ymlВставьте в файл конфигурации содержимое:
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"
Демонстрация обновления компонентов#
Просмотрите список 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Установите пакет 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Для проверки конфигурации сформируйте план обновления:
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.
Обновление компонентов кластера#
Обновление компонентов 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.Перезапустите службу kubelet на Master node:
ssh $CONTROL_PLANE_IP sudo systemctl daemon-reload ssh $CONTROL_PLANE_IP sudo systemctl restart kubeletВыполните
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Для каждого 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С Master node для каждого Worker node выполните:
ssh $CONTROL_PLANE_IP kubectl uncordon worker1 kubectl uncordon worker2Проверьте запущенные 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Проверьте запущенные 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
Порядок контроля установки обновлений#
Во время процедуры установки обновлений средство автоматически проверяет целостность, подлинность и правильность установки обновления, поэтому контроль заключается в проверке наличия в процессе установки сообщений о благополучном завершении без ошибок выполнения.