====== Работа с хранилищами в 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