Руководство по системному администрированию#

Термины и определения#

Термин/аббревиатура

Определение

Платформа

Платформа оркестрации приложений со средствами автоматизации и управления на основе политик, например, Kubernetes

Deployment / «kind: Deployment»

Набор инструкций для запуска приложения в Kubernetes

Pod / «kind: Pod»

Набор контейнеров внутри узла кластера Kubernetes

CLI

Command line interface — интерфейс командной строки, где выполняются команды с использованием терминала

KBLT

Программный компонент KubeLatte (код KBLT) из состава программного продукта Platform V Synapse Service Mesh (код SSM)

Kubernetes

Платформа оркестрации приложений со средствами автоматизации и управления на основе политик

MONA

Программный компонент Platform V Monitor — Объединенный мониторинг Unimon

SSM

Platform V Synapse Service Mesh — Программный продукт на базе Istio SE, обеспечивающий возможность создания сервисной сети поверх Платформенной в Kubernetes

URL

Uniform Resource Locator — стандартизированный способ записи адреса ресурса в сети Интернет»

Мутирование

Процесс перехвата пользовательской реализации ресурсов в рамках платформы Kubernetes. Перед сохранением ресурса в «etcd» кластера, производится запрос на «Webhook Server» (KBLT) инфраструктурным компонентом «KubeAPI». В рамках запроса инфраструктурный компонент «KubeAPI» предоставляет текущую реализацию конфигурации, которая в ближайшее время будет сохранена в «etcd» кластера. При получении запроса «Injector» анализирует предоставленную информацию и производит изменение (мутирование) конфигурации в рамках своей логики. После успешной процедуры изменения конфигурации происходит процесс сохранения в «etcd» кластера, после чего служебные операторы платформы производят штатную обработку ресурса

Креация (создание)

Процесс автоматической публикации инфраструктурных объектов системы управления облачных приложений Kubernetes

Валидация

Процесс автоматической проверки создаваемых из-за действий пользователя ресурсов на корректность в соответствии с конфигурационными правилами, описанными владельцем инсталляции компонента

Сценарии администрирования#

Программный компонент KubeLatte (код KBLT) из состава программного продукта Platform V Synapse Service Mesh (код SSM) не имеет собственного пользовательского интерфейса для администрирования. Все действия по управлению им производятся с использованием интерфейсов, предоставляемых Платформой Kubernetes.

Администратору должна быть назначена роль по принципу минимальных полномочий.

Запуск#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Вход в веб-консоль Kubernetes

Перейти по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных ввести токен пользователя или «kubeconfig».

Переход в нужный проект

Выбрать нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes.

Запуск Pod

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (можно использовать поиск по имени).
3. Нажмите ⋮ и выберите Scale.
4. Задайте нужное количество Pods и нажмите Scale.

Выход из веб-консоли Kubernetes

1. Нажмите по имени пользователя, чтобы раскрыть меню учетной записи.
2. Выберите пункт Log out.
3. Закройте окно браузера.

  • Через CLI kubernetes (kubectl)

Шаг

Действия

Описание

Вход в kubernetes

Загрузите «kubeConfig» от вашего «ServiceAccount». Заведите переменную KUBECONFIG=~/.kube/config где располагается выгруженная конфигурация.

Переход в нужный «Namespace»

Введите команду:
kubectl config set-context --current --namespace=<имя вашего проекта>

Запуск приложения

В консоли выполните команду:
kubectl scale --replicas=<N> deployment/<имя деплоймента>

N>0 — требуемое количество запущенных Pods приложения

Остановка#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Логин в веб-консоль Kubernetes

Перейти по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных ввести токен пользователя или «kubeconfig».

Переход в нужный проект

Выбрать нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes.

Остановка компонента

Выполнить следующие действия:
• В меню выбрать пункт Workload/Deployments ;
• На странице найти нужный Deployment (при необходимости воспользоваться поиском по имени);
• Нажать ⋮ и выбрать Scale.
• Уменьшить количество Pods до 0 и нажать Scale

