====== Работа с хранилищами в 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://youtu.be/-5_XB4EcU9s]] * [[https://rutube.ru/video/9c55de0f39d761d569761d2f553e0f61/]] * Тэги: 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 !!! В классе, если нет второго кластера, можно удалить приложение kube1:~# kubectl delete ns my-keycloak-ns и восстановить на этом же кластере !!! * (НЕ ОБЯЗАТЕЛЬНО) Можно выключить 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 kube ===== Вопросы? ===== ===== Дополнительные материалы ===== ==== Как все вернуть обратно ==== student1@CTC-2458F7OHBAL ~/nodes $ vagrant.exe halt * Откатить все на снапшоты student1@CTC-2458F7OHBAL ~ $ cp .kube/config_kube .kube/config