Релиз v6.11.0 (оффлайн)
- Предыдущая версия monq == 6.10.1
- Опыт администрирования Linux
- Базовые знания Kubernetes
- Осознание выполняемых команд
В обновлении:
Продукт | Новая версия |
---|---|
pl | 6.11.0 |
sm | 6.11.0 |
cl | 6.11.0 |
fm | 6.11.0 |
plugins | 6.10.0 |
Базовая информация
Релиз включает обновление основных компонентов СПО и различных модул ей monq.
Если установлен только определенный набор модулей monq, например: pl и cl, то разделы с остальными модулями можно проигнорировать.
При прочтении данной инструкции необходимо особое внимание уделять цветным блокам и уточнять все условия, которые в них указаны.
Проведение миграции
Для запуска обновления требуется скачать клиент управления monq monqctl и выполнить конфигурацию контекста monqctl если это не было выполнено ранее.
Минимальна я версия monqctl: 1.2.3
Примечание: можно настроить 2 контекста для stage и production одновременно.
Примечание 2: токен для доступа в monq ReleaseHub для скачивания обновления требуется получить, обратившись в поддержку monq, либо из письма с регистрацией лицензии.
⚠️ Выполнить бекап K8s master
средствами виртуализации
Сформировать пакет обновления для переноса на VM
На машине с доступом к registry.monqlab.com нужно скачать релизные пакеты и архивы с программами и образами для проведения обновлений
mkdir ./update
TOKEN="<токен обновления>"
curl -H "Authorization: Bearer ${TOKEN}" https://downloads.monqlab.com/monq/updates/monq_6_11_0.tar.gz -o monq_6_11_0.tar.gz
tar -C ./ -xvf monq_6_11_0.tar.gz
monqctl release version export 3.5.0 --product=monq-registry --dest=update/registry/
monqctl registry export registry 3.5.0 --dest=update/registry/containers
monqctl release version export 6.11.0 --product=monq --dest=update/monq/
После сборки пакета нужно скопировать каталог update на обновляемые сервера с установленным kubernetes
Выполнить предрелизную подготовку
Проверить контекст monqctl и статус реестра микросервисов.
# Просмотреть текущий контекст, с которым работает monqctl.
monqctl config current-context
# Просмотреть статус реестра микросервисов из контекста.
monqctl registry get status
# Просмотреть статус сервисов в реестре микросервисов из контекста.
monqctl registry get services
Примечание:
В ответе на команду monqctl registry get status
вывод будет содержать
-------------------------
Consul | Failed
-------------------------
На данном этапе можно проигнорировать. Сервис Consul добавлен только для возможности получить адрес и токен monqctl, который формирует файл доступа для программы-мигратора. Но для Consul в реестре микросервисов не реализованы методы генерирования шаблонов микросервисов, поэтому и выбрасывается ошибка валидации. Будет исправлено в последующих версиях.
Выполнить обновление реестра микросервисов
# Выполнить команду `registry update registry` с аргументом `--sourceDir`.
cd ./update/registry/containers/
monqctl registry update registry --version=3.5.0 --sourceDir=./
cd ../../../
Получить манифесты, необходимые для обновления
monqctl release use-version 3.5.0 --product=monq-registry --sourceDir=./update/registry/
CONTEXT=$(monqctl config current-context)
cp /tmp/monqctl/updates/${CONTEXT}/monq-registry/3.5.0/mreg/* ./update/
Остановить monq
Выполнить остановку микросервисов:
kubectl scale deploy -n production --replicas=0 --all
Выполнить остановку СУБД (при запуске в k8s):
kubectl scale deploy -n infra --replicas=0 --all
Выполнить изменение конфига coredns:
kubectl get cm -n kube-system coredns -o json | sed 's/reload/reload\\n ready :8181/g;s/ upstream\\n//g' | kubectl apply -f -
Выполнить бекап конфига coredns:
kubectl get cm -n kube-system coredns -o yaml >> ./update/coredns-cm.yaml
Отключить плагин auto coredns:
kubectl get cm -n kube-system coredns -o json | sed -E 's|auto \{.* \}||g' | kubectl apply -f -
Обновление flannel
Выполнить модификацию конфига flannel:
kubectl get cm -n kube-system kube-flannel-cfg -o json | sed 's/\\"cbr0\\",\\n/\\"cbr0\\",\\n \\"cniVersion\\":\\"0.3.1\\",\\n/g' | kubectl apply -f -
Удалить flannel:
kubectl delete daemonSet -n kube-system kube-flannel-ds-amd64
kubectl delete podsecuritypolicy -n kube-system psp.flannel.unprivileged
kubectl delete clusterrolebinding -n kube-system flannel
kubectl delete clusterrole -n kube-system flannel
Применить новый манифест:
docker load -i update/infra_containers/docker.img
kubectl apply -f ./update/flannel.yaml
Убедиться что статус всех нод "Ready":
kubectl get node
Отметить ноду как master
kubectl label node d-head node-role.kubernetes.io/master=
Для того, чтобы проверить какой тип установщика был использован, можно выполнить команду:
ip a show lo1
По результату выполнения команды можно определить:
Установщик с Loopback интерфейсом
3: lo1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 62:c4:b1:dd:d0:0f brd ff:ff:ff:ff:ff:ff
inet 10.10.40.50/32 brd 10.10.40.50 scope global noprefixroute lo1
valid_lft forever preferred_lft forever
Установщик без Loopback интерфейса
Device "lo1" does not exist.