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

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

Требования

Предыдущая версия Monq: 7.10.0
Минимальная версия monqctl: 1.12.0

Для запуска обновления должен быть установлен клиент управления Monq - monqctl и произведена конфигурация контекста (если ранее это не выполнялось).

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

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

Примечание

Можно настроить 2 контекста для stage и production одновременно.

Токен для доступа в Monq ReleaseHub для скачивания обновления требуется получить, обратившись в поддержку Monq, либо из письма с регистрацией лицензии.

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

Выполнить предрелизную подготовку

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

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

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

Внимание!

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

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

  1. Сценарий 1. Контур был установлен из образа виртуальной машины, загруженной с сайта (версия 7.6.1)
  2. Сценарий 2. Контур был установлен полностью вручную, включая все компоненты СПО, по Документации по развертыванию Monq (версия 7.6.1)

Сценарий 1: обновление установщика Demo-VM

Остановка Monq

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

    kubectl scale deploy -n production --replicas=0 --all
  2. Выполнить остановку СУБД (при запуске в k8s):

    kubectl scale sts -n infra --replicas=0 clickhouse victoriametrics arangodb redis rabbitmq postgresql
  3. Выполнить бекап конфига coredns (при внесении изменений):

    kubectl get cm -n kube-system coredns -o yaml | awk '!/resourceVersion/&&!/uid/' >> coredns-cm.yaml

Обновление k8s

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

  1. Скачать обновленную версию k3s:

    wget https://github.com/k3s-io/k3s/releases/download/v1.26.6%2Bk3s1/k3s
  2. Заменить исполняемый файл и добавить права на выполнение:

    mv ./k3s /usr/local/bin/k3s
    chmod +x /usr/local/bin/k3s
При отсутствии доступа в интернет

Необходимо предварительно импортировать image coredns:

# на сервере с доступом в интернет скачать image и экспортировать файл:
ctr image pull docker.io/rancher/mirrored-coredns-coredns:1.10.1
ctr image export coredns-1.10.1.tar docker.io/rancher/mirrored-coredns-coredns:1.10.1

# перенести файл `coredns-1.10.1.tar` на обновляемый сервер и импортировать:
ctr -n=k8s.io images import coredns-1.10.1.tar
  1. Перезапустить сервис:

    systemctl restart k3s
  2. Проверить версию и убедиться что нода перешла в статус Ready:

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

    helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n kube-system \
    cilium -o yaml > cilium-values.yaml
При отсутствии доступа в интернет

Необходимо предварительно импортировать image сilium:

# на сервере с доступом в интернет скачать image и экспортировать файл:
ctr image pull quay.io/cilium/cilium@sha256:77176464a1e11ea7e89e984ac7db365e7af39851507e94f137dcf56c87746314
ctr image pull quay.io/cilium/operator-generic@sha256:fa7003cbfdf8358cb71786afebc711b26e5e44a2ed99bd4944930bba915b8910
ctr image export cilium-1.13.3.tar \
quay.io/cilium/cilium@sha256:77176464a1e11ea7e89e984ac7db365e7af39851507e94f137dcf56c87746314 \
quay.io/cilium/operator-generic@sha256:fa7003cbfdf8358cb71786afebc711b26e5e44a2ed99bd4944930bba915b8910

# перенести файл `cilium-1.13.3.tar` на обновляемый сервер и импортировать:
ctr -n=k8s.io images import cilium-1.13.3.tar
  1. Обновить repo cilium:

    helm repo update cilium
  2. Выполнить обновление релиза cilium:

    helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade cilium \
    cilium/cilium --version 1.13.3 --namespace=kube-system -f cilium-values.yaml
При отсутствии доступа в интернет

Необходимо предварительно скачать chart:

# на сервере с доступом в интернет экспортировать чарт:
helm repo add cilium https://helm.cilium.io/
helm pull cilium/cilium --version 1.13.3

# перенести файл `cilium-1.13.3.tgz` на обновляемый сервер и выполнить обновление:
helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade cilium \
cilium-1.13.3.tgz --namespace=kube-system -f cilium-values.yaml