Выход из веб-консоли Kubernetes

Выполнить следующие действия:
• Кликом по иконке пользователя раскрыть меню;
• Выбрать пункт Sign out ;
Закрыть окно браузера.

  • Через CLI kubernetes (kubectl)

Шаг

Действия

Описание

Остановка приложения

В консоли выполнить команду
kubectl scale --replicas=0 deployment/<имя deployment>

Проверка работоспособности#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Вход в веб-консоль Kubernetes

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или kubeconfig

Переход в нужный проект

Выберите нужный проект в выпадающем списке в шапке веб-интерфейса Kubernetes

Переход во вкладку Pod

В меню выбрать пункт Workload/Pods
В рамках таблицы Pods проверить столбец «Status», валидное значение «Running», также подтвердить значение в столбце «Restarts» равное 0

  • Через CLI kubernetes (kubectl)

Шаг

Действия

Описание

Получение имени Pod

В консоли выполнить команду kubectl get pod

Выбрать наименование Pod с наименованием «synapse-kubelatte-****», указанное наименование пригодится на следующем шаге (<имя Pod>)

Проверить работоспособность

В консоли выполнить команду:
kubectl port-forward pod/<имя Pod> 8081:8081
Запустить еще одно окно консоли, в нем выполнить команду:
curl localhost:8081/api/healthz
Команда должна вывести строку «ok».
Завершить переадресацию портов нажатием Ctrl+C

Также проверить отсутствие ошибок в рамках логов приложения

Настройка выделения ресурсов#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Логин в веб-консоль Kubernetes

Перейти по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных ввести токен пользователя или «kubeconfig»

Переход в проект

Выбрать нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes

Вход в Deployment

Выполнить следующие действия:
• В меню выбрать пункт Workload/Deployments
• На странице найти нужный Deployment (при необходимости воспользоваться поиском по имени);
• Пройти по ссылке в наименовании ⋮ , выбрать Edit , перейти на вкладку YAML или JSON

Скорректировать параметры

В окне редактирования найдите параметры:
spec.template.spec.containers[0].resources.limits.cpu
spec.template.spec.containers[0].resources.limits.memory
spec.template.spec.containers[0].resources.requests.cpu
spec.template.spec.containers[0].resources.requests.memory
Установите нужные значения.

Сохранение

Нажмите кнопку Update

Проверка конфигурации

Снова зайти на вкладку Edit в YAML или JSON

Выход из веб-консоли Kubernetes

Выполнить следующие действия:
• Кликом по иконке пользователя раскрыть меню;
• Выбрать пункт Sign out ;
• Закрыть окно браузера

  • Через CLI kubernetes (kubectl)

Шаг

Действие

Описание

Получить текущие Deployment приложений

В консоли выполнить команду kubectl get deployments. Из полученного списка выберите тот Deployment приложения, у которого необходимо скорректировать выделения ресурсов

Скорректировать параметры

В консоли выполнить команду kubectl patch deploy "$DEPLOYMENT_NAME" --patch '{"spec": {"template": {"spec": {"containers": [{"name": "'"$CONTAINER_NAME"'", "resources": {"$LIMIT_TYPE": {"'"$LIMIT_ENV"'": "'"$VALUE"'"} } }]}}}}'.

$CONTAINER_NAME — имя конфигурации «kind: Deployment»; $LIMIT_TYPE — секция где необходимо изменить квоту (limits/requests); $LIMIT_ENV - значение лимита (cpu/memory); $VALUE — необходимое значение (пример 1Gi)

Проверить конфигурацию

В консоли выполнить команду kubectl get deployment "$DEPLOYMENT_NAME" -o yaml, убедиться, что желаемый результат зафиксирован

Изменение количества Pods#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Вход в веб-консоль Kubernetes

Перейти по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных ввести токен пользователя или «kubeconfig»

Переход в нужный проект

Выбрать нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes

Запуск Pod

