Перейти к основному содержимому

Инструкция по обновлению Monq до версии 8.8.0

В этом обновлении

ПродуктНовая версия
kubernetes1.31.4
cilium1.16.5
ingress-nginx1.12.0
postgres16.6
clickhouse24.8.11
redis7.4.2
rabbitmq4.0.5
arangodb3.11.12
victoria-metrics1.108.1
containerd1.7.25

Уровень простоя

Полная деградация на время обновления

Выполнить резервное копирование k8s master

Выполните резервное копирование сервера k8s master средствами виртуализации.

Проведение миграции 8.7.2 → 8.8.0

Требования

Минимальная версия Monq: 8.7.2
Минимальная версия monqctl: 1.16.1

Для запуска обновления требуется скачать клиент управления Monq monqctl и выполнить конфигурацию контекста monqctl, если ранее не выполнялось.

Сценарии обновления

Внимание! Ознакомиться до начала работ!

В зависимости от типа установки возможны 2 сценария обновления СПО:

  1. Demo-VM - контур был установлен из образа виртуальной машины Demo-VM 8.0.0, загруженной с сайта
  2. Промышленная установка - контур был установлен полностью вручную, включая все компоненты СПО, по Документации по развертыванию Monq версии 8.0.0
инструкция не подойдет для контуров, развернутых из более ранних версий пакетов установки Monq

Для просмотра команд выберите вкладку, соответствующую вашему сценарию:

Предрелизная подготовка

Проверить контекст monqctl и статус реестра микросервисов

# Просмотреть текущий контекст, с которым работает monqctl
monqctl config current-context

# Просмотреть статус реестра микросервисов из контекста
monqctl registry get status

# Просмотреть статус сервисов в реестре микросервисов из контекста
monqctl registry get services

Установить контекст релиза, с которым будет работать monqctl в рамках контекста установленного Monq

Команда при этом скачивает и подготавливает релиз для установки.

monqctl release use-version 8.8.0 --product=monq
Закрытый контур / обновление из папки

На системе с доступом к сети интернет, с установленным и настроенным monqctl, выполнить экспорт релиза в папку

monqctl release version export 8.8.0 --product=monq --dest=<export directory>

После переноса папки на сервер выполнить команду с аргументом --sourceDir

monqctl release use-version 8.8.0 --product=monq --sourceDir=<папка с экспортированным обновлением>

Импорт контейнеров

Выполнить импорт контейнеров в Docker репозиторий обновляемого экземпляра Monq

Закрытый контур / обновление из папки

Для установок без доступа к сети интернет необходимо выполнить команды данного раздела на системе, где такой доступ есть, после чего перенести файлы (директория monq880) в контур.
Предварительно необходимо выполнить установку crane и helm.

Загрузить k3s:

mkdir -p monq880/binaries
wget -O monq880/binaries/k3s https://github.com/k3s-io/k3s/releases/download/v1.31.4%2Bk3s1/k3s
wget -O monq880/binaries/helm.tar.gz https://get.helm.sh/helm-v3.17.0-linux-amd64.tar.gz
wget -O monq880/binaries/crane.tar.gz \
"https://github.com/google/go-containerregistry/releases/download/v0.20.3/go-containerregistry_Linux_x86_64.tar.gz"

Загрузить container image:

sudo tar -xf monq880/binaries/crane.tar.gz -C /usr/local/bin/ crane

mkdir -p monq880/images
crane pull docker.io/rancher/mirrored-metrics-server:v0.7.2 monq880/images/metrics-server.tar
crane pull docker.io/rancher/mirrored-library-busybox:1.36.1 monq880/images/busybox.tar
crane pull docker.io/rancher/mirrored-coredns-coredns:1.12.0 monq880/images/coredns.tar
crane pull quay.io/cilium/cilium:v1.16.5 monq880/images/cilium.tar
crane pull quay.io/cilium/operator-generic:v1.16.5 monq880/images/cilium-operator.tar
crane pull registry.k8s.io/ingress-nginx/controller:v1.12.0 monq880/images/ingress-nginx.tar
crane pull registry.k8s.io/ingress-nginx/kube-webhook-certgen:v1.5.0 monq880/images/kube-webhook-certgen.tar
crane pull postgres:16.6 monq880/images/postgres.tar
crane pull clickhouse/clickhouse-server:24.8.11 monq880/images/clickhouse.tar
crane pull redis:7.4.2 monq880/images/redis.tar
crane pull rabbitmq:3.12.14-management monq880/images/rabbitmq312.tar
crane pull rabbitmq:3.13.7-management monq880/images/rabbitmq313.tar
crane pull rabbitmq:4.0.5-management monq880/images/rabbitmq4.tar
crane pull arangodb:3.11.12 monq880/images/arangodb.tar
crane pull victoriametrics/victoria-metrics:v1.108.1 monq880/images/victoria-metrics.tar