Восстановление конфигурации

  1. Выполнить восстановление конфигурации coredns (при внесении изменений):
    kubectl apply -f coredns-cm.yaml
    kubectl rollout restart deployment -n kube-system coredns

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

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

    helm --kubeconfig /etc/rancher/k3s/k3s.yaml get values -n ingress-nginx \
    ingress-nginx -o yaml > ingress-values.yaml
  2. Остановить ingress-controller:

    kubectl scale deploy -n ingress-nginx ingress-nginx-controller --replicas=0
При отсутствии доступа в интернет

Необходимо предварительно импортировать image ingress-nginx-controller:

# на сервере с доступом в интернет необходимо скачать image и экспортировать файл:
ctr image pull registry.k8s.io/ingress-nginx/controller:v1.8.0@sha256:744ae2afd433a395eeb13dc03d3313facba92e96ad71d9feaafc85925493fee3
ctr image export ingress-nginx-1.8.0.tar \
registry.k8s.io/ingress-nginx/controller:v1.8.0@sha256:744ae2afd433a395eeb13dc03d3313facba92e96ad71d9feaafc85925493fee3

# перенести файл `ingress-nginx-1.8.0.tar` на обновляемый сервер и импортировать:
ctr -n=k8s.io images import ingress-nginx-1.8.0.tar
  1. Обновить chart:

    helm --kubeconfig /etc/rancher/k3s/k3s.yaml repo update ingress-nginx
  2. Выполнить обновление релиза:

    helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n ingress-nginx upgrade \
    ingress-nginx ingress-nginx/ingress-nginx --version 4.7.0 -f ingress-values.yaml
При отсутствии доступа в интернет

Необходимо предварительно скачать chart:

# на сервере с доступом в интернет экспортировать чарт:
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm pull ingress-nginx/ingress-nginx --version 4.7.0

# перенести файл `ingress-nginx-4.7.0.tgz` на обновляемый сервер и выполнить обновление:
helm --kubeconfig /etc/rancher/k3s/k3s.yaml -n ingress-nginx upgrade \
ingress-nginx ingress-nginx-4.7.0.tgz -version 4.7.0 -f ingress-values.yaml

Обновление postgresql

  1. Скачать oci image postgresql в приватный docker registry:
    crane copy postgres:12.15 registry.in.monq.local:5000/postgres:12.15
При отсутствии доступа в интернет

Необходимо предварительно загрузить image в приватный registry

  1. Установить новую версию postgresql:

    kubectl set image -n infra statefulset/postgresql postgresql=registry.in.monq.local:5000/postgres:12.15
  2. Выполнить запуск postgresql:

    kubectl scale sts -n infra postgresql --replicas=1

Обновление clickhouse

  1. Скачать oci image clickhouse в приватный docker registry:
    crane copy clickhouse/clickhouse-server:23.3.8 registry.in.monq.local:5000/clickhouse-server:23.3.8
При отсутствии доступа в интернет

