Kubernetes upgrade: различия между версиями

Материал из ALT Linux Wiki
Строка 142: Строка 142:
kubernetes1.31-master - Kubernetes services for master host
kubernetes1.31-master - Kubernetes services for master host
kubernetes1.31-node - Kubernetes services for node host
kubernetes1.31-node - Kubernetes services for node host
```
</pre>


==== Настройка доступа к кластеру на worker-узлах ====
==== Настройка доступа к кластеру на worker-узлах ====

Версия от 14:00, 9 января 2025

Описание скриптов обновления 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.tgzrpm-пакетов 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/