Загрузить helm charts:

tar -xf monq880/binaries/helm.tar.gz linux-amd64/helm
sudo mv linux-amd64/helm /usr/local/bin/
rm -r linux-amd64/

mkdir -p monq880/charts

helm repo add cilium https://helm.cilium.io/
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo add monq https://helm.monq.ru/charts
helm repo update

helm pull cilium/cilium --version 1.16.5 -d monq880/charts
helm pull ingress-nginx/ingress-nginx --version 4.12.0 -d monq880/charts
helm pull monq/postgresql --version 1.1.0 -d monq880/charts
helm pull monq/clickhouse --version 1.1.0 -d monq880/charts
helm pull monq/arangodb --version 1.1.0 -d monq880/charts
helm pull monq/victoriametrics --version 1.1.0 -d monq880/charts
helm pull monq/redis --version 1.1.0 -d monq880/charts
helm pull monq/rabbitmq --version 1.1.0 -d monq880/charts

Импортировать container image в локальный registry

crane push monq880/images/metrics-server.tar registry.in.monq.local:5000/rancher/mirrored-metrics-server:v0.7.2
crane push monq880/images/busybox.tar registry.in.monq.local:5000/rancher/mirrored-library-busybox:1.36.1
crane push monq880/images/coredns.tar registry.in.monq.local:5000/rancher/mirrored-coredns-coredns:1.12.0
crane push monq880/images/cilium.tar registry.in.monq.local:5000/cilium/cilium:v1.16.5
crane push monq880/images/cilium-operator.tar registry.in.monq.local:5000/cilium/operator-generic:v1.16.5
crane push monq880/images/ingress-nginx.tar registry.in.monq.local:5000/ingress-nginx/controller:v1.12.0
crane push monq880/images/kube-webhook-certgen.tar registry.in.monq.local:5000/ingress-nginx/kube-webhook-certgen:v1.5.0
crane push monq880/images/postgres.tar registry.in.monq.local:5000/postgres:16.6
crane push monq880/images/clickhouse.tar registry.in.monq.local:5000/clickhouse/clickhouse-server:24.8.11
crane push monq880/images/redis.tar registry.in.monq.local:5000/redis:7.4.2
crane push monq880/images/rabbitmq312.tar registry.in.monq.local:5000/rabbitmq:3.12.14-management
crane push monq880/images/rabbitmq313.tar registry.in.monq.local:5000/rabbitmq:3.13.7-management
crane push monq880/images/rabbitmq4.tar registry.in.monq.local:5000/rabbitmq:4.0.5-management
crane push monq880/images/arangodb.tar registry.in.monq.local:5000/arangodb:3.11.12
crane push monq880/images/victoria-metrics.tar registry.in.monq.local:5000/victoriametrics/victoria-metrics:v1.108.1

Остановка Monq

Выполнить остановку микросервисов:

kubectl scale deploy -n production --replicas=0 --all
количество реплик

Перед остановкой Monq рекомендуем проверить и записать названия микросервисов, имеющих более одной реплики:

kubectl get deploy -n production --no-headers -o custom-columns="NAME:.metadata.name,REPLICAS:.spec.replicas" | awk '$2 > 1'

Обновление k8s

В поставке Demo-VM используется k3s - это упрощенный дистрибутив Kubernetes.
K3s развертывается как один двоичный файл и поставляется со встроенными инструментами, такими как kubectl и ctr.

Заменить исполняемый файл и добавить права на выполнение:

mv monq880/binaries/k3s /usr/local/bin/k3s
chmod +x /usr/local/bin/k3s

Перезапустить сервис:

systemctl restart k3s

Проверить версию и убедиться, что нода перешла в статус Ready:

kubectl get node

Сохранить values, использованные при установке cilium:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n kube-system \
cilium -o yaml > cilium-values.yaml

Внести изменения в values:

sed -i 's|kubeProxyReplacement: strict|kubeProxyReplacement: true|g' cilium-values.yaml

Выполнить обновление cilium:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade cilium \
monq880/charts/cilium-1.16.5.tgz --namespace=kube-system -f cilium-values.yaml

Обновление ingress-nginx controller

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n ingress-nginx \
ingress-nginx -o yaml > ingress-values.yaml

Остановить ingress-controller:

kubectl scale deploy -n ingress-nginx ingress-nginx-controller --replicas=0

Выполнить обновление ingress-nginx:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n ingress-nginx upgrade \
ingress-nginx monq880/charts/ingress-nginx-4.12.0.tgz -f ingress-values.yaml