Необходимо предварительно загрузить image в приватный registry

  1. Удалить данные для таблицы system.query_log:

    rm -rf /storage/clickhouse/metadata/system/*
    rm -rf /storage/clickhouse/data/system/*
  2. Установить новую версию и запустить clickhouse:

    kubectl set image -n infra statefulset/clickhouse clickhouse=registry.in.monq.local:5000/clickhouse-server:23.3.8
    kubectl scale sts -n infra clickhouse --replicas=1

Обновление redis

  1. Скачать oci image redis в приватный docker registry:
    crane copy redis:7.0.11 registry.in.monq.local:5000/redis:7.0.11
При отсутствии доступа в интернет

Необходимо предварительно загрузить image в приватный registry

  1. Установить новую версию redis:
    kubectl set image -n infra statefulset/redis redis=registry.in.monq.local:5000/redis:7.0.11
    kubectl scale sts -n infra redis --replicas=1

Обновление rabbitmq

  1. Скачать oci image rabbitmq в приватный docker registry:
    crane copy rabbitmq:3.11.18-management registry.in.monq.local:5000/rabbitmq:3.11.18-management
При отсутствии доступа в интернет

Необходимо предварительно загрузить image в приватный registry

  1. Установить новую версию rabbitmq:
    kubectl set image -n infra statefulset/rabbitmq rabbitmq=registry.in.monq.local:5000/rabbitmq:3.11.18-management
    kubectl scale sts -n infra rabbitmq --replicas=1

Обновление Arangodb

  1. Скачать oci image arangodb в приватный docker registry:
    crane copy arangodb:3.11.2 registry.in.monq.local:5000/arangodb:3.11.2
При отсутствии доступа в интернет

Необходимо предварительно загрузить image в приватный registry

  1. Установить флаг для обновления БД и обновить версию:

    kubectl patch sts -n infra arangodb --type='json' \
    -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": ["--database.auto-upgrade"]}]'
    kubectl set image -n infra statefulset/arangodb arangodb=registry.in.monq.local:5000/arangodb:3.11.2
    kubectl scale sts -n infra arangodb --replicas=1
  2. Проверить логи, убедиться, что обновление завершено:

    kubectl logs -n infra arangodb-0
    ...
    #INFO [0de5e] {general} database upgrade passed
    #INFO [7da27] {startup} server will now shut down due to upgrade, database initialization or admin restoration.
  3. Удалить флаг для обновления БД и перезапустить сервер:

    kubectl patch sts -n infra arangodb --type='json' \
    -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": []}]'
    kubectl rollout restart sts -n infra arangodb

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

  1. Скачать oci image victoria-metrics в приватный docker registry:
    crane copy victoriametrics/victoria-metrics:v1.91.3 registry.in.monq.local:5000/victoria-metrics:v1.91.3
При отсутствии доступа в интернет

Необходимо предварительно загрузить image в приватный registry

  1. Установить новую версию victoria-metrics:
    kubectl set image -n infra statefulset/victoriametrics victoriametrics=registry.in.monq.local:5000/victoria-metrics:v1.91.3
    kubectl scale sts -n infra victoriametrics --replicas=1

Запуск Monq

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

    kubectl scale deploy -n production --replicas=1 --all
  2. Проверить контекст monqctl и статус реестра микросервисов:

    # Просмотреть текущий контекст, с которым работает monqctl
    monqctl config current-context
    # Просмотреть статус реестра микросервисов из контекста
    monqctl registry get status
    # Просмотреть статус сервисов в реестре микросервисов из контекста
    monqctl registry get services
  3. Установить контекст релиза, с которым будет работать monqctl в рамках контекста, установленного Monq. Команда при этом скачивает и подготавливает релиз:

    monqctl release use-version 7.11.0 --product=monq
При обновлении из папки
# Требуется выполнить экспорт релиза в папку
monqctl release version export 7.11.0 --product=monq --dest=<export directory>

# Выполнить команду `use-version` с аргументом `--sourceDir`.
monqctl release use-version 7.11.0 --product=monq --sourceDir=<папка с экспортированным обновлением>
  1. Выполнить конфигурацию микросервисов:

    monqctl release update microservices --module=pl
  2. Перезапустить микросервисы автоматон v2

    monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service
    monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service-runner
    monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service-compiler

Сценарий 2: обновление установщика из документации

Остановка Monq

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

    kubectl scale deploy -n production --replicas=0 --all
  2. Выполнить остановку СУБД (при запуске в k8s):

    kubectl scale sts -n infra --replicas=0 clickhouse victoriametrics arangodb redis rabbitmq postgresql
  3. Выполнить бекап конфига coredns (при внесении изменений):

    kubectl get cm -n kube-system coredns -o yaml | awk '!/resourceVersion/&&!/uid/' >> coredns-cm.yaml
  4. Отключить плагин auto coredns (при наличии):

    kubectl get cm -n kube-system coredns -o json | sed -E 's|auto \{.* \}||g' | kubectl apply -f -

Обновление k8s

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию. Инструкция использует материалы из документации по обновлению kubernetes. Во время обновления по данной инструкции неизбежен даунтайм. Для его минимизации можно использовать приемы из документации по обновлению kubernetes.

1.23 -> 1.24

Обновление master ноды

  1. Обновить kubeadm:

    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.24.15-00 && \
    apt-mark hold kubeadm
  2. Проверить версию kubeadm:

    kubeadm version
  3. Выполнить plan обновления и убедиться в отсутствии ошибок:

    kubeadm upgrade plan
  4. Применить обновление и убедиться, что оно прошло успешно:

    kubeadm upgrade apply v1.24.15
  5. Обновить kubelet и kubectl:

    apt-mark unhold kubelet kubectl && \
    apt-get update && apt-get install -y kubelet=1.24.15-00 kubectl=1.24.15-00 && \
    apt-mark hold kubelet kubectl
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
  6. Дождаться запуска kubelet и apiserver и проверить статус master сервера:

    kubectl get node

Обновление worker нод

  1. Остановить scheduling для ноды (выполняется на master):

    NODE_NAME=<имя worker ноды>
    kubectl drain ${NODE_NAME} --ignore-daemonsets --delete-local-data
  2. Обновить kubeadm (выполняется на worker):

    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.24.15-00 && \
    apt-mark hold kubeadm
  3. Проверить версию kubeadm (выполняется на worker):

    kubeadm version
  4. Обновить ноду (выполняется на worker):

    sudo kubeadm upgrade node
  5. Обновить kubelet и kubectl (выполняется на worker):

    apt-mark unhold kubelet && \
    apt-get update && apt-get install -y kubelet=1.24.15-00 && \
    apt-mark hold kubelet
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
  6. Дождаться запуска kubelet и проверить статус обновляемой ноды (выполняется на master):

    kubectl get node
  7. Включить ноду в работу (выполняется на master):

    kubectl uncordon ${NODE_NAME}

1.24 -> 1.25

Обновление master ноды

  1. Обновить kubeadm:

    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.25.11-00 && \
    apt-mark hold kubeadm
  2. Проверить версию kubeadm:

    kubeadm version
  3. Выполнить plan обновления и убедиться в отсутствии ошибок:

    kubeadm upgrade plan
  4. Применить обновление и убедиться, что оно прошло успешно:

    kubeadm upgrade apply v1.25.11
  5. Обновить kubelet и kubectl:

    apt-mark unhold kubelet kubectl && \
    apt-get update && apt-get install -y kubelet=1.25.11-00 kubectl=1.25.11-00 && \
    apt-mark hold kubelet kubectl
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
  6. Дождаться запуска kubelet и apiserver и проверить статус master сервера:

    kubectl get node
  7. Сохранить values использованные при установке cilium:

    helm get values -n kube-system \
    cilium -o yaml > cilium-values.yaml
  8. Выполнить обновление релиза cilium:

    helm upgrade cilium cilium/cilium --version 1.13.3 \
    --namespace=kube-system -f cilium-values.yaml

Обновление worker нод

  1. Остановить scheduling для ноды (выполняется на master):

    NODE_NAME=<имя worker ноды>
    kubectl drain ${NODE_NAME} --ignore-daemonsets --delete-local-data
  2. Обновить kubeadm (выполняется на worker):

    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.25.11-00 && \
    apt-mark hold kubeadm
  3. Проверить версию kubeadm (выполняется на worker):

    kubeadm version
  4. Обновить ноду (выполняется на worker):

    sudo kubeadm upgrade node
  5. Обновить kubelet и kubectl (выполняется на worker):

    apt-mark unhold kubelet && \
    apt-get update && apt-get install -y kubelet=1.25.11-00 && \
    apt-mark hold kubelet
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
  6. Дождаться запуска kubelet и проверить статус обновляемой ноды (выполняется на master):

    kubectl get node
  7. Включить ноду в работу (выполняется на master):

    kubectl uncordon ${NODE_NAME}

1.25 -> 1.26

Обновление master ноды

  1. Обновить kubeadm:

    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.26.6-00 && \
    apt-mark hold kubeadm
  2. Проверить версию kubeadm:

    kubeadm version
  3. Выполнить plan обновления и убедиться в отсутствии ошибок:

    kubeadm upgrade plan
  4. Применить обновление и убедиться что оно прошло успешно:

    kubeadm upgrade apply v1.26.6
  5. Обновить kubelet и kubectl:

    apt-mark unhold kubelet kubectl && \
    apt-get update && apt-get install -y kubelet=1.26.6-00 kubectl=1.26.6-00 && \
    apt-mark hold kubelet kubectl
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
  6. Дождаться запуска kubelet и apiserver и проверить статус master сервера:

    kubectl get node

Обновление worker нод

  1. Остановить scheduling для ноды (выполняется на master):

    NODE_NAME=<имя worker ноды>
    kubectl drain ${NODE_NAME} --ignore-daemonsets --delete-local-data
  2. Обновить kubeadm (выполняется на worker):

    apt-mark unhold kubeadm && \
    apt-get update && apt-get install -y kubeadm=1.26.6-00 && \
    apt-mark hold kubeadm
  3. Проверить версию kubeadm (выполняется на worker):

    kubeadm version
  4. Обновить ноду (выполняется на worker):

    sudo kubeadm upgrade node
  5. Обновить kubelet и kubectl (выполняется на worker):

    apt-mark unhold kubelet && \
    apt-get update && apt-get install -y kubelet=1.26.6-00 && \
    apt-mark hold kubelet
    sudo systemctl daemon-reload
    sudo systemctl restart kubelet
  6. Дождаться запуска kubelet и проверить статус обновляемой ноды (выполняется на master):

    kubectl get node
  7. Включить ноду в работу (выполняется на master):

    kubectl uncordon ${NODE_NAME}

Восстановление конфигурации

  1. Выполнить восстановление конфигурации coredns (при внесении изменений):
    kubectl -n kube-system patch deploy coredns -p \
    '{"spec":{"template":{"spec":{"volumes":[{"configMap":
    {"defaultMode": 420,"name": "coredns-custom","optional": true},
    "name": "custom-config-volume"}]}}}}'

    kubectl -n kube-system patch deploy coredns -p \
    '{"spec":{"template":{"spec":{"containers":[{"name":"coredns","volumeMounts":
    [{"name":"custom-config-volume","mountPath":"/etc/coredns/custom"}]}]}}}}'

    kubectl apply -f coredns-cm.yaml
    kubectl rollout restart deployment -n kube-system coredns

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

ВНИМАНИЕ! Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.

cat <<EOF | kubectl replace -f -
apiVersion: v1
items:
- apiVersion: v1
kind: Namespace
metadata:
labels:
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
name: ingress-nginx
- apiVersion: v1
automountServiceAccountToken: true
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx
namespace: ingress-nginx
- apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/component: admission-webhook
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-admission
namespace: ingress-nginx
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx
namespace: ingress-nginx
rules:
- apiGroups:
- ""
resources:
- namespaces
verbs:
- get
- apiGroups:
- ""
resources:
- configmaps
- pods
- secrets
- endpoints
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses/status
verbs:
- update
- apiGroups:
- networking.k8s.io
resources:
- ingressclasses
verbs:
- get
- list
- watch
- apiGroups:
- coordination.k8s.io
resourceNames:
- ingress-nginx-leader
resources:
- leases
verbs:
- get
- update
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- create
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs:
- list
- watch
- get
- apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
labels:
app.kubernetes.io/component: admission-webhook
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-admission
namespace: ingress-nginx
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- create
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx
rules:
- apiGroups:
- ""
resources:
- configmaps
- endpoints
- nodes
- pods
- secrets
- namespaces
verbs:
- list
- watch
- apiGroups:
- coordination.k8s.io
resources:
- leases
verbs:
- list
- watch
- apiGroups:
- ""
resources:
- nodes
verbs:
- get
- apiGroups:
- ""
resources:
- services
verbs:
- get
- list
- watch
- apiGroups:
- networking.k8s.io
resources:
- ingresses
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- events
verbs:
- create
- patch
- apiGroups:
- networking.k8s.io
resources:
- ingresses/status
verbs:
- update
- apiGroups:
- networking.k8s.io
resources:
- ingressclasses
verbs:
- get
- list
- watch
- apiGroups:
- discovery.k8s.io
resources:
- endpointslices
verbs:
- list
- watch
- get
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
labels:
app.kubernetes.io/component: admission-webhook
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-admission
rules:
- apiGroups:
- admissionregistration.k8s.io
resources:
- validatingwebhookconfigurations
verbs:
- get
- update
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx
namespace: ingress-nginx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ingress-nginx
subjects:
- kind: ServiceAccount
name: ingress-nginx
namespace: ingress-nginx
- apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
labels:
app.kubernetes.io/component: admission-webhook
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-admission
namespace: ingress-nginx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: ingress-nginx-admission
subjects:
- kind: ServiceAccount
name: ingress-nginx-admission
namespace: ingress-nginx
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ingress-nginx
subjects:
- kind: ServiceAccount
name: ingress-nginx
namespace: ingress-nginx
- apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
labels:
app.kubernetes.io/component: admission-webhook
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-admission
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: ingress-nginx-admission
subjects:
- kind: ServiceAccount
name: ingress-nginx-admission
namespace: ingress-nginx
- apiVersion: v1
data:
body-size: 50m
hsts-include-subdomains: "false"
hsts: "false"
large-client-header-buffers: 4 32k
proxy-body-size: 50m
proxy-buffer-size: 128k
proxy-buffers: 4 256k
proxy-busy-buffers-size: 256k
proxy-connect-timeout: "15"
proxy-read-timeout: "300"
proxy-send-timeout: "300"
server-name-hash-bucket-size: "256"
worker-shutdown-timeout: "10s"
allow-snippet-annotations: "true"
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-controller
namespace: ingress-nginx
- apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
ports:
- appProtocol: http
name: http
port: 80
protocol: TCP
targetPort: http
- appProtocol: https
name: https
port: 443
protocol: TCP
targetPort: https
- name: monit
port: 10254
protocol: TCP
targetPort: 10254
sessionAffinity: ClientIP
sessionAffinityConfig:
clientIP:
timeoutSeconds: 10800
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
type: ClusterIP
- apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-controller-admission
namespace: ingress-nginx
spec:
ports:
- appProtocol: https
name: https-webhook
port: 443
targetPort: webhook
selector:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
type: ClusterIP
- apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
annotations:
ingressclass.kubernetes.io/is-default-class: "true"
name: nginx
spec:
controller: k8s.io/ingress-nginx
- apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
labels:
app.kubernetes.io/component: admission-webhook
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-admission
webhooks:
- admissionReviewVersions:
- v1
clientConfig:
service:
name: ingress-nginx-controller-admission
namespace: ingress-nginx
path: /networking/v1/ingresses
failurePolicy: Fail
matchPolicy: Equivalent
name: validate.nginx.ingress.kubernetes.io
rules:
- apiGroups:
- networking.k8s.io
apiVersions:
- v1
operations:
- CREATE
- UPDATE
resources:
- ingresses
sideEffects: None
- apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.8.0
name: ingress-nginx-controller
namespace: ingress-nginx
spec:
selector:
matchLabels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
template:
metadata:
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/name: ingress-nginx
spec:
containers:
- args:
- /nginx-ingress-controller
- --election-id=ingress-controller-leader
- --controller-class=k8s.io/ingress-nginx
- --ingress-class=nginx
- --configmap=\$(POD_NAMESPACE)/ingress-nginx-controller
- --validating-webhook=:8443
- --validating-webhook-certificate=/usr/local/certificates/cert
- --validating-webhook-key=/usr/local/certificates/key
env:
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: LD_PRELOAD
value: /usr/local/lib/libmimalloc.so
image: registry.k8s.io/ingress-nginx/controller:v1.8.0
imagePullPolicy: IfNotPresent
lifecycle:
preStop:
exec:
command:
- /wait-shutdown
livenessProbe:
failureThreshold: 5
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
name: controller
ports:
- containerPort: 80
name: http
protocol: TCP
hostPort: 80
- containerPort: 443
name: https
protocol: TCP
hostPort: 443
- containerPort: 8443
name: webhook
protocol: TCP
hostPort: 8443
readinessProbe:
failureThreshold: 3
httpGet:
path: /healthz
port: 10254
scheme: HTTP
initialDelaySeconds: 10
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
resources:
requests:
cpu: 100m
memory: 90Mi
securityContext:
allowPrivilegeEscalation: true
capabilities:
add:
- NET_BIND_SERVICE
drop:
- ALL
runAsUser: 101
volumeMounts:
- mountPath: /usr/local/certificates/
name: webhook-cert
readOnly: true
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
nodeSelector:
ingress: ""
serviceAccountName: ingress-nginx
terminationGracePeriodSeconds: 300
volumes:
- name: webhook-cert
secret:
secretName: ingress-nginx-admission
kind: List
metadata:
resourceVersion: ""
selfLink: ""
EOF

Обновление postgresql

Для единичного экземпляра в statefuleset

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.

  1. Установить новую версию postgresql:
    kubectl set image -n infra statefulset/postgresql postgresql=postgres:12.15
    kubectl scale sts -n infra postgresql --replicas=1

Для HA Postgresql

Для обновления HA postgresql инсталлированного с помощью postgres-operator необходимо воспользоваться инструкцией по обновлению. Обновление необходимо произвести до версии 12.15.

Обновление clickhouse

Для единичного экземпляра в statefuleset

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.

  1. Удалить данные для таблицы system.query_log:

    rm -rf /storage/clickhouse/clickhouse/metadata/system/*
    rm -rf /storage/clickhouse/clickhouse/data/system/*
  2. Установить новую версию и запустить clickhouse:

    kubectl set image -n infra statefulset/clickhouse clickhouse=clickhouse/clickhouse-server:23.3.8
    kubectl scale sts -n infra clickhouse --replicas=1

Для HA Clickhouse

Для обновления HA Clickhouse инсталлированного с помощью clickhouse-operator необходимо воспользоваться инструкцией по обновлению. Обновление необходимо произвести до версии 23.3.8.

Обновление redis

Для единичного экземпляра в statefuleset

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию

  1. Установить новую версию redis:
    kubectl set image -n infra statefulset/redis redis=redis:7.0.11
    kubectl scale sts -n infra redis --replicas=1

Для HA Redis

Для обновления HA redis инсталлированного с помощью redis-operator необходимо воспользоваться инструкцией по обновлению. Обновление необходимо произвести до версии 7.0.11.

Обновление rabbitmq

Для единичного экземпляра в statefuleset

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.

  1. Установить новую версию rabbitmq:
    kubectl set image -n infra statefulset/rabbitmq rabbitmq=rabbitmq:3.11.18-management
    kubectl scale sts -n infra rabbitmq --replicas=1

Для HA Rabbitmq

Для обновления HA rabbitmq инсталлированного с помощью rabitmq-operator необходимо воспользоваться инструкцией по обновлению. Обновление необходимо произвести до версии 3.11.18.

Обновление Arangodb

Для единичного экземпляра в statefuleset

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.

  1. Установить флаг для обновления БД и обновить версию:

    kubectl patch sts -n infra arangodb --type='json' \
    -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": ["--database.auto-upgrade"]}]'
    kubectl set image -n infra statefulset/arangodb arangodb=arangodb:3.11.2
    kubectl scale sts -n infra arangodb --replicas=1
  2. Проверить логи, убедиться в том, что обновление завершено:

    kubectl logs -n infra arangodb-0
    #INFO [0de5e] {general} database upgrade passed
    #INFO [7da27] {startup} server will now shut down due to upgrade, database initialization or admin restoration.
  3. Удалить флаг для обновления БД и перезапустить сервер:

    kubectl patch sts -n infra arangodb --type='json' \
    -p='[{"op": "replace", "path": "/spec/template/spec/containers/0/args", "value": []}]'
    kubectl rollout restart sts -n infra arangodb

Для HA Arangodb

Для обновления HA Arangodb инсталлированного с помощью kube-arangodb необходимо воспользоваться инструкцией по обновлению. Обновление необходимо произвести до версии 3.11.2.

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

Для единичного экземпляра в statefuleset

Внимание!

Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.

  1. Установить новую версию victoria-metrics:
    kubectl set image -n infra statefulset/victoriametrics victoriametrics=victoriametrics/victoria-metrics:v1.91.3
    kubectl scale sts -n infra victoriametrics --replicas=1

Для HA victoria-metrics

Для обновления HA victoria-metrics инсталлированного с помощью victoria-metrics-operator необходимо воспользоваться инструкцией по обновлению. Обновление необходимо произвести до версии v1.91.3.

Запуск Monq

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

    kubectl scale deploy -n production --replicas=1 --all
  2. Проверить контекст monqctl и статус реестра микросервисов:

    # Просмотреть текущий контекст, с которым работает monqctl.
    monqctl config current-context
    # Просмотреть статус реестра микросервисов из контекста.
    monqctl registry get status
    # Просмотреть статус сервисов в реестре микросервисов из контекста.
    monqctl registry get services
  3. Установить контекст релиза, с которым будет работать monqctl в рамках контекста установленного Monq. Команда при этом скачивает и подготавливает релиз:

    monqctl release use-version 7.11.0 --product=monq
При обновлении из папки
# Выполнить экспорт релиза в папку:
monqctl release version export 7.11.0 --product=monq --dest=<export directory>

# Выполнить команду `use-version` с аргументом `--sourceDir`.
monqctl release use-version 7.11.0 --product=monq --sourceDir=<папка с экспортированным обновлением>
  1. Выполнить конфигурацию микросервисов:

    monqctl release update microservices --module=pl
  2. Перезапустить микросервисы автоматон v2

    monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service
    monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service-runner
    monqctl instance restart microservice --microservice=pl-automaton-v2-processor-service-compiler