====== 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 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 кластере * Настраиваем 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://youtu.be/oIczkkD-hOU|Доступ к приложениям в Bare-Metal Kubernetes]], там есть все что нужно, плюс, много дополнительного материала !!! * [[Система Kubernetes#Работа со своим репозиторием]] для удаления приложения с kube кластера * Настраиваем DNS на кластер kube * Используем [[Контроллер ArgoCD]] на kube кластере для деплоя приложения === 5.5 Работа с хранилищами в Kubernetes === !!! Если есть "настрой", можно выполнить лабораторные работы из этого вебинара: * [[https://www.youtube.com/watch?v=-5_XB4EcU9s|Работа с хранилищами в Kubernetes]] ==== Вопросы ====