Обновление postgresql

Выполнить запуск временного pod для снятия дампа БД:

cat <<EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
name: pg-update
namespace: infra
spec:
containers:
- name: postgres
image: registry.in.monq.local:5000/postgres:16.6
command: [ "/bin/bash", "-c", "--" ]
args: [ "trap : TERM INT; sleep infinity & wait" ]
EOF

Выполнить полный дамп postgres:

PGPASSWORD=$(kubectl get secrets -n infra postgresql-secret -o jsonpath='{.data.POSTGRES_PASSWORD}' | base64 -d)
kubectl exec -it -n infra pg-update -- sh -c "PGPASSWORD=${PGPASSWORD} pg_dumpall -h postgresql -U postgres > pg_backup.sql"
kubectl cp infra/pg-update:/pg_backup.sql ./pg_backup.sql
kubectl delete po -n infra pg-update

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n infra \
postgresql -o yaml > postgresql-values.yaml

Остановить postgres и очистить директорию с данными:

kubectl scale sts -n infra postgresql --replicas 0
rm -rf /storage/postgresql/var/lib/postgresql/data/*

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
postgresql monq880/charts/postgresql-1.1.0.tgz -f postgresql-values.yaml

Выполнить восстановление данных из бекапа:

kubectl cp ./pg_backup.sql infra/postgresql-0:/var/lib/postgresql/data/pg_backup.sql
kubectl exec -it -n infra postgresql-0 -- sh -c "PGPASSWORD=${PGPASSWORD} psql -h 127.0.0.1 -U postgres -f /var/lib/postgresql/data/pg_backup.sql"
kubectl exec -it -n infra postgresql-0 -- rm /var/lib/postgresql/data/pg_backup.sql

Обновление clickhouse

⚠️ Для пакетов установки Monq 7.6.1 и ниже

При обновлении clickhouse, установленного из версии 20.10 и ниже (пакет установки Monq 7.6.1 и ниже), будет произведена миграция БД с движками Ordinary в Atomic.

В процессе миграции может быть использовано дополнительное дисковое пространство, что следует учесть на больших инстансах.

Проверку наличия Ordinary БД можно произвести с помощью запроса:

select name, engine from system.databases;

Добавить флаг обновления БД:

kubectl exec -it -n infra clickhouse-0 -- touch '/clickhouse/flags/convert_ordinary_to_atomic'
kubectl exec -it -n infra clickhouse-0 -- chmod 666 '/clickhouse/flags/convert_ordinary_to_atomic'

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n infra \
clickhouse -o yaml > clickhouse-values.yaml

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
clickhouse monq880/charts/clickhouse-1.1.0.tgz -f clickhouse-values.yaml

Обновление redis

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n infra \
redis -o yaml > redis-values.yaml

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
redis monq880/charts/redis-1.1.0.tgz -f redis-values.yaml

Обновление rabbitmq

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n infra \
rabbitmq -o yaml > rabbitmq-values.yaml

Выполнить включение stable feature:

kubectl exec -it -n infra rabbitmq-0 -- rabbitmqctl enable_feature_flag all

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
rabbitmq monq880/charts/rabbitmq-1.1.0.tgz -f rabbitmq-values.yaml \
--set application.image.tag="3.12.14-management"

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
rabbitmq monq880/charts/rabbitmq-1.1.0.tgz -f rabbitmq-values.yaml \
--set application.image.tag="3.13.7-management"

Выполнить включение stable feature:

kubectl exec -it -n infra rabbitmq-0 -- rabbitmqctl enable_feature_flag all

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
rabbitmq monq880/charts/rabbitmq-1.1.0.tgz -f rabbitmq-values.yaml

Выполнить включение stable feature:

kubectl exec -it -n infra rabbitmq-0 -- rabbitmqctl enable_feature_flag all

Обновление arangodb

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n infra \
arangodb -o yaml > arangodb-values.yaml

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
arangodb monq880/charts/arangodb-1.1.0.tgz -f arangodb-values.yaml

Обновление victoria-metrics

Сохранить values, использованные при установке chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n infra \
victoriametrics -o yaml > victoriametrics-values.yaml

Обновить chart:

helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n infra upgrade \
victoriametrics monq880/charts/victoriametrics-1.1.0.tgz -f victoriametrics-values.yaml

Запуск Monq

Выполнить запуск микросервисов:

kubectl scale deploy -n production --replicas=1 --all
количество реплик

Для микросервисов, записанных на этапе остановки Monq, вернуть прежнее значение реплик

Обновление версии Monq

Выполнить обновление и конфигурацию микросервисов

monqctl release update microservices --module=pl

Удалить директорию загрузок

rm -r monq880