Восстановить работоспособность OpenSearch
Во время эксплуатации Opensearch могут возникать следующие проблемы:
- Закончилось место
- Не может собраться из-за перезагрузки инстансов, установки или обновления
- OpenSearch необходимо ввести эксплуатацию после отключения сервиса
Закончилось место
При переполнении PVC войти в графический интерфейс Opensearch не получится, так как при авторизации происходит запись о входе в служебный индекс, но он в этот момент заблокирован на запись. Есть 2 пути решения проблемы:
- увеличить объём, выделенный для PVC;
- освободить место, удалив существующие индексы.
Для удаления индексов в интерфейсе командной строки примените команды:
Подключитесь к индексам, используя учетные данные служебного администратора Opensearch из секрета logs-admin-password
неймспейса shturval-logging
кластера управления.
Команда
read -s OPENSEARCH_USER
read -s OPENSEARCH_PASSWORD
Команда удаления всех индексов кластера управления
curl -k -u "$OPENSEARCH_USER:$OPENSEARCH_PASSWORD" -X DELETE "https://logs.apps.ip-10-0-0-1.shturval.link/management-*"
Команда удаления всех индексов по маске за 2024 год
curl -k -u "$OPENSEARCH_USER:$OPENSEARCH_PASSWORD" -X DELETE "https://logs.apps.ip-10-0-0-1.shturval.link/*-2024.*"
Не может собраться из-за перезагрузки инстансов, установки или обновления
Из-за особенностей эксплуатации Opensearch в составе Kubernetes при одновременном перезапуске всех подов возможно ситуация, когда поток логов не даст кластеру Opensearch собраться. Тогда для восстановления работоспособности необходимо снять нагрузку с кластера, остановив отправку логов.
Один из наиболее простых способов это временно вывести из работы Ingress в модуле централизованного хранения логов (shturval-logs-operator), чтобы внешние логи не попадали в Opensearch. Для этого в кластере управления в боковом меню откройте раздел Сервисы и репозитории и перейдите на страницу Установленные сервисы, найдите “Модуль централизованного хранения логов”. В блоке “Спецификация сервиса” внесите изменения в параметры hosts
, добавив -bad после префикса logs.
Пример customvalues
ingress:
cluster:
hosts:
- <ваше значение параметра>
tls:
- hosts:
- <ваше значение параметра>
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
cluster.hosts |
Список хостов кластера OpenSearch | array | logs-bad.apps.ip-10-0-0-2.shturval.link |
cluster.tls.hosts |
Список хостов, для которых устанавливается TLS-соединение | array | logs-bad.apps.ip-10-0-0-2.shturval.link |
В кластере управления в боковом меню откройте раздел Сервисы и репозитории и перейдите на страницу Установленные сервисы, найдите “Модуль локального сбора логов” (shturval-log-collector). В блоке “Спецификация сервиса” внесите изменения в параметр PLATFORM_OPENSEARCH_ENDPOINTS
, добавив -bad после префикса logs-master.
Пример customvalues
PLATFORM_OPENSEARCH_ENDPOINTS: <ваше значение параметра>
Параметр | Описание | Тип данных | Пример |
---|---|---|---|
PLATFORM_OPENSEARCH_ENDPOINTS |
URI конечной точки OpenSearch | string | https://logs-master-bad.shturval-logging |
После сохранения изменений в течение нескольких минут кластер Opensearch соберётся. После этого необходимо вернуть значение параметра hosts
модуля централизованного хранения логов (shturval-logs-operator) и параметра PLATFORM_OPENSEARCH_ENDPOINTS
модуля локального сбора логов (shturval-log-collector) в исходное состояние.
Ввод OpenSearch в эксплуатацию после отключения сервиса
Если “Модуль централизованного хранения логов” (shturval-logs-operator) был отключен (установлен mode: absent), для его введения в эксплуатацию требуется полная переустановка и повторная ручная инициализация кастомных ресурсов.
- Выгрузите локально манифесты кастомных ресурсов из кластера управления:
- OpensearchUser
- OpensearchRole
- OpensearchUserRoleBinding
- OpensearchTenant
Обратите внимание! Рекомендуется выполнить резервное копирование всех secrets с постфиксом -fluentbit-password
неймспейса shturval-logging
.
- Очистите выгруженные манифесты от служебных данных. Для очистки выгруженных манифестов от служебных данных настоятельно рекомендуется использовать плагин kubectl-neat
Команды
# OpensearchUser
kubectl get OpensearchUser -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchuser.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchUser -n shturval-logging % -o yaml | kubectl neat > opensearchUser_%.yaml';
# OpensearchRole
kubectl get OpensearchRole -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchrole.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchRole -n shturval-logging % -o yaml | kubectl neat > opensearchRole_%.yaml';
# OpensearchUserRoleBinding
kubectl get OpensearchUserRoleBinding -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchuserrolebinding.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchUserRoleBinding -n shturval-logging % -o yaml | kubectl neat > OpensearchUserRoleBinding_%.yaml';
# OpensearchTenant
kubectl get OpensearchTenant -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchtenant.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchTenant -n shturval-logging % -o yaml | kubectl neat > opensearchTenant_%.yaml';
-
Убедитесь, что “Модуль централизованного хранения логов”(shturval-logs-operator) был отключен (установлен mode: absent), дождитесь удаления всех подов в неймспейсе shturval-logging кластера управления.
-
Удалите PVC с префиксом
data-logs-
в неймспейсе shturval-logging кластера управления. -
Удалите кастомные ресурсы с зачисткой финалайзеров.
Команды
# OpensearchUser
find . -name "OpensearchUser_*.yaml" | xargs -P32 -i{} kubectl delete --force -f {}
kubectl get OpensearchUser -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchuser.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchUser -n shturval-logging % -o json | jq '.metadata.finalizers = null' | kubectl apply -f -';
# OpensearchRole
find . -name "OpensearchRole_*.yaml" | xargs -P32 -i{} kubectl delete --force -f {}
kubectl get OpensearchRole -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchrole.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchRole -n shturval-logging % -o json | jq '.metadata.finalizers = null' | kubectl apply -f -';
# OpensearchUserRoleBinding
find . -name "OpensearchUserRoleBinding_*.yaml" | xargs -P32 -i{} kubectl delete --force -f {}
kubectl get OpensearchUserRoleBinding -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchuserrolebinding.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchUserRoleBinding -n shturval-logging % -o json | jq '.metadata.finalizers = null' | kubectl apply -f -';
# OpensearchTenant
find . -name "OpensearchTenant_*.yaml" | xargs -P32 -i{} kubectl delete -f {}
kubectl get OpensearchTenant -n shturval-logging -o name -l app.kubernetes.io/managed-by!=Helm | sed -e 's/opensearchtenant.opensearch.opster.io\///g' | xargs -I % sh -c 'echo %; kubectl get OpensearchTenant -n shturval-logging % -o json | jq '.metadata.finalizers = null' | kubectl apply -f -';
-
Включите “Модуль централизованного хранения логов”(shturval-logs-operator), выберите автоматический режим управления сервисом. Дождитесь полной инициализации кластера Opensearch.
-
Загрузите выгруженные локально манифесты кастомных ресурсов в кластер управления.
Команды
# OpensearchUser
find . -name "opensearchUser_*.yaml" | xargs -i{} kubectl create -f {}
# OpensearchRole
find . -name "opensearchRole_*.yaml" | xargs -i{} kubectl create -f {}
# OpensearchUserRoleBinding
find . -name "OpensearchUserRoleBinding_*.yaml" | xargs -i{} kubectl create -f {}
# OpensearchTenant
find . -name "opensearchTenant_*.yaml" | xargs -i{} kubectl create -f {}
Проверить успешность загрузки ресурсов можно с помощью команды, которая выведет список имён всех неуспешно загруженных ресурсов.
Команды
# OpensearchUser
for name in $(k get -n shturval-logging OpensearchUser -o=jsonpath='{$.items[?(@.status.state!="CREATED")].metadata.name}'); do echo $name; done
# OpensearchRole
for name in $(k get -n shturval-logging OpensearchRole -o=jsonpath='{$.items[?(@.status.state!="CREATED")].metadata.name}'); do echo $name; done
# OpensearchUserRoleBinding
for name in $(k get -n shturval-logging OpensearchUserRoleBinding -o=jsonpath='{$.items[?(@.status.state!="CREATED")].metadata.name}'); do echo $name; done
# OpensearchTenant
for name in $(k get -n shturval-logging OpensearchTenant -o=jsonpath='{$.items[?(@.status.state!="CREATED")].metadata.name}'); do echo $name; done