Istio — является альтернативой Linkerd и представляет собой выделенный уровень инфраструктуры, называемый Service Mesh. Он помогает обрабатывать связь между сервисами, повторные запросы, тайм-ауты и автоматически шифровать соединения.
Установка компонента дополнений Istio обеспечивает балансировку gRPC-трафика при масштабировании сервисов ELMA365. Также он предоставляет телеметрию — коэффициент успешности, задержки и т. д.
Service Mesh является необходимым компонентом для включения поддержки масштабирования сервисов на стороне приложения ELMA365. Без установленного Service Mesh балансировка трафика при масштабировании микросервисов ELMA365 будет работать некорректно.
Установка состоит из пяти этапов:
- Изменение параметров ядра на рабочих узлах (опционально).
- Загрузка Helm-чарта и конфигурационного файла.
- Заполнение конфигурационного файла.
- Установка чарта Istio с помощью Helm в Kubernetes-кластер.
- Включение Istio на namespace с приложением ELMA365.
Шаг 1: Изменение параметров ядра на рабочих узлах (опционально)
Перед установкой удостоверьтесь, что параметры операционной системы установлены корректно. Если параметры для увеличения лимитов inotify не заданы, добавьте их в конфигурационный файл /etc/sysctl.conf
:
sudo nano /etc/sysctl.conf
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
Обновите значение параметров следующей командой:
sysctl -p
Шаг 2: Загрузка Helm-чарта и конфигурационного файла
Для установки через интернет получите конфигурационный файл values-istio.yaml
, выполнив команду:
helm repo add elma365 https://charts.elma365.tech
helm repo update
helm show values elma365/istio > values-istio.yaml
Получение конфигурационного файла для установки в закрытом контуре без доступа в интернет
helm repo add elma365 https://charts.elma365.tech Подробнее об этом читайте в статье «Загрузка образов ELMA365».
tar -xf istio-X.Y.Z.tgz |
Шаг 3: Заполнение конфигурационного файла
Заполните конфигурационный файл values-istio.yaml
для установки сервиса Istio.
Для параметра istioNamespace
укажите namespace
, в который устанавливается Istio.
Чтобы обеспечить высокую доступность Istio:
- включите автомасштабирование сервиса, задайте минимальное и максимальное количество реплик в параметрах
pilot.autoscaleMin
иpilot.autoscaleMax
; - без автомасштабирования задайте количество реплик сервиса в параметре
pilot.replicaCount
.
## Настройки Istio
global:
## namespace для Istio (перед установкой его необходимо создать kubectl create ns istio-system)
istioNamespace: istio-system
...
istiod:
pilot:
## автомасштабирование сервиса
autoscaleEnabled: true
## минимальное и максимальное количество реплик
autoscaleMin: 1
autoscaleMax: 5
## количество реплик сервиса без автомасштабирования
replicaCount: 1
...
Для подключения к приватному registry нужно:
## Настройки Istio где формат repository:
|
Шаг 4: Установка чарта Istio с помощью Helm в Kubernetes-кластер
Выполните установку чарта Istio в namespace istio-system
. Namespace
будет создан во время установки, если не был создан ранее.
Для установки через интернет:
helm upgrade --install istio elma365/istio -f values-istio.yaml -n istio-system --create-namespace
Для офлайн-установки без доступа в интернет перейдите в каталог с загруженным чартом и выполните команду:
helm upgrade --install istio ./istio -f values-istio.yaml -n istio-system --create-namespace
Шаг 5: Включение Istio на namespace с приложением ELMA365
В описанном примере приложение ELMA365 установлено в namespace elma365
.
Начало внимание
Перед включением Istio необходимо проверить и отключить другие Service Mesh в namespace, где установлено приложение ELMA365.
Одновременная работа нескольких Service Mesh не допускается.
Для отключения Linkerd удалите аннотацию на namespace
с приложением ELMA365:
kubectl annotate namespace elma365 linkerd.io/inject-
Конец внимание
Добавьте лейбл на namespace
с приложением ELMA365 для автоматической инъекции контейнеров Istio-proxy в сервисы ELMA365 командой:
kubectl label namespace elma365 istio-injection=enabled --overwrite
Перезапустите все сервисы приложения ELMA365 командой:
kubectl rollout restart deploy [-n namespace] && kubectl rollout restart ds [-n namespace]
Удалить чарт Istio с помощью Helm в Kubernetes-кластере
Начало внимание
Перед удалением компонента дополнений Istio отключите автомасштабирование на стороне приложения ELMA365.
Конец внимание
Чтобы удалить чарт Istio в namespace istio-system
, выполните команду:
helm uninstall istio -n istio-system