====== DevOps2. Использование Kubernetes ======
===== Программа курса =====
* [[https://www.specialist.ru/course/devops2|DevOps. Уровень 2. Использование Kubernetes]]
* [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]]
===== Модуль 0. Подготовка стенда в классе =====
* Узнать свой номер стенда
* Проверить наличие дистрибутивов и образов (будет сделано)
* Использовать кэширующий прокси для ускорения загрузки
===== Модуль 1: Развертывание стенда =====
==== Теория ====
* Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]]
==== Лабораторные работы: Развертывание стенда ====
=== 1.1 Схема стенда, импорт, настройка и запуск VM gate и server ===
Запустите с правами Administrator
C:\cmder\cmder.exe
bash
cd
test -d conf && rm -r conf
git clone http://val.bmstu.ru/unix/conf.git
cd conf/virtualbox/
!!! 9 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!!
./setup.sh X 9
=== 1.2 Настройка сети VM gate и server ===
* [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]]
* gate
# sh net_gate.sh
# init 6
* server
# sh net_server.sh
# init 6
* Создать в Putty профили gate, server и подключиться
=== 1.3 настройка сервисов DNS и DHCP ===
* [[Финальная настройка DNS сервера]] на server
server:~# sh conf/dns.sh
* Настройка клиента DNS на gate и server
# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
# nslookup ns
* Настройка клиента DHCP на gate
gate:~# sh conf/dhcp.sh
==== Вопросы ====
===== Модуль 2: Развертывание кластера через kubeadm =====
==== Теория ====
==== Лабораторные работы: Развертывание учебного кластера ====
* !!! Параллельно в паузах !!!
* [[Переменные окружения#Установка переменных окружения]] http_proxy, https_proxy и no_proxy
* Hа server запускаем установку [[Технология Docker]], [[Сервис Ansible]], [[Инструмент GitLab]] (через docker-compose) и [[Инструмент GitLab#GitLab Runner]] (из dpkg)
* Hа gate запускаем установку [[Технология Docker]] и gitlab-runner из [[Инструмент GitLab#Установка в виде контейнера]]
* Разворачиваем систему client1 для разработчика ([[Настройка сети в Linux]], [[Технология Docker]])
=== 2.1 Развертывание кластера ===
* Развертываем с использованием [[Технология Vagrant]] узлы node1,2,3 (!!! в provision_once.sh раскомментировать docker) для кластера
* Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]]
* [[Система Kubernetes#Развертывание через kubeadm]]
=== 2.2 Знакомство с k8s ===
* [[Система Kubernetes#Настройка автодополнения]]
* [[Система Kubernetes#Базовые объекты k8s]] (c node1#)
* [[Система Kubernetes#Volumes]] [[Команда dd#Создание пустого файла]] (внутри пода)
* [[Система Kubernetes#ConfigMap]] + Service
==== Вопросы ====
===== Модуль 3: Развертывание кластера через Kubespray =====
==== Теория ====
==== Лабораторные работы: Развертывание кластера предприятия ====
=== 3.1 Подготовка узлов ===
* Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]]
* Настройка IP на kube1-4 ( через [[Сервис DHCP]])
* Настройка файлов конфигурации сети через Ansible([[Сервис Ansible#Настройка групп управляемых систем]], [[Сервис Ansible#Настройка транспорта ssh]] и [[Сервис Ansible#Использование ролей]]
* [[Сервис Ansible#Использование модулей]] для отключения swap на kube1-4
=== 3.2 Развертывание кластера ===
* [[Система Kubernetes#Развертывание через Kubespray]]
=== 3.3 Управление кластером ===
* [[Система Kubernetes#Добавление узла через Kubespray]]
* [[Система Kubernetes#Добавление insecure_registries через Kubespray]]
==== Вопросы ====
===== Модуль 4: Разработка и CI приложения =====
==== Теория ====
==== Лабораторные работы: Разработка и CI приложения ====
* Разворачиваем систему client1 для разработчика ([[Настройка сети в Linux]])
* [[Настройка командных интерпретаторов]]
=== 4.1 Разработка приложения и упаковка его в Docker образ ===
* Как student@client1
* [[Язык программирования Golang]]
* [[Технология Docker]], [[Технология Docker#Предоставление прав непривилегированным пользователям]], [[Технология Docker#Dockerfile Multistage Building]] на client1
=== 4.2 Размещение кода и образа приложения в GitLab ===
* [[Инструмент GitLab#Установка через docker-compose]] GitLab
* Создаем и подключаемся учетной записью student ([[Инструмент GitLab#Управление пользователями]] GitLab)
* Можно использовать ключи ssh ([[Сервис SSH#Настройка ssh клиента]])
* Создаем новый публичный проект gowebd без Readme и копируем инструкции из подсказки
* Перед git push... отключаем Auto DevOps и !!! проверить еще раз после push
* [[Сервис Git#Обновление сетевого репозитория из локального]]
* [[Инструмент GitLab#GitLab Docker Registry]]
* Docker [[Технология Docker#Insecure Private Registry]] на client1 для проверки, можно использовать подсказки из раздела container_registry а затем удалить образ из GitLab
* [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate
* Включаем [[Технология Docker#Insecure Private Registry]] (можно [[Сервис SSH#SCP]] c client1), копируем "Registration token" для gitlab-runner в режиме [[Инструмент GitLab#Регистрация DooD]]
* Добавляем в проект [[Инструмент GitLab#Пример CI с использованием контейнеров]] и используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]]) для сборки Docker образов
* Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate
* Удаляем Runner в GitLab
* [[Технология Docker#Обзор и удаление]] образов gowebd c gate (может понадобиться -f)
* Отключаем [[Технология Docker#Insecure Private Registry]]
* Повторяем [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate
* Копируем "Registration token" для gitlab-runner в режиме [[Инструмент GitLab#Регистрация DinD]]
* Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]]
=== 4.3 Сборка образа в k8s ===
8 DEVOPS2
* После того, как пройдем helm
* Останавливаем gitlab-runner на gate и удаляем его из проекта gowebd
* [[Система Kubernetes#Работа с публичными репозиториями]] на примере gitlab-runner
* [[Инструмент GitLab#Пример CI с использованием контейнеров]] в k8s
==== Вопросы ====
===== Модуль 5: CD приложения =====
==== Теория ====
==== Лабораторные работы: CD приложения ====
=== 5.1 Вручную ===
5 DEVOPS2
* С node1 разворачиваем gowebd используя [[Система Kubernetes#namespace для своего приложения]] (меняем имя образа, не меняем имена файлов манифестов и метки), потребуется выполнить следующий шаг
* [[Система Kubernetes#Настройка доступа к Insecure Private Registry]] для kubeadm кластера
* Демонстрация использования Deployment для управления версиями
* [[Система Kubernetes#Добавление insecure_registries через Kubespray]]
* Использование [[Система Kubernetes#Ingress]] вариант [[Система Kubernetes#Baremetal ingress-nginx-controller]] на [[Система Kubernetes#ingress example]] в kubeadm кластере
* Использование [[Система Kubernetes#Управление дополнениями через Kubespray]] для включения Ingress
* [[Пакет OpenSSL#Создание самоподписанного сертификата]] (gowebd без altdns)
* [[Система Kubernetes#secrets tls]]
=== 5.2 GitOps ===
6 DEVOPS2
* Воспроизводим и качественно продолжаем то, на чем остановились на 1-м курсе
* Устанавливаем [[Инструмент GitLab#GitLab Runner]] на server (из dpkg)
* Устанавливаем [[Система Kubernetes#Инструмент командной строки kubectl]] на server
* Настраиваем [[Система Kubernetes#Подключение к кластеру]] для пользователя gitlab-runner на server
* Создаем каталог gowebd-k8s пользователем gitlab-runner, [[Инструмент GitLab#Пример shell Kubernetes]], service и ingress можно оставить из лаборатороной работы 5.1
* Настраиваем stage deploy через envsubst ([[Инструмент GitLab#Пример shell Kubernetes]], см. выше)
* Создаем проект gowebd-k8s, что-бы не "возиться" с ключами ssh, указать:
gitlab-runner@server:~/gowebd-k8s$ git remote add origin http://server.corpX.un/student/gowebd-k8s.git
* Проводим [[Инструмент GitLab#Регистрация]] gitlab runner в этом проекте (вариант из командной строки)
* Настраиваем зависимость между проектами через stage deploy в [[Инструмент GitLab#Пример CI с использованием контейнеров]]
* Увеличиваем версию, добавляем соответствующий тег, проверяем
$ curl https://gowebd.corpX.un -k
=== 5.3 Helm ===
8 DEVOPS2
* [[Система Kubernetes#Удаление объектов]] (весь namespace)
* [[Система Kubernetes#Установка Helm]]
* Использование [[Система Kubernetes#Управление дополнениями через Kubespray]] для включения Helm
* [[Система Kubernetes#Развертывание своего приложения]] (webd-chart с образом gowebd)
* Настраиваем stage deploy через helm ([[Инструмент GitLab#Пример shell Kubernetes]], см. выше)
* [[Система Kubernetes#Работа со своим репозиторием]] для развертывания приложения на kube кластере (используем проект gowebd)
* Настраиваем DNS на кластер kube
server# cat /etc/bind/corpX.un
...
webd A 192.168.X.222
A 192.168.X.223
gowebd CNAME webd
...
* Возвращаем DNS на кластер node
* Лабораторная работа 4.3
=== 5.4 ArgoCD ===
!!! ВНИМАНИЕ !!! Вместо 9-го фрагмента записи (его лучше просто просмотреть) рекомендую выполнить лабораторные работы из вебинара [[https://rutube.ru/video/356186164509624a323079127c4bd690/|Доступ к приложениям в Bare-Metal Kubernetes]], там есть все что нужно, плюс, много дополнительного материала !!!
* [[Система Kubernetes#Работа со своим репозиторием]] для удаления приложения с kube кластера
* Настраиваем DNS на кластер kube
* Используем [[Контроллер ArgoCD]] на kube кластере для деплоя приложения
=== 5.5 Работа с хранилищами в Kubernetes ===
!!! Если есть "настрой", можно выполнить лабораторные работы из этого вебинара:
* [[https://rutube.ru/video/9c55de0f39d761d569761d2f553e0f61/|Работа с хранилищами в Kubernetes]]
=== 5.6 Обновление кластера Kubernetes ===
!!! Если Вы "еще здесь")), есть можно выполнить лабораторные работы из этого вебинара:
* [[https://rutube.ru/video/1b0cde4db02403e1e2a8a79cafda4131/|Обновление кластера Kubernetes]]
==== Вопросы ====