====== Работа с хранилищами в Kubernetes ====== * [[https://habr.com/ru/companies/otus/articles/717486/|Работа с хранилищами в Kubernetes]] * [[https://habr.com/ru/companies/flant/articles/326414/|Операторы для Kubernetes: как запускать stateful-приложения]] ===== Реклама ===== * Kubernetes «из коробки» - отличное средство для запуска и масштабирования stateless (т.е. без сохранения данных) приложений. Сложности начинаются для stateful (т.е. с сохранением данных) приложений, таких как базы данных, например MySQL, PostgreSQL и прочее * На нашем вебинаре мы на практических примерах разберем решения задач хранения данных для приложений, работающих в Kubernetes, начиная с простого продолжения PersistentVolume/PersistentVolumeClaim - rancher/local-path-provisioner и заканчивая отказоустойчивым longhorn ===== Техническое задание ===== * Развернуть сервис Keycloak с базой данных учетных записей, и приложение, использующее его для OpenID аутентификации, в корпоративном On-Premises Kubernetes. * Убедиться в отказоустойчивости полученного решения, как с точки зрения доступа пользователей, так и хранения данных. ===== Запись вебинара ===== * [[https://www.youtube.com/watch?v=-5_XB4EcU9s]] * Тэги: Kubernetes, Keycloak, OpenID, PersistentVolume, PersistentVolumeClaim, rancher, local-path-provisioner, longhorn ===== Методическая подготовка ===== * Продолжение вебинаров [[Практические примеры Keycloak]] и [[Доступ к приложениям в Bare-Metal Kubernetes]] ===== Шаг 1. Подготовка (сделано заранее) ===== * Выключаем тестовый кластер (node) через [[Технология Vagrant]] * Выключаем kube кластер, устанавливаем 4GB для узлов, включаем ===== Шаг 2. Использование статических PV для приложений с PVC ===== * Устанавливаем Keycloak в [[Сервис Keycloak#Kubernetes]] (10 минут) server.corp13.un:~# cat /etc/bind/corp13.un ... keycloak A 172.16.1.13 ===== Шаг 3. Управление заголовками в HAProxy и Ingress контроллере ===== * Устанавливаем [[Chrome]] на client2 * Тестируем с client2 и обнаруживаем проблемы * Добавляем параметры set-header в настройки backend [[Решение HAProxy]] * Добавляем use-forwarded-headers в конфигурацию [[Система Kubernetes#ingress-nginx]] ===== Шаг 4. Использование local-path-provisioner для Dynamic Volume Provisioning ===== * Удаляем Keycloak из [[Сервис Keycloak#Kubernetes]] (можно ns), затем "вручную" его [[Система Kubernetes#Volumes]] и файлы с /disk2 * Устанавливаем [[Система Kubernetes#rancher local-path-provisioner]] * Указываем storageClass: local-path в values.yaml и устанавливаем Keycloak в [[Сервис Keycloak#Kubernetes]] (5m + 3m) * Смотрим, на каком узле запустился, видим файлы в каталоге /opt/local-path-provisioner kube3:~# find /opt/local-path-provisioner/ * Удаляем Keycloak из [[Сервис Keycloak#Kubernetes]] (можно ns), его PV и файлы удалятся автоматически * Удаляем [[Система Kubernetes#rancher local-path-provisioner]] (лучше полностью, иначе, останется sc) ===== Шаг 5. Использование распределенного блочного хранилища longhorn ===== ==== 5.1 Dynamic Volume Provisioning и отказоустойчивость ==== * Устанавливаем [[Система Kubernetes#longhorn]] (open-iscsi и на kube4 тоже) (5 минут) * Указываем storageClass: longhorn и postgresql в values.yaml и устанавливаем Keycloak в [[Сервис Keycloak#Kubernetes]] (10 минут) * Подключаемся к UI и настраиваем Pod Deletion Policy When Node is Down: delete-statefuset-pod * Дожидаемся работоспособность KK и создаем realm * Выключаем узел, на котором развернулся postgresql Keycloak (обычно kube3) * Дожидаемся восстановления работоспособность KK создаем пользователя kube1# kubectl -n my-keycloak-ns logs pods/my-keycloak-1 -f | grep VALIDATION * Проводим [[Система Kubernetes#Удаление узла]] через kubeadm * Запускаем процесс [[Система Kubernetes#Добавление узла через Kubespray]] (замена kube3 на kube4) и наблюдаем поведение longhorn (20 минут) ==== 5.2 Использование snapshot-ов ==== * Проверяем [[Система Kubernetes#Использование snapshot-ов]] в longhorn ==== 5.3 Использование backup-ов ==== * Разворачиваем [[Сервис NFS]] на server * Выполняем [[Система Kubernetes#Использование backup-ов]] в longhorn * Можно выключить kube кластер * Включаем тестовый кластер (node) через [[Технология Vagrant]] (в Vagrantfile указать 4ГБ ОЗУ) * Устанавливаем [[Система Kubernetes#longhorn]] (5 минут) * Технология Vagrant [[Технология Vagrant#Provision с использованием внешних скриптов]] $ scp root@192.168.13.201:.kube/config ~/.kube/ * Подключаемся через UI [[Система Kubernetes#longhorn]] * Через [[Система Kubernetes#Использование backup-ов]] восстанавливаем Volume (количество реплик = 2) * Правим конфигурацию [[Система Kubernetes#Baremetal ingress-nginx-controller]] (ValidatingWebhookConfiguration, use-forwarded-headers) * Устанавливаем Keycloak в [[Сервис Keycloak#Kubernetes]] (не указываем количество реплик) * Правим настройки [[Решение HAProxy]] * Дожидаемся загрузки Keycloak в [[Сервис Keycloak#Kubernetes]] кластере node ===== Вопросы? ===== ===== Дополнительные материалы ===== ==== Как все вернуть обратно ==== student1@CTC-2458F7OHBAL ~/nodes $ vagrant.exe halt * Откатить все на снапшоты student1@CTC-2458F7OHBAL ~ $ cp .kube/config_kube .kube/config