This shows you the differences between two versions of the page.
devops2._использование_kubernetes_2023 [2025/03/19 07:50] val created |
devops2._использование_kubernetes_2023 [2025/03/19 08:10] (current) val |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== DevOps1. Основные инструменты ====== | + | ====== DevOps2. Использование Kubernetes ====== |
===== Программа курса ===== | ===== Программа курса ===== | ||
- | * [[https://www.specialist.ru/course/kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]] | + | * [[https://www.specialist.ru/course/devops2|DevOps. Уровень 2. Использование Kubernetes]] |
* [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] | * [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] | ||
- | ===== Модуль 0. Подготовка к занятию ===== | + | ===== Модуль 0. Подготовка стенда в классе ===== |
- | - Узнать и записать свой номер стенда: X= | + | * Узнать свой номер стенда |
- | - Сообщить его в чат преподавателю | + | * Проверить наличие дистрибутивов и образов (будет сделано) |
+ | * Использовать кэширующий прокси для ускорения загрузки | ||
- | ===== Модуль 1: Введение и развертывание стенда ===== | + | ===== Модуль 1: Развертывание стенда ===== |
==== Теория ==== | ==== Теория ==== | ||
- | * [[https://dzen.ru/a/ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]] | + | * Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] |
- | * Ссылки в разделе [[Сервис Git]] | + | |
- | ==== Лабораторные работы: Развертывание стенда и инициализация репозитория Git ==== | + | ==== Лабораторные работы: Развертывание стенда ==== |
- | + | ||
- | * Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] или [[https://rutube.ru/video/18b52d9721f7464b4485fec7d894e8ca/|Развертывание стенда дома (смотреть с 13-й минуты)]] | + | |
=== 1.1 Схема стенда, импорт, настройка и запуск VM gate и server === | === 1.1 Схема стенда, импорт, настройка и запуск VM gate и server === | ||
Line 38: | Line 36: | ||
cd conf/virtualbox/ | cd conf/virtualbox/ | ||
- | !!! 8 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! | + | !!! 9 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! |
- | ./setup.sh X 8 | + | ./setup.sh X 9 |
</code> | </code> | ||
=== 1.2 Настройка сети VM gate и server === | === 1.2 Настройка сети VM gate и server === | ||
Line 62: | Line 60: | ||
* Создать в Putty профили gate, server и подключиться | * Создать в Putty профили gate, server и подключиться | ||
- | === 1.3 Инициализация репозитория Git === | + | === 1.3 настройка сервисов DNS и DHCP === |
- | * [[Сервис Git]], команды init, add, commit для каталога /etc на server | + | * [[Финальная настройка DNS сервера]] на server |
- | + | ||
- | * [[Финальная настройка DNS сервера]] | + | |
<code> | <code> | ||
- | server:~# git -C conf/ pull | ||
- | |||
server:~# sh conf/dns.sh | server:~# sh conf/dns.sh | ||
</code> | </code> | ||
Line 83: | Line 77: | ||
</code> | </code> | ||
- | === 1.4 Работа с репозиторием Git === | + | * Настройка сервера DHCP на gate |
- | + | ||
- | !!! Методическая рекомендация, запустить установку Docker (только на server) из лабораторной работы 2.1 | + | |
<code> | <code> | ||
- | server# cat /etc/bind/corpX.un | + | gate:~# sh conf/dhcp.sh |
- | </code><code> | + | |
- | ... | + | |
- | webd A 192.168.X.10 | + | |
</code> | </code> | ||
- | |||
- | * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
- | - Перечислите и объясните команды git | ||
- | ===== Модуль 2: Docker ===== | + | ===== Модуль 2: Развертывание кластера через kubeadm ===== |
==== Теория ==== | ==== Теория ==== | ||
- | * Ссылки в разделах [[Технология cgroup]], [[Технология namespaces]] и [[Технология Docker]] | + | ==== Лабораторные работы: Развертывание учебного кластера ==== |
- | * [[https://ru.wikipedia.org/wiki/Микросервисная_архитектура|Микросервисная архитектура]] | + | |
- | ==== Лабораторные работы: Установка docker и работа с контейнерами ==== | + | * !!! Параллельно в паузах !!! |
- | === 2.1 Собираем docker контейнер === | + | * [[Переменные окружения#Установка переменных окружения]] 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]]) | ||
- | * [[Технология Docker#Установка]] Docker из базового репозитория на **server** и из репозитория вендора на **gate** | + | === 2.1 Развертывание кластера === |
- | !!! Методическая рекомендация, запустить установку Golang из этой лабораторной работы | + | * Развертываем с использованием [[Технология Vagrant]] узлы node1,2,3 (!!! в provision_once.sh раскомментировать docker) для кластера |
+ | * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | ||
+ | * [[Система Kubernetes#Развертывание через kubeadm]] | ||
- | * Обсудить [[Технология Docker#Создание образа для приложения вручную]] было в ЛИН3 | + | === 2.2 Знакомство с k8s === |
- | !!! Методическая рекомендация, запустить установку docker-compose из лабораторной работы 2.2 | + | * [[Система Kubernetes#Настройка автодополнения]] |
+ | * [[Система Kubernetes#Базовые объекты k8s]] (c node1#) | ||
+ | * [[Система Kubernetes#Volumes]] [[Команда dd#Создание пустого файла]] (внутри пода) | ||
+ | * [[Система Kubernetes#ConfigMap]] + Service | ||
- | * Обсудить [[Технология Docker#Создание образа для приложения с использованием Dockerfile]] будет в доп. практикуме | + | ==== Вопросы ==== |
- | == 2.1.2 Приложение на Python == | ||
- | * [[Язык программирования Python#Виртуальная среда Python]] (учетная запись root на server) | ||
- | * Создаем [[Язык программирования Python#Web приложение]] на Python | ||
- | !!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1 | + | ===== Модуль 3: Развертывание кластера через Kubespray ===== |
- | * Собираем образ [[Технология Docker#Приложение python pywebd]] | + | ==== Теория ==== |
- | * Вопросы оптимизации Dockerfile и безопасности | + | |
- | * [[Технология Docker#Анализ параметров запущенного контейнера]] | ||
- | == 2.1.3 Приложение на Go == | + | ==== Лабораторные работы: Развертывание кластера предприятия ==== |
- | + | ||
- | !!! Методическая рекомендация, запустить установку GitLab из лабораторной работы 4.1 | + | |
- | + | ||
- | * [[Язык программирования Golang]] (учетная запись root на gate) | + | |
- | * Создаем [[Язык программирования Golang#Web приложение]] на Golang | + | |
- | + | ||
- | <code> | + | |
- | ~/gowebd# apt purge golang-go; apt autoremove -y | + | |
- | </code> | + | |
- | * Собираем образ [[Технология Docker#Приложение golang gowebd]] | + | === 3.1 Подготовка узлов === |
- | * Вопросы оптимизации размера образа | + | |
- | * Расширение [[Технология Docker#docker buildx]] | + | * Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] |
- | * Вопросы оптимизации времени сборки образа | + | * Настройка IP на kube1-4 ( через [[Сервис DHCP]]) |
+ | * Настройка файлов конфигурации сети через Ansible([[Сервис Ansible#Настройка групп управляемых систем]], [[Сервис Ansible#Настройка транспорта ssh]] и [[Сервис Ansible#Использование ролей]] | ||
+ | * [[Сервис Ansible#Использование модулей]] для отключения swap на kube1-4 | ||
- | * [[Технология Docker#Обзор и удаление]] ненужных ресурсов Docker | + | === 3.2 Развертывание кластера === |
- | === 2.2 Связываем и деплоим контейнеры с помощью docker-compose === | + | * [[Система Kubernetes#Развертывание через Kubespray]] |
- | * [[Технология Docker#Использование готовых образов приложений]] | + | === 3.3 Управление кластером === |
- | * Использование [[Технология Docker#docker-compose]] | + | |
- | * Можно показать "кубернетес" - [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab) | + | * [[Система Kubernetes#Добавление узла через Kubespray]] |
+ | * [[Система Kubernetes#Добавление insecure_registries через Kubespray]] | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
- | - Зачем нужен Docker? | + | ===== Модуль 4: Разработка и CI приложения ===== |
- | - Чем Docker отличается от LXC? | + | |
- | - Чем Docker контейнер отличается от Docker образа? | + | |
- | - Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами? | + | |
- | - Зачем нужен Dockerfile? | + | |
- | - Зачем "запихивать" сразу много инструкций в команду RUN? | + | |
- | - Зачем нужен docker-compose? | + | |
- | ===== Модуль 3. Инфраструктура как код ===== | + | |
==== Теория ==== | ==== Теория ==== | ||
- | * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] | + | ==== Лабораторные работы: Разработка и CI приложения ==== |
- | * Построение ландшафта облачной инфраструктуры с использованием [[https://ru.wikipedia.org/wiki/Terraform|HashiCorp Terraform]] | + | |
- | * Видео урок: [[On-premise Terraform]] | + | |
- | * Управление инфраструктурой с использованием [[Сервис Ansible]] | + | |
- | ==== Лабораторные работы: Управление инфраструктурой ==== | + | * Разворачиваем систему client1 для разработчика ([[Настройка сети в Linux]]) |
+ | * [[Настройка командных интерпретаторов]] | ||
- | === 3.1 Управление инфраструктурой с использованием Vagrant === | + | === 4.1 Разработка приложения и упаковка его в Docker образ === |
- | !!! Методическая рекомендация, запустить установку Ansible из лабораторной работы 3.2 | + | * Как student@client1 |
+ | * [[Язык программирования Golang]] | ||
+ | * [[Технология Docker]], [[Технология Docker#Предоставление прав непривилегированным пользователям]], [[Технология Docker#Dockerfile Multistage Building]] на client1 | ||
- | * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | + | === 4.2 Размещение кода и образа приложения в GitLab === |
- | * Обзор команд [[Технология VirtualBox]] | + | |
- | * Обзор [[Технология Vagrant]] | + | |
- | * Развертываем с использованием [[Технология Vagrant#Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 | + | |
- | === 3.2 Управление инфраструктурой с использованием Ansible === | + | * [[Инструмент GitLab#Установка через docker-compose]] GitLab |
+ | * Создаем и подключаемся учетной записью student ([[Инструмент GitLab#Управление пользователями]] GitLab) | ||
+ | * Можно использовать ключи ssh ([[Сервис SSH#Настройка ssh клиента]]) | ||
+ | * Создаем новый публичный проект gowebd без Readme и копируем инструкции из подсказки | ||
+ | * Перед git push... отключаем Auto DevOps и !!! проверить еще раз после push | ||
+ | * [[Сервис Git#Обновление сетевого репозитория из локального]] | ||
- | * Общие принципы и модели управления (Push and Pull) | + | * [[Инструмент GitLab#GitLab Docker Registry]] |
- | * Ansible - [[Сервис Ansible#Установка на управляющей системе]] | + | * Docker [[Технология Docker#Insecure Private Registry]] на client1 для проверки, можно использовать подсказки из раздела container_registry а затем удалить образ из GitLab |
- | * [[Сервис Ansible#Настройка групп управляемых систем]] | + | |
- | * [[Сервис Ansible#Настройка транспорта ssh]] с [[Сервис SSH#Парольная аутентификация]] | + | |
- | * [[Сервис Ansible#Использование модулей]] для тестирования связи с управляемыми системами | + | |
- | * Установка Docker с помощью [[Сервис Ansible#Использование playbook|Ansible playbook]] на node1,2,3 (лучше во время перерыва) | + | |
- | * [[Сервис Ansible#Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) | + | |
- | * Обсудить варианты [[Сервис Ansible#Использование handlers]] | + | |
- | * Развертывание кластера приложения с [[Сервис Ansible#Использование ролей]] Ansible | + | |
- | ==== Вопросы ==== | + | * [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate |
+ | * Включаем [[Технология Docker#Insecure Private Registry]] (можно [[Сервис SSH#SCP]] c client1), копируем "Registration token" для gitlab-runner в режиме [[Инструмент GitLab#Регистрация DooD]] | ||
- | - Что общего и в чем отличие между Ansible, Vagrant и Terraform? | + | * Добавляем в проект [[Инструмент GitLab#Пример CI с использованием контейнеров]] и используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]]) для сборки Docker образов |
- | - Что означает термин Provision в Vagrant? | + | |
- | - Что такое module, playbook, role в Ansible? | + | |
- | - Назовите каталоги в роли Ansible | + | |
- | - Что должно быть установлено на целевой системе для управления через Ansible? | + | |
- | - Каким образом Vagrant управляет VM? | + | |
- | - Как реализован Ansible provision в Vagrant? | + | |
- | ===== Модуль 4. Continuous Integration ===== | + | * Останавливаем, очищаем конфигурацию [[Инструмент 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 с использованием контейнеров]] | ||
- | * [[https://ru.wikipedia.org/wiki/Непрерывная_интеграция]] | ||
- | * [[https://simpleone.ru/glossary/ci-cd-cd-continuous-integration-continuous-delivery-continuous-deployment|CI/CD/CD. Continuous Integration / Continuous Delivery / Continuous Deployment]] | ||
- | * [[https://youtu.be/FeD6VBY2Xss|Вебинар: Вход в CI/CD для Linux-админа]] | + | === 4.3 Сборка образа в k8s === |
- | * [[https://habr.com/ru/articles/716454/|Статья: Самый простой пример CI/CD]] | + | |
- | ==== Лабораторные работы: От Git к CI/CD ==== | + | 8 DEVOPS2 |
- | === 4.1 Обзор GitLab === | + | * После того, как пройдем helm |
- | + | * Останавливаем gitlab-runner на gate и удаляем его из проекта gowebd | |
- | * [[Инструмент GitLab#Установка из репозитория]] | + | * [[Система Kubernetes#Работа с публичными репозиториями]] на примере gitlab-runner |
- | + | * [[Инструмент GitLab#Пример CI с использованием контейнеров]] в k8s | |
- | !!! Методическая рекомендация, скачать gitlab-runner из лабораторной работы 4.2 | + | |
- | + | ||
- | * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) | + | |
- | * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab | + | |
- | * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab | + | |
- | + | ||
- | === 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners === | + | |
- | + | ||
- | * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell** | + | |
- | + | ||
- | * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "выкатку" в "прод" после Commit в ветку main | + | |
==== Вопросы ==== | ==== Вопросы ==== | ||
- | - Чем отличается GitLab от Git? | + | ===== Модуль 5: CD приложения ===== |
- | - Для чего нужен GitLab Runner? | + | |
- | - Как называется файл для CI/CD в GitLab? | + | |
- | + | ||
- | ===== Модуль 5. Обзор задач QA ===== | + | |
==== Теория ==== | ==== Теория ==== | ||
- | * [[https://testengineer.ru/dorogostoyashchie-bagi/|7 эпичнейших багов в истории человечества]] | + | ==== Лабораторные работы: CD приложения ==== |
- | * [[https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения]] | ||
- | * [[https://www.atlassian.com/ru/continuous-delivery/software-testing/types-of-software-testing|Различные виды тестирования ПО]] | ||
- | * [[https://ru.wikipedia.org/wiki/Ручное_тестирование]] | ||
- | * [[https://ru.wikipedia.org/wiki/Автоматизированное_тестирование]] | ||
- | * [[https://ru.wikipedia.org/wiki/Lint]] | ||
- | * [[https://ru.wikipedia.org/wiki/Smoke_test]] | ||
- | * [[https://eurobyte.ru/articles/v-chem-otlichiya-nagruzochnogo-ot-stress-testirovaniya/|В чем отличия нагрузочного от стресс-тестирования]] | ||
- | ==== Лабораторные работы: Задачи тестирования ==== | ||
- | === 5.1 Ручное тестирование функциональности и работа с ветками проекта === | + | === 5.1 Вручную === |
- | * Понадобится win client2 (ip/m: 172.16.1.100+X/24, dns: 172.16.1.254) | + | 5 DEVOPS2 |
- | * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#Настройка клиента]]) в windows или linux | + | * С node1 разворачиваем gowebd используя [[Система Kubernetes#namespace для своего приложения]] (меняем имя образа, не меняем имена файлов манифестов и метки), потребуется выполнить следующий шаг |
- | * Добавить [[Сервисы Gateway и routing#Управление таблицей маршрутизации]] на gate (можно отключить маршрут в LAN и настроить [[Сервис NAT]] для зрелищности, !!! вернуть обратно для доп. работ) | + | * [[Система 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]] | ||
- | * Добавляем параметры dhcp-option,block-outside-dns и Commit в test с созданием Merge requests и наблюдаем "выкатку" в "тестовую" среду, проверяем работу сервиса в ней | + | === 5.2 GitOps === |
- | * Одобряем Merge requests и наблюдаем "выкатку" в "прод" | + | |
- | === 5.2 Тестирование в этапах развертывания образа приложения в Docker среде === | + | 6 DEVOPS2 |
- | !!! Методическая рекомендация, включить GitLab Docker Registry из этой лабораторной работы | + | * Воспроизводим и качественно продолжаем то, на чем остановились на 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, указать: | ||
+ | <code> | ||
+ | gitlab-runner@server:~/gowebd-k8s$ git remote add origin http://server.corpX.un/student/gowebd-k8s.git | ||
+ | </code> | ||
+ | * Проводим [[Инструмент GitLab#Регистрация]] gitlab runner в этом проекте (вариант из командной строки) | ||
+ | * Настраиваем зависимость между проектами через stage deploy в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | ||
+ | * Увеличиваем версию, добавляем соответствующий тег, проверяем | ||
+ | <code> | ||
+ | $ curl https://gowebd.corpX.un -k | ||
+ | </code> | ||
- | * [[Язык программирования Golang#golangci-lint]] кода приложения | + | === 5.3 Helm === |
- | * Сборка образа [[Технология Docker#Приложение golang gowebd]] | + | |
- | * [[Технология Docker#Smoke test]] работоспособности приложения | + | |
- | * Размещение образа приложения в Registry | + | 8 DEVOPS2 |
- | * Включаем [[Инструмент GitLab#GitLab Docker Registry]] | + | |
- | * Включаем [[Технология Docker#Insecure Private Registry]] и [[Технология Docker#Аутентификация в Registry]] | + | |
- | * Создаем (Public, без README) проект gowebd | + | |
- | * Cохраняем образ, [[Технология Docker#Использование Private Registry]] | + | |
- | !!! Методическая рекомендация, запустить установку minikube из лабораторной работы 6.1 | + | * [[Система Kubernetes#Удаление объектов]] (весь namespace) |
+ | * [[Система Kubernetes#Установка Helm]] | ||
+ | * Использование [[Система Kubernetes#Управление дополнениями через Kubespray]] для включения Helm | ||
+ | * [[Система Kubernetes#Развертывание своего приложения]] (webd-chart с образом gowebd) | ||
+ | * Настраиваем stage deploy через helm ([[Инструмент GitLab#Пример shell Kubernetes]], см. выше) | ||
+ | * [[Система Kubernetes#Работа со своим репозиторием]] для развертывания приложения на kube кластере (используем проект gowebd) | ||
+ | * Настраиваем DNS на кластер kube | ||
+ | <code> | ||
+ | server# cat /etc/bind/corpX.un | ||
+ | ... | ||
+ | webd A 192.168.X.222 | ||
+ | A 192.168.X.223 | ||
+ | gowebd CNAME webd | ||
+ | ... | ||
+ | </code> | ||
+ | * Возвращаем DNS на кластер node | ||
+ | * Лабораторная работа 4.3 | ||
- | * Можно продемонстрировать развертывание приложения на nodeN | + | === 5.4 ArgoCD === |
- | === 5.3 Тестирование в процессе CI и управление версиями === | + | !!! ВНИМАНИЕ !!! Вместо 9-го фрагмента записи (его лучше просто просмотреть) рекомендую выполнить лабораторные работы из вебинара [[https://rutube.ru/video/356186164509624a323079127c4bd690/|Доступ к приложениям в Bare-Metal Kubernetes]], там есть все что нужно, плюс, много дополнительного материала !!! |
- | * Проводим [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | * [[Система Kubernetes#Работа со своим репозиторием]] для удаления приложения с kube кластера |
- | * Используем [[Инструмент GitLab#Регистрация DooD]] для добавления runner в проект gowebd | + | * Настраиваем DNS на кластер kube |
+ | * Используем [[Контроллер ArgoCD]] на kube кластере для деплоя приложения | ||
- | * Отключаем gowebd->CI/CD Settings->Auto DevOps | + | === 5.5 Работа с хранилищами в Kubernetes === |
- | * Добавляем в папку gowebd [[Инструмент GitLab#Пример CI с использованием контейнеров]] | + | |
- | * Используя инструкции из GitLab добавляем папку в проект и наблюдаем сборку образа с тэгом commit hash | + | |
- | * Можно продемонстрирорвать Smoke test, заменив порт в коде | + | |
- | * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | !!! Если есть "настрой", можно выполнить лабораторные работы из этого вебинара: |
- | * Удаляем Runner в GitLab | + | |
- | * [[Технология Docker#Обзор и удаление]] (преподавателю можно всех) образов c gate | + | |
- | * Отключаем [[Технология Docker#Insecure Private Registry]] | + | |
- | * Повторяем [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate | + | * [[https://rutube.ru/video/9c55de0f39d761d569761d2f553e0f61/|Работа с хранилищами в Kubernetes]] |
- | * Используем [[Инструмент GitLab#Регистрация DinD]] для добавления runner в проект gowebd | + | |
- | * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | + | |
- | * Увеличиваем версию и наблюдаем сборку образа с тэгом commit hash | + | |
- | * Можно продемонстрирорвать Lint test, добавив лишнюю переменную в коде | + | |
- | * Используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]] или Code->Tags) для указания версии Docker образов | + | === 5.6 Обновление кластера Kubernetes === |
- | ==== Вопросы ==== | + | !!! Если Вы "еще здесь")), есть можно выполнить лабораторные работы из этого вебинара: |
- | - Что такое "ветка" в Git и почему переименовали master в main? | + | * [[https://rutube.ru/video/1b0cde4db02403e1e2a8a79cafda4131/|Обновление кластера Kubernetes]] |
- | - Из каких частей состоит имя образа? | + | |
- | - Как работает DooD и DinD? | + | |
- | - Что такое Linter? | + | |
- | - Что такое Smoke test? | + | |
- | ===== Модуль 6. Kubernetes ===== | ||
- | |||
- | ==== Теория ==== | ||
- | |||
- | * [[https://timeweb.cloud/blog/sistemy-orkestracii-kontejnerov|Системы оркестрации контейнеров: что такое и лучше для вашего проекта]] | ||
- | * [[https://habr.com/ru/articles/589415/|K8S для начинающих. Первая часть]] | ||
- | * [[https://habr.com/ru/amp/publications/651653/|K8S для начинающих. Часть вторая]] | ||
- | ==== Лабораторные работы: Работа с minikube, cоздание deployment и service ==== | ||
- | |||
- | === 6.1 Установка minikube === | ||
- | |||
- | * Для доступа к репозиторию, понадобится включить [[Сервисы Gateway и routing]] | ||
- | * [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (можно, если будет время, показать CD) | ||
- | |||
- | === 6.2 Создание deployment и service === | ||
- | |||
- | * Изучаем [[Система Kubernetes#Базовые объекты k8s]] - [[Система Kubernetes#Deployment]] и [[Система Kubernetes#Service]] | ||
- | * Для понимания работы [[Система Kubernetes#Ingress]] (будет в следующем курсе), можно продемонстрировать использование [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы | ||
- | |||
- | * Если есть 30 минут, можно показать CD через envsubst "**3.3 Разворачивание нужной версии приложения в kubernetes**" из Девопс2 | ||
- | * Понадобится назначить метку k8s-deploy ранеру и | ||
- | <code> | ||
- | server# cp -v /home/gitlab-runner/.minikube/cache/linux/amd64/v*/kubectl /usr/local/bin/ | ||
- | </code> | ||
- | * Можно показать все, используя Web IDE | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
- | |||
- | * Почему Kubernetes часто обозначают K8s? | ||
- | * Чем K8s отличается от Docker-Compose? | ||
- | * Что используется для описания состояния объектов в K8s? | ||
- | * Как связаны понятия Deployment, Replica Sets, Pods? | ||
- | * Для чего используются Namespace? | ||
- | |||
- | ===== Модуль 7. Дополнительные материалы ===== | ||
- | |||
- | * [[Вход в Jenkins]] и процесс непрерывной интеграции для администратора Linux (выполняем работы с 00:05:30 до конца) | ||
- | |||
- | * [[Зачем нужен Kubernetes]] (выполняем работы с 00:02:45 до 00:53:00 и с 01:08:33 до конца), понадобятся [[Средства программирования shell#Ресурсы Web сервера на shell]] | ||
- | |||
- | * [[On-premise Terraform|Развертывание инфраструктуры в On-premise облаке с использованием Terraform]] (выполняем работы с 00:10:15 до 00:35:30 и с 00:40:45 до конца) | ||
- | * Понадобится освободить ресурсы и исключить кофликт по IP адресам, остановив узлы кластера | ||
- | <code> | ||
- | Administrator@RAZLIV_48 ~/conf/vagrant/nodes (master) | ||
- | |||
- | λ vagrant halt | ||
- | </code> | ||
- | * Понадобится развернуть VM home-computer ([[Технология VirtualBox#Вложенная виртуализация]]) подключить к сети класса (WAN), увеличить RAM до 8192, запустить, назначить hostname, выяснить IP адрес и подключиться PuTTY | ||
- | * Понадобится установить VNC [[https://www.tightvnc.com/download.php]], все по умолчанию | ||
- | * Перед "Шаг 3": перенести home-computer в LAN, назанчить IP .200 из сети 192.168.X.0/24 и считать ее "домашней сетью" | ||
- | * Шаг 4 - в режиме просмотра |