1. В меню выберите пункт Workload/Deployments.
2. На странице найдите нужный Deployment (можно использовать поиск по имени).
3. Нажать ⋮ и выбрать Scale ;
4. Задать нужное количество Pods и нажать Scale

Выход из веб-консоли Kubernetes

1. Нажмите по имени пользователя, чтобы раскрыть меню учетной записи.
2. Выберите пункт Log out.
3. Закройте окно браузера

  • Через CLI kubernetes (kubectl)

Шаг

Действия

Описание

Увеличить/уменьшить количество Pods

В консоли выполнить команду: kubectl scale --replicas=<N> deployment/<имя деплоймента>

Выгрузка системных логов#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Вход в веб-консоль Kubernetes

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или kubeconfig

Переход в нужный проект

Выберите нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes

Выгрузить лог

1. В меню выберите пункт Workload/Pods.
2. На странице найдите нужный Pod (можно использовать поиск по имени).
3. Нажмите ⋮ и выберите Logs ;
4. Задайте в верхней панели имя контейнера (Logs from <имя контейнера> in <имя Pod>)

Выход из веб-консоли Kubernetes

1. Выберите имя пользователя, чтобы раскрыть меню учетной записи.
2. Выберите пункт Log out.
3. Закройте окно браузера

  • Через CLI kubernetes (kubectl)

Шаг

Действия

Описание

Выгрузить лог

В консоли выполнить команду: kubectl logs -c <имя контейнера> <имя Pod> > <имя файла>.txt, где <имя контейнера> может быть названием контейнера приложения шлюза или контейнера.

Изменение уровня логирования без перезагрузки#

  • С использованием веб-интерфейса Kubernetes

Шаг

Действие

Вход в веб-консоль Kubernetes

Перейдите по ссылке (URL) веб-консоли нужного кластера Kubernetes, в окне ввода учетных данных введите токен пользователя или kubeconfig

Переход в нужный проект

Выберите нужный проект можно в выпадающем списке в шапке веб-интерфейса Kubernetes

Выгрузить лог

1. В меню выберите пункт Workload/Pods.
2. На странице найдите нужный Pod (можно использовать поиск по имени).
3. Нажмите ⋮ и выберите Terminal ;
4. Задайте в верхней панели имя контейнера (Connecting to <имя контейнера>).
5. Введите команду: curl -X PUT http://localhost:<17773 или 9443 для WebHook Server и Operator соответсвенно>/logging?level=<необходимый уровень логирования> -H "Content-Type: application/x-www-form-urlencoded"

Выход из веб-консоли Kubernetes

1. Выберите имя пользователя, чтобы раскрыть меню учетной записи.
2. Выберите пункт Log out.
3. Закройте окно браузера

События системного журнала#

Системный лог выводится в консоль контейнера приложения.

Также есть возможность использования логов с контейнера «fluent-bit».

Уровни логирования error, warn, info, debug. Уровень логирования задается при старте приложения в настройках «kind: ConfigMap».

Уровень логирования debug не рекомендован для ПРОМ среды.

Приложение Webhook Server#

Наименование контейнера в рамках «kind: Pod» — injector/inspector.

  1. Разворачивание среды

