Инструкция по обновлению 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. Контур был установлен из образа виртуальной машины, загруженной с сайта (версия 7.6.1)
- Сценарий 2. Контур был установлен полностью вручную, включая все компоненты СПО, по Документации по развертыванию Monq (версия 7.6.1)
Сценарий 1: обновление установщика Demo-VM
Остановка Monq
Выполнить остановку микросервисов:
kubectl scale deploy -n production --replicas=0 --all
Выполнить остановку СУБД (при запуске в k8s):
kubectl scale sts -n infra --replicas=0 clickhouse victoriametrics arangodb redis rabbitmq postgresql
Выполнить бекап конфига coredns (при внесении изменений):
kubectl get cm -n kube-system coredns -o yaml | awk '!/resourceVersion/&&!/uid/' >> coredns-cm.yaml
Обновление k8s
В поставке DemoVM используется k3s - это упрощенный дистрибутив Kubernetes. K3s развертывается как один двоичный файл и поставляется со встроенными инструментами, такими как kubectl и ctr.
Скачать обновленную версию k3s:
wget https://github.com/k3s-io/k3s/releases/download/v1.26.6%2Bk3s1/k3s
Заменить исполняемый файл и добавить права на выполнение:
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
:::
Перезапустить сервис:
systemctl restart k3s
Проверить версию и убедиться что нода перешла в статус Ready:
kubectl get node
Сохранить 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
:::
Обновить repo cilium:
helm repo update cilium
Выполнить обновление релиза 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
:::
Восстановление конфигурации
- Выполнить восстановление конфигурации coredns (при внесении изменений):
kubectl apply -f coredns-cm.yaml
kubectl rollout restart deployment -n kube-system coredns
Обновление 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
Необходимо предварительно импортировать 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
:::
Обновить chart:
helm --kubeconfig /etc/rancher/k3s/k3s.yaml repo update ingress-nginx
Выполнить обновление релиза:
```bash
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
Скачать oci image postgresql в приватный docker registry:
```bash
crane copy postgres:12.15 registry.in.monq.local:5000/postgres:12.15
```При отсутствии доступа в интернетНеобходимо предварительно загрузить image в приватный registry
Установить новую версию postgresql:
kubectl set image -n infra statefulset/postgresql postgresql=registry.in.monq.local:5000/postgres:12.15
Выполнить запуск postgresql:
kubectl scale sts -n infra postgresql --replicas=1
Обновление clickhouse
Скачать oci image clickhouse в приватный docker registry:
```bash
crane copy clickhouse/clickhouse-server:23.3.8 registry.in.monq.local:5000/clickhouse-server:23.3.8
```При отсутствии доступа в интернетНеобходимо предварительно загрузить image в приватный registry
Удалить данные для таблицы system.query_log:
rm -rf /storage/clickhouse/metadata/system/*
rm -rf /storage/clickhouse/data/system/*Установить новую версию и запустить 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
Скачать oci image redis в приватный docker registry:
```bash
crane copy redis:7.0.11 registry.in.monq.local:5000/redis:7.0.11
```При отсутствии доступа в интернетНеобходимо предварительно загрузить image в приватный registry
Установить новую версию 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
Скачать oci image rabbitmq в приватный docker registry:
```bash
crane copy rabbitmq:3.11.18-management registry.in.monq.local:5000/rabbitmq:3.11.18-management
```При отсутствии доступа в интернетНеобходимо предварительно загрузить image в приватный registry
Установить новую версию 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
Скачать oci image arangodb в приватный docker registry:
```bash
crane copy arangodb:3.11.2 registry.in.monq.local:5000/arangodb:3.11.2
```При отсутствии доступа в интернетНеобходимо предварительно загрузить image в приватный registry
Установить флаг для обновления БД и обновить версию:
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Проверить логи, убедиться, что обновление завершено:
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.Удалить флаг для обновления БД и перезапустить сервер:
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
Скачать oci image victoria-metrics в приватный docker registry:
```bash
crane copy victoriametrics/victoria-metrics:v1.91.3 registry.in.monq.local:5000/victoria-metrics:v1.91.3
```При отсутствии доступа в интернетНеобходимо предварительно загрузить image в приватный registry
Установить новую версию 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
Выполнить запуск микросервисов Monq:
kubectl scale deploy -n production --replicas=1 --all
Проверить контекст monqctl и статус реестра микросервисов:
# Просмотреть текущий контекст, с которым работает monqctl
monqctl config current-context
# Просмотреть статус реестра микросервисов из контекста
monqctl registry get status
# Просмотреть статус сервисов в реестре микросервисов из контекста
monqctl registry get servicesУстановить контекст релиза, с которым будет работать 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=<папка с экспортированным обновлением>
Выполнить конфигурацию микросервисов:
monqctl release update microservices --module=pl
Перезапустить микросервисы автоматон 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
Выполнить остановку микросервисов:
kubectl scale deploy -n production --replicas=0 --all
Выполнить остановку СУБД (при запуске в k8s):
kubectl scale sts -n infra --replicas=0 clickhouse victoriametrics arangodb redis rabbitmq postgresql
Выполнить бекап конфига coredns (при внесении изменений):
kubectl get cm -n kube-system coredns -o yaml | awk '!/resourceVersion/&&!/uid/' >> coredns-cm.yaml
Отключить плагин 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 ноды
Обновить kubeadm:
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.24.15-00 && \
apt-mark hold kubeadmПроверить версию kubeadm:
kubeadm version
Выполнить plan обновления и убедиться в отсутствии ошибок:
kubeadm upgrade plan
Применить обновление и убедиться, что оно прошло успешно:
kubeadm upgrade apply v1.24.15
Обновить 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Дождаться запуска kubelet и apiserver и проверить статус master сервера:
kubectl get node
Обновление worker нод
Остановить scheduling для ноды (выполняется на master):
NODE_NAME=<имя worker ноды>
kubectl drain ${NODE_NAME} --ignore-daemonsets --delete-local-dataОбновить kubeadm (выполняется на worker):
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.24.15-00 && \
apt-mark hold kubeadmПроверить версию kubeadm (выполняется на worker):
kubeadm version
Обновить ноду (выполняется на worker):
sudo kubeadm upgrade node
Обновить 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Дождаться запуска kubelet и проверить статус обновляемой ноды (выполняется на master):
kubectl get node
Включить ноду в работу (выполняется на master):
kubectl uncordon ${NODE_NAME}
1.24 -> 1.25
Обновление master ноды
Обновить kubeadm:
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.25.11-00 && \
apt-mark hold kubeadmПроверить версию kubeadm:
kubeadm version
Выполнить plan обновления и убедиться в отсутствии ошибок:
kubeadm upgrade plan
Применить обновление и убедиться, что оно прошло успешно:
kubeadm upgrade apply v1.25.11
Обновить 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Дождаться запуска kubelet и apiserver и проверить статус master сервера:
kubectl get node
Сохранить values использованные при установке cilium:
helm get values -n kube-system \
cilium -o yaml > cilium-values.yamlВыполнить обновление релиза cilium:
helm upgrade cilium cilium/cilium --version 1.13.3 \
--namespace=kube-system -f cilium-values.yaml
Обновление worker нод
Остановить scheduling для ноды (выполняется на master):
NODE_NAME=<имя worker ноды>
kubectl drain ${NODE_NAME} --ignore-daemonsets --delete-local-dataОбновить kubeadm (выполняется на worker):
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.25.11-00 && \
apt-mark hold kubeadmПроверить версию kubeadm (выполняется на worker):
kubeadm version
Обновить ноду (выполняется на worker):
sudo kubeadm upgrade node
Обновить 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Дождаться запуска kubelet и проверить статус обновляемой ноды (выполняется на master):
kubectl get node
Включить ноду в работу (выполняется на master):
kubectl uncordon ${NODE_NAME}
1.25 -> 1.26
Обновление master ноды
Обновить kubeadm:
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.26.6-00 && \
apt-mark hold kubeadmПроверить версию kubeadm:
kubeadm version
Выполнить plan обновления и убедиться в отсутствии ошибок:
kubeadm upgrade plan
Применить обновление и убедиться что оно прошло успешно:
kubeadm upgrade apply v1.26.6
Обновить 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Дождаться запуска kubelet и apiserver и проверить статус master сервера:
kubectl get node
Обновление worker нод
Остановить scheduling для ноды (выполняется на master):
NODE_NAME=<имя worker ноды>
kubectl drain ${NODE_NAME} --ignore-daemonsets --delete-local-dataОбновить kubeadm (выполняется на worker):
apt-mark unhold kubeadm && \
apt-get update && apt-get install -y kubeadm=1.26.6-00 && \
apt-mark hold kubeadmПроверить версию kubeadm (выполняется на worker):
kubeadm version
Обновить ноду (выполняется на worker):
sudo kubeadm upgrade node
Обновить 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Дождаться запуска kubelet и проверить статус обновляемой ноды (выполняется на master):
kubectl get node
Включить ноду в работу (выполняется на master):
kubectl uncordon ${NODE_NAME}
Восстановление конфигурации
Выполнить восстановление конфигурации 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
Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.
- Установить новую версию 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
Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.
Удалить данные для таблицы system.query_log:
rm -rf /storage/clickhouse/clickhouse/metadata/system/*
rm -rf /storage/clickhouse/clickhouse/data/system/*Установить новую версию и запустить 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
Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию
- Установить новую версию 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
Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.
- Установить новую версию 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
Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.
Установить флаг для обновления БД и обновить версию:
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Проверить логи, убедиться в том, что обновление завершено:
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.Удалить флаг для обновления БД и перезапустить сервер:
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
Данная инструкция отражает последовательность действий для проведения обновления. В некоторых случаях необходимо адаптировать под текущую инсталляцию.
- Установить новую версию 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
Выполнить запуск микросервисов Monq:
kubectl scale deploy -n production --replicas=1 --all
Проверить контекст monqctl и статус реестра микросервисов:
# Просмотреть текущий контекст, с которым работает monqctl.
monqctl config current-context
# Просмотреть статус реестра микросервисов из контекста.
monqctl registry get status
# Просмотреть статус сервисов в реестре микросервисов из контекста.
monqctl registry get servicesУстановить контекст релиза, с которым будет работать 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=<папка с экспортированным обновлением>
Выполнить конфигурацию микросервисов:
monqctl release update microservices --module=pl
Перезапустить микросервисы автоматон 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