Redis Sentinel не связывается после удаления pod в kubernetes HELM Chart - PullRequest
0 голосов
/ 10 февраля 2020

Я создал диаграмму HELM для развертывания redis с часовым и доступа к нему с помощью службы с использованием переадресации портов. После переадресации порта на 6379 я могу установить или войти в redis-cli. Однако, когда я удаляю модуль из набора состояний, я больше не мог получить доступ к redis-cli и получить подсказку, например. :

127.0.0.1:6379> get b
Error: Server closed the connection

По сути, сторож должен связываться и менять главный модуль, и соединение должно оставаться на месте. но в моем случае это не работает должным образом.

1 Ответ

0 голосов
/ 10 февраля 2020

Существует так много проблем с диаграммой переадресации, но в то же время есть много проблем с переадресацией портов, поэтому проблема кажется двойной сложностью. Многие, кто работал с переадресацией портов, заметили, что это заметно медленнее, чем подключение к модулю через службу, и команда просто останавливается через пару минут. Поэтому я советую вам не использовать его для производственной системы.

Как мы можем прочитать в официальной документации Kubernetes, модуль ручного принудительного удаления StatefulSet следует использовать с осторожностью, поскольку он может нарушать не более одной семантики, присущей StatefulSet , StatefulSets можно использовать для запуска распределенных и кластерных приложений, которым требуется стабильная сетевая идентификация и стабильное хранилище. Эти приложения часто имеют конфигурацию, которая опирается на ансамбль с фиксированным числом членов с фиксированными идентификаторами. Наличие нескольких членов с одинаковыми идентификационными данными может привести к катастрофическим последствиям и может привести к потере данных (например, сценарий разделения мозгов в системах, основанных на кворуме)

После удаления порядковых номеров бобов, имен хостов, записей SRV и имен записей A не изменился, но IP-адреса, связанные с модулем, изменились. В кластере, используемом для этого урока, они есть. Вот почему важно не настраивать другие приложения для подключения к модулям в StatefulSet по IP-адресу.

Если вам нужно найти и подключиться к активным членам StatefulSet, вам следует запросить CNAME Безголовая служба (nginx .default.sv c .cluster.local). Записи SRV, связанные с CNAME, будут содержать только модули в StatefulSet, которые работают и готовы.

Если ваше приложение уже реализует протокол подключения c, который проверяет работоспособность и готовность, вы можете использовать записи SRV модулей (web-0. nginx .default.sv c .cluster.local, web-1. nginx .default.sv c .cluster.local), так как они стабильны, а ваши Приложение сможет обнаружить адреса модулей при переходе в режим «Выполнено» и «Готов».

Вы также можете использовать прокси вместо переадресации портов, например:

$ kubectl proxy  --port=6379

Если вы Использование Kubectl Proxy можно достичь разных модулей, как и ожидалось. Перенаправление портов изначально предназначено для подключения к одному модулю для отладки и других целей. Была введена новая функция, которая помогает с обнаружением службы, поэтому вам не нужно сначала искать имя модуля, если вам все равно, к какому из них вы подключаетесь, если у вас есть несколько подходящих. Переадресация портов включает http-соединения. Цель состоит в том, чтобы балансировка нагрузки на уровне приложений не применялась, а несколько активных конечных точек не поддерживаются. Существует отдельный запрос функции для повторного присоединения, если активный модуль завершается.

Вы также можете по умолчанию перенаправить порт сборки, добавив следующие строки в файл конфигурации модуля:

export YOURAPP_POD=$(kubectl get pods -n $NAMESPACE | grep your-app | awk '{print $1;}')
kubectl port-forward -n $YOUR_NAMESPACE $YOURAPP_POD 8080

Или вы можете просто после восстановления pod настройте переадресацию портов еще раз.

Более подробную информацию вы можете найти здесь: kubectl-port-forward .

...