Kubernetes upgrade
Описание скриптов обновления kubernetes с версии 1.26
Скрипты обновления rootless kubernetes
Механизм обновления kubernetes-кластера не позволяет проводить обновление узлов кластера с пропуском промежуточных версий. Например, чтобы обновить узлы кластера с минорной версии 1.26
до минорной версии 1.31
необходимо последовательно и синхронизировано обновить узлы через промежуточные версии
1.26 -> 1.27 -> 1.28 -> 1.29 -> 1.30 -> 1.31
.
Причем при обновлении не допускается, чтобы минорные версии всех обновляемых узлов были соседними. Не допусается, например, обновление программного обеспечения узла с версии 1.27
до версии 1.28
, если в кластере есть узлы с версией 1.26
.
Таким образом для обновления узлов кластера с версии 1.26
до версии 1.28
узла кластера должны в рамках локальной сети иметь доступ как к промежуточным версиям RPM-пакетам kubernetes
, так и к промежуточным версиям docker-образов kuberbetes
.
Промежуточные версии RPM-пакетов kubernetes
размещаются на узле с внутренним доменным именем sigstore.local
.
Промежуточные версии docker-образов kuberbetes
размещаются на узле с внутренним доменным именем registry.local
.
Обычно при стандартном разворачивании это один и тот же узел, с которого начиналось разворачивание кластера.
Подготовка узлов кластера без доступа в Интернет для обновления rootless kubernetes
Для обновления kubernetes в сети без доступа в Интернет необходимо наличие следующих архивов:
amd64_27-31_tar.xz
- архив docker-образов всех промежуточных версий;kuberRPMS_1.27-1.31.tgz
rpm-пакетов kubelet, kubeadm, cri-o и зависимых пакетов всех промежуточных версий.
Добавление в локальный регистратор registry.local промежуточных docker образов kubernetes
Файл архива amd64_27-31_tar.xz
необходимо разместить на узле с доменом sigstore.local
в домашнем каталоге пользователя входящим в группуpodman_dev
(обычно это пользователь imagemaker
).
Для выкатывания промежуточных docker-образов в локальный регистратор registry.local
необходимо зайти в пользователя imagemaker
(вход через su- imagemaker
недопускается) и набрать команду разворачивания архива, подписи образов и передачи их в регистратор:
$ podsec-load-sign-oci ./amd64_27-31_tar.xz amd64 <E-mail_подписанта> registry.local/k8s-c10f2
После завершения команды (это может составить несколько минут) проверить наличие добавленных образов на регистраторе можно командой
curl -s http://registry.local/v2/_catalog | jq . { "repositories": [ "k8s-c10f1/..., "k8s-c10f2/coredns", "k8s-c10f2/etcd", "k8s-c10f2/flannel", "k8s-c10f2/flannel-cni-plugin", "k8s-c10f2/kube-apiserver", "k8s-c10f2/kube-controller-manager", "k8s-c10f2/kube-proxy", "k8s-c10f2/kube-scheduler", "k8s-c10f2/pause" ] }
В списке должны присутствовать вышеперечисленные образы с префиксом k8s-c10f2/...
.
Получить список тегов (kubernetes-версий) образов образов можно командой:
curl -s http://registry.local/v2/k8s-c10f2/<имя_образа>/tags/list | jq '.tags | sort'
Например список версий образа kube-apiserver
выглядит следующим образом:
$ curl -s http://registry.local/v2/k8s-c10f2/kube-apiserver/tags/list | jq '.tags | sort' [ "v1.27.16", "v1.28.14", "v1.29.9", "v1.30.5", "v1.31.1" ]
Файл архива amd64_27-31_tar.xz
после успешного размещения образов можно удалить.
Добавление в http-сервер sigstore.local промежуточных kubernetes rpm-пакетов
Для добавления промежуточных kubernetes rpm-пакетов
необходимо на сервере с доменом sistore.local
перейти в каталог /var/sigstore
и развернуть в нем архив kuberRPMS_1.27-1.31.tgz
:
# cd /var/sigstore # tar xvzf .../kuberRPMS_1.27-1.31.tgz dr-xr-xr-x root/root 0 2024-12-22 13:22 ALTLinux/ dr-xr-xr-x root/root 0 2024-12-22 13:22 ALTLinux/base/ -r--r--r-- root/root 74808 2024-12-22 13:22 ALTLinux/base/pkglist.main -r--r--r-- root/root 10628 2024-12-22 13:22 ALTLinux/base/pkglist.main.xz -r--r--r-- root/root 123 2024-12-22 13:22 ALTLinux/base/release.main -r--r--r-- root/root 13117 2024-12-22 13:22 ALTLinux/base/pkglist.main.bz2 -r--r--r-- root/root 1045 2024-12-22 13:22 ALTLinux/base/release dr-xr-xr-x root/root 0 2024-12-22 13:22 ALTLinux/RPMS.main/ -r--r--r-- root/root 8290 2024-12-22 13:22 ALTLinux/RPMS.main/kubernetes1.27-common-1.27.16-alt1.noarch.rpm -r--r--r-- root/root 50665903 2024-12-22 13:22 ALTLinux/RPMS.main/kubernetes1.30-master-1.30.5-alt1.x86_64.rpm ...
Модификация настроек apt для обновления rpm-пакетов
Кроме развертывания промежуточных образов из docker-регистратора registry.local
при обновлении кластера необходимо на всех узлах кластера добавить в apt
доступ к репохторию пакетов промежуточных команд kubelet
, kubeadm
, crctl
, cri-o
, ...
.
Для этого На всех узлах кластера выполните нижеперечисленные операции.
Наберите команду
# apt-repo
и найдите строку начинающуюся с rpm cdrom
:
rpm cdrom:[ALT SP Server 11100-01 x86_64 build 2023-05-29]/ ALTLinux main
Если строка присутствует - удалите ее:
apt-repo rm 'rpm cdrom:[ALT SP Server 11100-01 x86_64 build 2023-05-29]/ ALTLinux main'
Добавьте описание дерева RPM-пакетов
, развернутых на сервере с доменом sigstore.local
и доступных через WEB-сервер на порту 81
:
apt-repo add 'rpm http://sigstore.local:81/ALTLinux . main'
Обновите локальный список пакетов:
# apt-get update
Получено: 1 http://sigstore.local . release [1045B] Получено 1045B за 0s (0B/s). Найдено http://sigstore.local ./main pkglist Найдено http://sigstore.local ./main release Чтение списков пакетов... Завершено Построение дерева зависимостей... Завершено
Проверьте наличие пакетов версий 1.27
, 1.28
, ...
, 1.31
:
# apt-cache search kubernetes
kubernetes1.27-client - Kubernetes client tools kubernetes1.27-common - Kubernetes common files kubernetes1.27-crio - Kubernetes crio files kubernetes1.27-kubeadm - Kubernetes tool for standing up clusters kubernetes1.27-kubelet - Kubernetes kubelet daemon kubernetes1.27-master - Kubernetes services for master host kubernetes1.27-node - Kubernetes services for node host ... kubernetes1.31-client - Kubernetes client tools kubernetes1.31-common - Kubernetes common files kubernetes1.31-crio - Kubernetes crio files kubernetes1.31-kubeadm - Kubernetes tool for standing up clusters kubernetes1.31-kubelet - Kubernetes kubelet daemon kubernetes1.31-master - Kubernetes services for master host kubernetes1.31-node - Kubernetes services for node host
Настройка доступа к кластеру на worker-узлах
По умолчанию после развертывания worker-узла на нем не инициализируется файл `/root/.kube/config` обеспечивающий доступ к кластеру командой `kubectl`. Для обновления кластера необходимо скопировать этот файл с одного из `controlPlane` узла. Для этого:
- на одном из `controlPlane`-узле установите пароль для пользователя `u7s-admin`:
# passwd u7s-admin
- на всех `worker`-узлах скопируйте config-файл с `controlPlane` узла:
# scp u7s-admin@<IP-адрес_controlPlane`_узла>:~u7s-admin/.kube/config /root/.kube/