2023-05-18T05:52:41Z	[34mINFO [0m	["api=Start, message=start http webhook server"]
  1. Ожидание информации в рамках мутирования/валидации

    Ожидает поставки пользовательских конфигураций «kind: Template»/«kind: Trigger»/«kind: Scope».

2023-05-18T08:02:33Z	 [34mINFO [0m	["Dir with config is empty"]
  1. Режим запуска приложения Webhook Server режиме мутации

2023-05-18T08:02:33Z	 [34mINFO [0m	["Run templatter in MUTATOR role"]
  1. Режим запуска приложения Webhook Server в режиме инспектор (валидатор креаций ресурсов)

2023-05-18T08:02:33Z	 [34mINFO [0m	["Run templatter in VALIDATOR role"]
  1. Предупреждение: нет реализации правил для мутации

    Все мутации будут запрещены! Необходимо реализовать конфигурацию «kind: Scope» (type: mutation).

2023-05-18T08:03:16Z	 [33mWARN [0m	["Scope for mutation is empty"]
  1. Применение пользовательских конфигураций

oselatte/istio-system-discovery-merge-trigger/mutation-config-testy-special-merge
containers:
- name: oselatte/istio-system-discovery-merge/discovery
  readinessProbe:
    initialDelaySeconds: {{or (index .Annotations "readiness/initialdelayseconds") 60}}

Обработка WebHook request режим работы мутатор

Обработка входящего запроса на мутацию

2023-05-18T08:28:31Z	 [34mINFO [0m	["api=serve, message=incoming request, body={\"kind\":\"AdmissionReview\",\"apiVersion\":\"admission.k8s.io/v1beta1\",\"request\":{\"uid\":\"8ed27c78-7b49-4867-808d-54d7a16297ee\",\"kind\":{\"group\":\"\",\"version\":\"v1\",\"kind\":\"Pod\"},\"resource\":{\"group\":\"\",\"version\":\"v1\",\"resource\":\"pods\"},\"requestKind\":{\"group\":\"\",\"version\":\"v1\",\"kind\":\"Pod\"},\"requestResource\":{\"group\":\"\",\"version\":\"v1\",\"resource\":\"pods\"},\"namespace\":\"pub2-tribe-sy-kblt-dev\",\"operation\":\"CREATE\",\"userInfo\":{\"username\":\"system:serviceaccount:kube-system:replicaset-controller\",\"uid\":\"37d950c9-9ada-416b-b37d-ccc5fb1085c8\",\"groups\":[\"system:serviceaccounts\",\"system:serviceaccounts:kube-system\",\"system:authenticated\"]},\"object\":{\"kind\":\"Pod\",\"apiVersion\":\"v1\",\"metadata\":{\"generateName\":\"deployment-to-test-latte-annot-688f6bf486-\",\"creationTimestamp\":null,\"labels\":{\"app\":\"to-test-latte\",\"find-pod\":\"test\",\"p...
2023-05-18T08:28:31Z	 [34mINFO [0m	["api=mutate, message=new AdmissionReview, Kind=/v1, Kind=Pod, Namespace=pub2-tribe-sy-kblt-dev, Name= (), UID=8ed27c78-7b49-4867-808d-54d7a16297ee, patchOperation=CREATE, UserInfo={system:serviceaccount:kube-system:replicaset-controller 37d950c9-9ada-416b-b37d-ccc5fb1085c8 [system:serviceaccounts system:serviceaccounts:kube-system system:authenticated] map[]}"]

Процесс мутации инициализирован, найдена необходимая информация для начала мутации

2023-05-18T08:28:31Z	 [34mINFO [0m	["api=mutatePod, message=processing mutation request, mutationConfig=pub2-tribe-sy-kblt-dev/test-trigger/mutation-config-test-1"]
2023-05-18T08:28:31Z	 [34mINFO [0m	["api=mutationRequired, message=skip mutation for pod with no labels, pod=deployment-to-test-latte-annot-688f6bf486-, namespace=pub2-tribe-sy-kblt-dev"]

Процесс обработки AdmissionReview закончен, сервер готов отвечать

2023-05-18T08:28:31Z	 [34mINFO [0m	["api=serve, message=ready to write response"]

Ошибка проведения мутации, «kind: Pod» не будет промутирован, так как шаблон противоречит правилам мутации

2023-05-18T08:28:31Z	 [31mERROR [0m	["api=mutatePod, reason=whsvr.createPatches, message=failed to create patches, err=\"failed path:spec.volumes[*].configMap.name for /spec/volumes\""]

Отсутствие конфигурации «kind: Scope» (мутация будет запрещена)

2023-05-18T08:02:33Z	 [33mWARN [0m	["Scope for mutation is empty"]

Отсутствие конфигурации «kind: Scope» (креация будет разрешена)

2023-05-18T08:02:33Z	 [33mWARN [0m	["Scope for validation is empty"]

Обработка входящего запроса на валидацию

2023-05-18T11:46:19Z	 [34mINFO [0m	["api=validation, message=incoming request, body={\"kind\":\"AdmissionReview\",\"apiVersion\":\"admission.k8s.io/v1\",\"request\":{\"uid\":\"9e40e974-02d0-4049-bdfe-7c130782caa0\",\"kind\":{\"group\":\"\",\"version\":\"v1\",\"kind\":\"Pod\"},\"resource\":{\"group\":\"\",\"version\":\"v1\",\"resource\":\"pods\"},\"requestKind\":{\"group\":\"\",\"version\":\"v1\",\"kind\":\"Pod\"},\"requestResource\":{\"group\":\"\",\"version\":\"v1\",\"resource\":\"pods\"},\"name\":\"example-d7776ef4f9\",\"namespace\":\"pub2-tribe-sy-kblt-dev\",\"operation\":\"CREATE\",\"userInfo\":{\"username\":\"system:serviceaccount:pub2-tribe-sy-kblt-dev:templatter-operator-controller-manager\",\"uid\":\"37a68841-ae7a-4260-9b72-14e29e6481c3\",\"groups\":[\"system:serviceaccounts\",\"system:serviceaccounts:pub2-tribe-sy-kblt-dev\",\"system:authenticated\"],\"extra\":{\"authentication.kubernetes.io/pod-name\":[\"synapse-kubelatte-6f85f6fb9f-vd9hs\"],\"authentication.kubernetes.io/pod-uid\":[\"8fca2c56-9f...

Процесс обработки валидируемого ресурса закончен успешно, ресурс будет создан

2023-05-18T11:46:19Z	 [34mINFO [0m	["api=validation, message=ready to write response, result=true"]

Процесс обработки валидируемого ресурса закончен неуспешно, ресурс не будет создан

2023-05-18T11:54:07Z	 [34mINFO [0m	["api=validation, message=ready to write response, result=false"]

Приложение Operator#

Наименование контейнера в рамках «kind: Pod» — operator.

Разворачивание среды

Ошибка: API Server K8S недоступен

023-05-18T08:03:03Z	 [34mINFO [0m	["Kubernetes APIServer available. Status request: 200"]

API Server K8S доступен

2023-05-18T08:03:03Z	 [34mINFO [0m	["Kubernetes APIServer available. Status request: 200"]

Выбор лидера

I0518 08:03:07.683276       1 leaderelection.go:248] attempting to acquire leader lease pub2-tribe-sy-kblt-inspector-dev/leader-operator...
2023-05-18T08:03:07Z	 [34mINFO [0m	["New leader is synapse-kubelatte-574dd58cf4-62hwm"]

Инициализация взаимодействия с Platform V Audit SE

2023-05-18T08:03:07Z	 [34mINFO [0m	["AUDIT TURN ON"]
2023-05-18T08:03:07Z	 [34mINFO [0m	["AUDIT INIT RESPONSE","{\"id\":\"0f71dc08ca1fe55eda478247adb04243\"}"]

Успешная отправка события в Platform V Audit SE

2023-05-18T08:03:08Z	 [34mINFO [0m	["AUDIT EVENT RESPONSE","{\"id\":\"80b87e1f-2003-4498-b676-fa9bca9ae367\"}"]

Информация о старте контроллера, обрабатывающего ресурсы API компонента:

2023-05-18T08:03:00Z	 [34mINFO [0m	["[KBLT][Operator] Controller SCOPE started"]

2023-05-18T08:03:00Z	 [34mINFO [0m	["[KBLT][Operator] Controller TRIGGER started"]

2023-05-18T08:03:00Z	 [34mINFO [0m	["[KBLT][Operator] Controller TEMPLATE started"]

2023-05-18T08:03:00Z	 [34mINFO [0m	["[KBLT][Operator] Controller TRIGGER_INSTANCE started"]

Поиск пользовательских конфигураций

2023-05-18T11:02:02Z	 [34mINFO [0m	Starting EventSource	{"controller": "scope", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Scope", "source": "kind source: *v1alpha1.Scope"}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting Controller	{"controller": "scope", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Scope"}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting EventSource	{"controller": "template", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Template", "source": "kind source: *v1alpha1.Template"}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting Controller	{"controller": "template", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Template"}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting EventSource	{"controller": "trigger", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Trigger", "source": "kind source: *v1alpha1.Trigger"}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting Controller	{"controller": "trigger", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Trigger"}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting workers	{"controller": "trigger", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Trigger", "worker count": 1}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting workers	{"controller": "template", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Template", "worker count": 1}
2023-05-18T11:02:02Z	 [34mINFO [0m	Starting workers	{"controller": "scope", "controllerGroup": "kubelatte.synapse.sber", "controllerKind": "Scope", "worker count": 1}

Обработка пользовательских конфигураций

Добавление/обновление/удаление информации о пользовательской реализации «kind: Trigger»

2023-05-18T11:04:26Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/trigger/test-trigger","message","{\"mutationConfigs\":[{\"name\":\"mutation-config-test-1\",\"updateStrategy\":\"merge\",\"labelSelector\":{},\"annotationNamespace\":\"kblt.annotations\",\"annotationTrigger\":\"merge\",\"volumes\":[\"pub2-tribe-sy-kblt-dev/test-template/vol2\",\"pub2-tribe-sy-kblt-dev/test-template/vol4\"]}]}","information","added operation for a custom \"kind: Trigger\" configuration","status","Success","operationName","added","serviceReceiver","Openshift API server"]
2023-05-18T11:04:41Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/trigger/test-trigger","message","{\"mutationConfigs\":[{\"name\":\"mutation-config-test-1\",\"updateStrategy\":\"merge\",\"labelSelector\":{},\"annotationNamespace\":\"kblt.annotations\",\"annotationTrigger\":\"merge\",\"volumes\":[\"pub2-tribe-sy-kblt-dev/test-template/vol3\",\"pub2-tribe-sy-kblt-dev/test-template/vol4\"]}]}","information","updated operation for a custom \"kind: Trigger\" configuration","status","Success","operationName","updated","serviceReceiver","Openshift API server"]
2023-05-18T11:05:09Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/trigger/test-trigger","message","{\"mutationConfigs\":[{\"name\":\"mutation-config-test-1\",\"updateStrategy\":\"merge\",\"labelSelector\":{},\"annotationNamespace\":\"kblt.annotations\",\"annotationTrigger\":\"merge\",\"volumes\":[\"pub2-tribe-sy-kblt-dev/test-template/vol3\",\"pub2-tribe-sy-kblt-dev/test-template/vol4\"]}]}","information","removed operation for a custom \"kind: Trigger\" configuration","status","Success","operationName","removed","serviceReceiver","Openshift API server"]

Добавление/обновление/удаление информации о пользовательской реализации «kind: Template»

2023-05-18T11:38:18Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/template/test-template","message","{\"metadata\":{\"annotations\":{\"annot1\":\"val1\",\"annot2\":\"val2\"}},\"spec\":{\"volumes\":[{\"configMap\":{\"name\":\"istio\"},\"name\":\"vol1\"},{\"configMap\":{\"name\":\"basic\"},\"name\":\"vol2\"},{\"configMap\":{\"name\":\"fluent\"},\"name\":\"vol3\"},{\"configMap\":{\"name\":\"micro\"},\"name\":\"vol4\"},{\"hostPath\":{\"path\":\"/data\",\"type\":\"Directory\"},\"name\":\"vol5\"},{\"hostPath\":{\"path\":\"/datassss\",\"type\":\"Directory\"},\"name\":\"vol6\"}]}}","information","added operation for a custom \"kind: Template\" configuration","status","Success","operationName","added","serviceReceiver","Openshift API server"]
2023-05-18T11:38:33Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/template/test2","message","{\"spec\":{\"automountServiceAccountToken\":false,\"containers\":[{\"image\":\"swddfdffdfdfbdf.sbc.space/ci90000221_fedmesh_dev/kblt-usefull-demo:0.1\",\"imagePullPolicy\":\"Always\",\"name\":\"test4\",\"ports\":[{\"containerPort\":81}],\"resources\":{\"limits\":{\"cpu\":\"200m\",\"memory\":\"300Mi\"},\"requests\":{\"cpu\":\"200m\",\"memory\":\"300Mi\"}},\"securityContext\":{\"allowHostNetwork\":false,\"hostNetwork\":false,\"privileged\":false,\"runAsNonRoot\":true,\"serviceAccount\":\"default\",\"serviceAccountName\":\"default\"}}]}}","information","updated operation for a custom \"kind: Template\" configuration","status","Success","operationName","updated","serviceReceiver","Openshift API server"]
2023-05-18T11:39:18Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/template/test-template","message","{\"metadata\":{\"annotations\":{\"annot1\":\"val1\",\"annot2\":\"val2\"}},\"spec\":{\"volumes\":[{\"configMap\":{\"name\":\"istio\"},\"name\":\"vol1\"},{\"configMap\":{\"name\":\"basic\"},\"name\":\"vol2\"},{\"configMap\":{\"name\":\"fluent\"},\"name\":\"vol3\"},{\"configMap\":{\"name\":\"micro\"},\"name\":\"vol4\"},{\"hostPath\":{\"path\":\"/data\",\"type\":\"Directory\"},\"name\":\"vol5\"},{\"hostPath\":{\"path\":\"/datassss\",\"type\":\"Directory\"},\"name\":\"vol6\"}]}}","information","removed operation for a custom \"kind: Template\" configuration","status","Success","operationName","removed","serviceReceiver","Openshift API server"]

Добавление/обновление/удаление информации о пользовательской реализации «kind: Scope»

2023-05-18T11:40:11Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/template/kubelatte-validation-rule","message","","information","added operation for a custom \"kind: Scope\" configuration","status","Success","operationName","added","serviceReceiver","Openshift API server"]
2023-05-18T11:40:17Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/template/kubelatte-validation-rule","message","","information","updated operation for a custom \"kind: Scope\" configuration","status","Success","operationName","updated","serviceReceiver","Openshift API server"]
2023-05-18T11:40:21Z	 [33mWARN [0m	["rqUID","apps.ocp.devpub.solution/pub2-tribe-sy-kblt-dev/template/kubelatte-validation-rule","message","{\"type\":\"mutation\",\"items\":[{\"name\":\"allowed-containers\",\"path\":\"spec.containers[*]\",\"value\":\".*\",\"kind\":\"Pod\",\"apiVersion\":\"v1\"},{\"name\":\"allowed-volumesdddd\",\"path\":\"spec.volumes[*]\",\"value\":\".*\",\"kind\":\"Pod\",\"apiVersion\":\"v1\"},{\"name\":\"allowed-annotations\",\"path\":\"metadata.annotations.*\",\"value\":\".*\",\"kind\":\"Pod\",\"apiVersion\":\"v1\"}]}","information","removed operation for a custom \"kind: Scope\" configuration","status","Success","operationName","removed","serviceReceiver","Openshift API server"]

Информация об успешной обработке ресурса «kind: TriggerInstance» и создании ресурсов

2023-05-18T11:46:15Z	 [34mINFO [0m	["FactoryController: Make pub2-tribe-sy-kblt-dev/example"]

Информация о неудачной обработке ресурса «kind: TriggerInstance» и ошибке создания, а также информация о наименовании «kind: TriggerInstance», подлежащему к удалению

2023-05-18T11:54:07Z	 [31mERROR [0m	["FactoryController: Create resource failed in: ns pub2-tribe-sy-kblt-dev v v1 r Pod error admission webhook \"kubelatte.synapse.validation.sber\" denied the request: validation webhook error: validation failed: rule .* path spec.containers[?!(starts_with(image,'sw.sbc.space') || starts_with(image,'best.bank.ru') || starts_with(image,'registry.redhat.io'))].name"]
2023-05-18T11:54:07Z	 [34mINFO [0m	["WatcherController: All resources deleted, mark to delete this ti: pub2-tribe-sy-kblt-dev/example"]

Запись логов при работе компонента#

Компонент отчитывается о своей работы в рамках файла, который располагается в Pod, путь к файлу «/var/kubelatte/synapse-logs» (формат сообщений «JSON»).

Элемент operator

Формат записей логов сообщений:

/**
  * Логирование сообщения.
  *
  * @param rqUID           rqUID сообщения (в нашем случае UID это топология конфигурации cluster/namespace/typeConf/nameConf (syn-sb/sidecarinjector/template/egress))
  * @param message         текст сообщения (в нашем случае json портянка с конфигурациями)
  * @param information     дополнительная информация (что произошло? Добавление/удаление/изменение instance)
  * @param status          статус (успешно, неуспешно, описание)
  * @param operationName   название операции (add/del/upd)
  * @param serviceReceiver имя вызываемого сервиса (получателя) OpenshiftAPIserver
  */
public void log(String rqUID, String message, String information, String status, String operationName, String serviceReceiver)

Элемент Webhook server

/**
  * Логирование сообщения.
  *
  * @param rqUID           rqUID сообщения (в нашем случае UID это топология успешного webhook взаимодействия cluster/namespace/pod)
  * @param message         текст сообщения (в нашем случае json портянка с реализованным хуком)
  * @param information     дополнительная информация (что произошло? Мутирование прошло успешно в рамках конфигураций ${Имя_файла_мутирования})
  * @param status          статус (успешно, неуспешно, описание)
  * @param operationName   название операции (add/del/upd)
  * @param serviceReceiver имя вызываемого сервиса (получателя) Openshift API server
  */
public void log(String rqUID, String message, String information, String status, String operationName, String serviceReceiver)

В рамках параметра «information» предоставляется подробная информация о конкретном, реализованном действии компонента KBLT, например — «Добавление пользовательской конфигурации kind: Template/kind: Scope».

Для передачи указанных логов во внешнюю БД, необходима установка компонента fluent-bit, который будет считывать информацию из файла Pod, путь к файлу «/opt/synapse/logs/*».

События мониторинга#

Программный компонент KBLT не интегрирован с компонентом «Объединенный мониторинг Unimon» продукта Platform V Monitor (MONA).

Для наблюдения за состоянием Pods используйте существующие средства мониторинга Платформы, описанные в документации на конкретную платформу.

Компонент не порождает метрики мониторинга.

Часто встречающиеся проблемы и пути их устранения#

Проблема

Причина

Решение

Не стартует Pod приложения

Недостаточно ресурсов

Увеличить limits/requests для приложения

Не стартует Pod приложения

Нет доступной node для запуска

Зарегистрировать обращение в поддержку инфраструктуры

Не стартует Pod приложения

Ошибка в конфигурации

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

Частый перезапуск контейнера приложения

Медленная загрузка приложения

Увеличить задержку и/или интервал опроса Liveness пробы

Частый перезапуск контейнера приложения

Недостаточно ресурсов

Увеличить limits/requests для приложения

Ошибка при вызове

Нет доступных Pods сервиса, которому направлен вызов

Проверить состояние сервиса - получателя вызова

Ошибка при вызове

Ошибки в конфигурации сервисного прокси

Выгрузить лог сервисного прокси, проанализировать, устранить ошибки (ознакомиться с указанными действиями можно в документации компонента SPVX «Руководство по системному администрированию», раздел «Сценарии администрирования»). Пример устранения: редактирование конфигурации Istio по host вызываемого сервиса.