This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
devops1._основные_инструменты [2025/03/19 07:46] val [DevOps2. Использование Kubernetes 2025] |
devops1._основные_инструменты [2025/03/19 07:58] (current) val |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== DevOps2. Использование Kubernetes ====== | + | ====== DevOps1. Основные инструменты ====== |
- | ===== При вводе в эксплуатацию учесть ===== | + | ===== Программа курса ===== |
- | * 4GB на узел для лонгхорн и кейклоак | + | * [[https://www.specialist.ru/course/kuber|DevOps. Уровень 1. Инфраструктура как код, основные инструменты]] |
- | * 12-й дебиан | + | * [[https://www.specialist.ru/track/dp-devops|ДП-ДЕВОПС-М]] |
- | * Нужен работающий k8s для демонстрации, в ожидании Kubespray | + | |
===== Модуль 0. Подготовка к занятию ===== | ===== Модуль 0. Подготовка к занятию ===== | ||
Line 12: | Line 11: | ||
- Сообщить его в чат преподавателю | - Сообщить его в чат преподавателю | ||
- | ===== Модуль 1. Развертывание стенда и kubernetes кластера ===== | + | ===== Модуль 1: Введение и развертывание стенда ===== |
==== Теория ==== | ==== Теория ==== | ||
- | ==== Лабораторные работы: Развертывание стенда и kubernetes кластера ==== | + | * [[https://dzen.ru/a/ZVIBk2kT0ntemhwK|∞ Дорожная карта DevOps-инженера в 2023 году]] |
+ | * Ссылки в разделе [[Сервис Git]] | ||
+ | |||
+ | ==== Лабораторные работы: Развертывание стенда и инициализация репозитория Git ==== | ||
* Разворачиваем стенд курса [[https://www.specialist.ru/course/yun2-b|Linux. Уровень 2. Администрирование сервисов и сетей]] или [[https://rutube.ru/video/18b52d9721f7464b4485fec7d894e8ca/|Развертывание стенда дома (смотреть с 13-й минуты)]] | * Разворачиваем стенд курса [[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 === |
<code> | <code> | ||
Запустите с правами Administrator | Запустите с правами Administrator | ||
Line 30: | Line 32: | ||
cd | cd | ||
- | test -d conf && rm -rf conf | + | test -d conf && rm -r conf |
git clone http://val.bmstu.ru/unix/conf.git | git clone http://val.bmstu.ru/unix/conf.git | ||
Line 36: | Line 38: | ||
cd conf/virtualbox/ | cd conf/virtualbox/ | ||
- | !!! 9 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! | + | !!! 8 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! |
- | ./setup.sh X 9 | + | ./setup.sh X 8 |
</code> | </code> | ||
- | ==== 1.2 Настройка сети VM gate и server ==== | + | === 1.2 Настройка сети VM gate и server === |
* [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] | * [[Настройка стендов слушателей#Настройка виртуальных систем Unix]] с использованием [[Настройка стендов слушателей#Скрипты автоконфигурации]] | ||
Line 60: | Line 62: | ||
* Создать в Putty профили gate, server и подключиться | * Создать в Putty профили gate, server и подключиться | ||
- | ==== 1.3 Подготовка инфраструктуры для kubespray ==== | + | === 1.3 Инициализация репозитория Git === |
- | * [[Финальная настройка DNS сервера]] на server | + | * [[Сервис Git]], команды init, add, commit для каталога /etc на server |
+ | |||
+ | * [[Финальная настройка DNS сервера]] | ||
<code> | <code> | ||
server:~# git -C conf/ pull | server:~# git -C conf/ pull | ||
Line 69: | Line 73: | ||
</code> | </code> | ||
- | * Добавляем DNS записи kubeN A 192.168.X.220+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | ||
* Настройка клиента DNS на gate и server | * Настройка клиента DNS на gate и server | ||
<code> | <code> | ||
Line 77: | Line 80: | ||
nameserver 192.168.X.10 | nameserver 192.168.X.10 | ||
</code><code> | </code><code> | ||
- | # nslookup kubeN | + | # nslookup ns |
</code> | </code> | ||
- | * Настройка сервера DHCP на gate | + | === 1.4 Работа с репозиторием Git === |
- | <code> | + | |
- | gate:~# git -C conf/ pull | + | |
- | gate:~# sh conf/dhcp.sh | + | !!! Методическая рекомендация, запустить установку Docker (только на server) из лабораторной работы 2.1 |
+ | |||
+ | <code> | ||
+ | server# cat /etc/bind/corpX.un | ||
+ | </code><code> | ||
+ | ... | ||
+ | webd A 192.168.X.10 | ||
</code> | </code> | ||
- | * Настройка MAC адресов 08:00:27:12:34:5N (для получения назначенного IP через [[Сервис DHCP]]) и запуск kube1-4 | ||
+ | * [[Сервис Git]], команды git -C /etc/ ..., log, show, diff, reset | ||
+ | ==== Вопросы ==== | ||
- | ==== 1.4 Разворачивание кластера Kubernetes через Kubespray ==== | + | - Перечислите и объясните команды git |
- | * [[Система Kubernetes#Развертывание через Kubespray]] | + | ===== Модуль 2: Docker ===== |
+ | ==== Теория ==== | ||
- | ==== 1.5 Развертывание GitLab (для 3-го модуля) ==== | + | * Ссылки в разделах [[Технология cgroup]], [[Технология namespaces]] и [[Технология Docker]] |
+ | * [[https://ru.wikipedia.org/wiki/Микросервисная_архитектура|Микросервисная архитектура]] | ||
- | * [[Пакет OpenSSL#Создание самоподписанного сертификата]] (wild) | + | ==== Лабораторные работы: Установка docker и работа с контейнерами ==== |
- | * [[Пакет OpenSSL#Импорт сертификата центра сертификации]] на server (что бы не пере запускать docker) | + | |
- | * Установка [[Технология Docker#docker-compose]] | + | |
- | * Подготовка к [[Инструмент GitLab#Включение TLS]] в GitLab | + | |
- | * [[Инструмент GitLab#Установка через docker-compose|Установка GitLab через docker-compose]] | + | |
- | * Подключаемся с хост системы по FQDN (для правильного Project URL) и создаем УЗ student с правами администратора (можно в следующую паузу) | + | |
- | ==== 1.6 Развертывание рабочей станции пользователя (для 4-го модуля) ==== | + | === 2.1 Собираем docker контейнер === |
- | * Разворачиваем win client2 (ip/m: 172.16.1.100+X/24, dns: 192.168.X.10) | + | * [[Технология Docker#Установка]] Docker из базового репозитория на **server** и из репозитория вендора на **gate** |
- | * Копируем ca.crt | + | |
- | <code> | + | |
- | server# apt install apache2 | + | |
- | server# rm /var/www/html/index.html | + | !!! Методическая рекомендация, запустить установку Golang из этой лабораторной работы |
- | server# cp wild.crt /var/www/html/ca.crt | + | * Обсудить [[Технология Docker#Создание образа для приложения вручную]] было в ЛИН3 |
- | </code> | + | |
- | * Проверяем в [[Chrome]] доступность GitLab по https | + | !!! Методическая рекомендация, запустить установку docker-compose из лабораторной работы 2.2 |
- | ==== 1.7 Разработка образов приложений (для 2-го модуля) ==== | + | * Обсудить [[Технология Docker#Создание образа для приложения с использованием Dockerfile]] будет в доп. практикуме |
- | * [[Язык программирования Golang]] на server, берем только код программы для следующего пункта | + | == 2.1.2 Приложение на Python == |
- | * Создаем Docker **файл** для [[Технология Docker#Приложение golang gowebd]] (multistage для уменьшения размера) | + | |
- | * Проводим [[Технология Docker#Аутентификация в Registry]] по **https** | + | |
- | * Создаем проект **gowebd** (Public, без README) | + | |
- | * Отключаем Auto DevOps для проекта | + | |
- | * Собираем и загружаем образ (latest), используя [[Технология Docker#Инструмент kaniko]], тестируем результат | + | |
- | * Только преподаватель | + | * [[Язык программирования Python#Виртуальная среда Python]] (учетная запись root на server) |
- | * [[Язык программирования Python]] (в venv2, без ssl (добавим в теме ingress), с конфигурацией и с /var/www, для демонстрации работы) | + | * Создаем [[Язык программирования Python#Web приложение]] на Python |
- | * Создаем и тестируем Docker образ для [[Технология Docker#Приложение python pywebd]] (безопасный вариант, для демонстрации всех нюансов в k8s) | + | |
- | * Создаем проект **pywebd** (Public (Private на следующей итерации), без README) и [[Технология Docker#Использование Private Registry]] для хранения образа (метки latest и ver1.1) | + | |
- | ==== 1.8 Работа с кластером Kubernetes ==== | + | !!! Методическая рекомендация, запустить установку Vagrant из лабораторной работы 3.1 |
- | * Добавляем корпоративный сертификат в кластер kubernetes | + | * Собираем образ [[Технология Docker#Приложение python pywebd]] |
- | <code> | + | * Вопросы оптимизации Dockerfile и безопасности |
- | bash -c ' | + | |
- | scp /var/www/html/ca.crt kube1:/usr/local/share/ca-certificates/ | + | |
- | ssh kube1 update-ca-certificates | + | |
- | ssh kube1 systemctl restart containerd | + | |
- | scp /var/www/html/ca.crt kube2:/usr/local/share/ca-certificates/ | + | |
- | ssh kube2 update-ca-certificates | + | |
- | ssh kube2 systemctl restart containerd | + | |
- | scp /var/www/html/ca.crt kube3:/usr/local/share/ca-certificates/ | + | |
- | ssh kube3 update-ca-certificates | + | |
- | ssh kube3 systemctl restart containerd | + | |
- | ' | + | |
- | kubeN# | + | * [[Технология Docker#Анализ параметров запущенного контейнера]] |
- | crictl pull server.corpX.un:5000/student/gowebd | + | |
- | crictl images | + | |
- | crictl rmi server.corpX.un:5000/student/gowebd | + | |
- | </code> | + | |
- | * Используем на kube1 [[Система Kubernetes#Инструмент командной строки kubectl]] | + | == 2.1.3 Приложение на Go == |
- | ===== Модуль 2. Объекты kubernetes, helm ===== | + | !!! Методическая рекомендация, запустить установку GitLab из лабораторной работы 4.1 |
- | ==== Теория ==== | + | * [[Язык программирования Golang]] (учетная запись root на gate) |
+ | * Создаем [[Язык программирования Golang#Web приложение]] на Golang | ||
- | * [[https://habr.com/ru/companies/slurm/articles/783708/|Что происходит, когда вы создаёте Pod в Kubernetes?]] | + | <code> |
- | ==== Теория через лабораторные работы: Управление объектами Kubernetes ==== | + | ~/gowebd# apt purge golang-go; apt autoremove -y |
+ | </code> | ||
+ | * Собираем образ [[Технология Docker#Приложение golang gowebd]] | ||
+ | * Вопросы оптимизации размера образа | ||
- | ==== 2.1 deployment, service, проверка статуса пода, настройка лимитов ==== | + | * Расширение [[Технология Docker#docker buildx]] |
+ | * Вопросы оптимизации времени сборки образа | ||
- | * Запуск и доступ к приложениям в k8s | + | * [[Технология Docker#Обзор и удаление]] ненужных ресурсов Docker |
- | * [[https://kubernetes.io/docs/tasks/inject-data-application/define-environment-variable-container/|Define Environment Variables for a Container]] | + | === 2.2 Связываем и деплоим контейнеры с помощью docker-compose === |
- | * [[https://kubernetes.io/docs/concepts/workloads/pods/sidecar-containers/|Sidecar Containers]] | + | |
- | * [[https://www.kryukov.biz/kubernetes/lokalnye-volumes/emptydir/|emptyDir]] | + | |
- | * [[https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/|Configure Liveness, Readiness and Startup Probes]] | + | |
+ | * [[Технология Docker#Использование готовых образов приложений]] | ||
+ | * Использование [[Технология Docker#docker-compose]] | ||
- | <code> | + | * Можно показать "кубернетес" - [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Использование прокси Nginx]] для доступа к приложению (если установился GitLab) |
- | kube1:~# mkdir pywebd-k8s;cd $_ | + | |
- | </code> | + | |
- | * !!! Можно начать с использования образа gowebd, а потом усложнить | + | |
- | * [[Система Kubernetes#Deployment]] | + | |
- | * [[Система Kubernetes#Service]], [[Система Kubernetes#ClusterIP]] | + | |
- | * Предоставляем доступ к приложниям в k8s по [[Система Kubernetes#NodePort]] | + | |
- | <code> | + | ==== Вопросы ==== |
- | kube1:~/pywebd-k8s# kubectl -n my-ns exec -ti pods/my-webd-<TAB> -- sh | + | |
- | ~ $ kill -STOP 16 | + | - Зачем нужен Docker? |
+ | - Чем Docker отличается от LXC? | ||
+ | - Чем Docker контейнер отличается от Docker образа? | ||
+ | - Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами? | ||
+ | - Зачем нужен Dockerfile? | ||
+ | - Зачем "запихивать" сразу много инструкций в команду RUN? | ||
+ | - Зачем нужен docker-compose? | ||
+ | ===== Модуль 3. Инфраструктура как код ===== | ||
- | kube1:~/pywebd-k8s# kubectl get pods -n my-ns --watch | + | ==== Теория ==== |
- | </code> | + | |
- | ==== 2.2 volumes, nodeAffinity, helm ==== | + | * Построение ландшафта инфраструктуры на примере [[Технология Vagrant]] |
+ | * Построение ландшафта облачной инфраструктуры с использованием [[https://ru.wikipedia.org/wiki/Terraform|HashiCorp Terraform]] | ||
+ | * Видео урок: [[On-premise Terraform]] | ||
+ | * Управление инфраструктурой с использованием [[Сервис Ansible]] | ||
- | * Хранение данных приложений в k8s | + | ==== Лабораторные работы: Управление инфраструктурой ==== |
- | * [[Система Kubernetes#hostPath и nodeSelector]] (lifecycle и initContainers снова пригодятся на следующем шаге) | + | === 3.1 Управление инфраструктурой с использованием Vagrant === |
- | * [[Система Kubernetes#Установка Helm]] на kube1 (**делаем все**) | + | |
- | * [[Система Kubernetes#PersistentVolume и PersistentVolumeVolumeClaim]] (убрать nodeSelector) | + | |
+ | !!! Методическая рекомендация, запустить установку Ansible из лабораторной работы 3.2 | ||
+ | * Добавляем DNS записи nodeN A 192.168.X.200+N в [[Сервис DNS#Настройка мастер сервера зоны corpX.un]] | ||
+ | * Обзор команд [[Технология VirtualBox]] | ||
+ | * Обзор [[Технология Vagrant]] | ||
+ | * Развертываем с использованием [[Технология Vagrant#Multi-Machine Vagrant Environments]] узлы кластера node1,2,3 | ||
- | ==== 2.3 ingress ==== | + | === 3.2 Управление инфраструктурой с использованием Ansible === |
- | * Предоставляем доступ к приложниям в k8s по URL | + | * Общие принципы и модели управления (Push and Pull) |
+ | * Ansible - [[Сервис Ansible#Установка на управляющей системе]] | ||
+ | * [[Сервис Ansible#Настройка групп управляемых систем]] | ||
+ | * [[Сервис Ansible#Настройка транспорта ssh]] с [[Сервис SSH#Парольная аутентификация]] | ||
+ | * [[Сервис Ansible#Использование модулей]] для тестирования связи с управляемыми системами | ||
+ | * Установка Docker с помощью [[Сервис Ansible#Использование playbook|Ansible playbook]] на node1,2,3 (лучше во время перерыва) | ||
+ | * [[Сервис Ansible#Использование шаблонов]] Jinja в playbook для установки Nginx (на gate, по окончании демонстрации удалить!!) | ||
+ | * Обсудить варианты [[Сервис Ansible#Использование handlers]] | ||
+ | * Развертывание кластера приложения с [[Сервис Ansible#Использование ролей]] Ansible | ||
- | * Вариант [[Система Kubernetes#Ingress baremetal DaemonSet]] (**делаем все**) | + | ==== Вопросы ==== |
- | * [[Система Kubernetes#Deployment]] с emptyDir для демонстрации балансировки | + | - Что общего и в чем отличие между Ansible, Vagrant и Terraform? |
+ | - Что означает термин Provision в Vagrant? | ||
+ | - Что такое module, playbook, role в Ansible? | ||
+ | - Назовите каталоги в роли Ansible | ||
+ | - Что должно быть установлено на целевой системе для управления через Ansible? | ||
+ | - Каким образом Vagrant управляет VM? | ||
+ | - Как реализован Ansible provision в Vagrant? | ||
- | <code> | + | ===== Модуль 4. Continuous Integration ===== |
- | server.corpX.un:~# cat /etc/bind/corpX.un | + | |
- | </code><code> | + | |
- | ... | + | |
- | pywebd A 192.168.X.221 | + | |
- | A 192.168.X.222 | + | |
- | A 192.168.X.223 | + | |
- | ... | + | |
- | </code> | + | |
- | * [[Система Kubernetes#ingress example]] | + | |
- | <code> | + | ==== Теория ==== |
- | $ curl http://pywebd.corpX.un | + | |
- | </code> | + | |
+ | * [[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]] | ||
- | ==== 2.4 configmap, secret ==== | + | * [[https://youtu.be/FeD6VBY2Xss|Вебинар: Вход в CI/CD для Linux-админа]] |
+ | * [[https://habr.com/ru/articles/716454/|Статья: Самый простой пример CI/CD]] | ||
- | * Управление конфигурацией и доступ к приложеням в k8s по https | + | ==== Лабораторные работы: От Git к CI/CD ==== |
- | * Добавляем ssl в приложение на [[Язык программирования Python]] (в venv2, с конфигурацией (скопируем в k8s) и проверки работоспособности) | + | === 4.1 Обзор GitLab === |
- | <code> | + | |
- | $ curl --connect-to "":"":server.corpX.un:4443 https://pywebd.corpX.un | + | |
- | </code> | + | |
- | * Создаем Docker образ ver1.2 для [[Технология Docker#Приложение python pywebd]] | + | |
- | * Push-им в Gitlab и делаем проект приватным | + | |
- | * [[Система Kubernetes#ConfigMap, Secret]] | + | * [[Инструмент GitLab#Установка из репозитория]] |
- | * [[Система Kubernetes#LoadBalancer]] | + | !!! Методическая рекомендация, скачать gitlab-runner из лабораторной работы 4.2 |
- | * [[Система Kubernetes#Service]] LoadBalancer, port: 443, targetPort: 4443 | + | * [[Инструмент GitLab#Управление пользователями]] (назначить УЗ student администратором) |
+ | * Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab | ||
+ | * Пользуясь инструкцией к проекту, включаем [[Сервис Git]] для каталога openvpn1 и помещаем его в GitLab | ||
- | <code> | + | === 4.2 Запуск пайплайнов из .gitlab-ci в gitlab-runners === |
- | $ curl --connect-to "":"":192.168.X.64:443 https://pywebd.corp24.un | + | |
- | server# cat /etc/bind/corpX.un | + | * [[Инструмент GitLab#Установка из пакета]] GitLab Runner на server и его [[Инструмент GitLab#Регистрация]] с меткой **ansible** и исполнителем **shell** |
- | </code><code> | + | |
- | ... | + | |
- | pywebd A 192.168.X.64 | + | |
- | ... | + | |
- | </code> | + | |
- | * Тестируем с win client https://pywebd.corpX.un/ | + | * Используя GitLab Pipeline Editor добавляем в проект openvpn1 [[Инструмент GitLab#Пример shell ansible]] Pipeline и наблюдаем "выкатку" в "прод" после Commit в ветку main |
- | * Удаляем my-ns | + | |
- | * Удаляем [[Система Kubernetes#LoadBalancer]] | + | |
+ | ==== Вопросы ==== | ||
- | ===== Модуль 3. Создание CI/CD в kubernetes ===== | + | - Чем отличается GitLab от Git? |
+ | - Для чего нужен GitLab Runner? | ||
+ | - Как называется файл для CI/CD в GitLab? | ||
+ | ===== Модуль 5. Обзор задач QA ===== | ||
- | ==== 3.1 Запуск gitlab-runner в kubernetes ==== | + | ==== Теория ==== |
- | * Сделать общий [[Система Kubernetes#gitlab-runner kubernetes]] с тегом "build" | + | * [[https://testengineer.ru/dorogostoyashchie-bagi/|7 эпичнейших багов в истории человечества]] |
+ | * [[https://ru.wikipedia.org/wiki/Тестирование_программного_обеспечения]] | ||
+ | * [[https://www.atlassian.com/ru/continuous-delivery/software-testing/types-of-software-testing|Различные виды тестирования ПО]] | ||
- | ==== 3.2 Сборка докер контейнера в kubernetes ==== | + | * [[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/|В чем отличия нагрузочного от стресс-тестирования]] | ||
+ | ==== Лабораторные работы: Задачи тестирования ==== | ||
- | * Добавляем [[Инструмент GitLab#Пример CI с использованием контейнеров]] в каталог gowebd на server | + | === 5.1 Ручное тестирование функциональности и работа с ветками проекта === |
- | * Используя "подсказки" размещаем проект в GitLab | + | |
- | * В GitLab наблюдаем сборку образа | + | |
- | * В GitLab добавляем тег ver1.1 и проверяем наличие образов | + | |
- | ==== 3.3 Разворачивание нужной версии приложения в kubernetes ==== | + | * Понадобится win client2 (ip/m: 172.16.1.100+X/24, dns: 172.16.1.254) |
- | <code> | + | * Для подключения используем [[Сервис Keepalived]] в режиме [[Сервис Keepalived#Настройка балансировки нагрузки]] и corpX.ovpn ([[Пакет OpenVPN#Настройка клиента]]) в windows или linux |
- | kube1:~# mkdir gowebd-k8s;cd $_ | + | * Добавить [[Сервисы Gateway и routing#Управление таблицей маршрутизации]] на gate (можно отключить маршрут в LAN и настроить [[Сервис NAT]] для зрелищности, !!! вернуть обратно для доп. работ) |
- | </code> | + | |
- | * [[Система Kubernetes#Deployment]] ver1.1 | + | |
- | * [[Система Kubernetes#Service]], [[Система Kubernetes#ClusterIP]] | + | |
- | * В GitLab создаем версию ver1.2 и назначаем тэг | + | * Добавляем параметры dhcp-option,block-outside-dns и Commit в test с созданием Merge requests и наблюдаем "выкатку" в "тестовую" среду, проверяем работу сервиса в ней |
- | <code> | + | * Одобряем Merge requests и наблюдаем "выкатку" в "прод" |
- | kube1:~/gowebd-k8s# cp my-webd-deployment.yaml my-webd-deployment-env.yaml | + | |
- | kube1:~/gowebd-k8s# cat my-webd-deployment-env.yaml | + | === 5.2 Тестирование в этапах развертывания образа приложения в Docker среде === |
- | </code><code> | + | |
- | ... | + | |
- | image: server.corpX.un:5000/student/gowebd:$VER | + | |
- | ... | + | |
- | </code><code> | + | |
- | kube1:~/gowebd-k8s# export VER=ver1.2 | + | |
- | kube1:~/gowebd-k8s# envsubst < my-webd-deployment-env.yaml | kubectl apply -f - -n my-ns | + | !!! Методическая рекомендация, включить GitLab Docker Registry из этой лабораторной работы |
- | kubeN# curl my-webd.my-ns.svc.cluster.local | + | * [[Язык программирования Golang#golangci-lint]] кода приложения |
- | </code> | + | * Сборка образа [[Технология Docker#Приложение golang gowebd]] |
+ | * [[Технология Docker#Smoke test]] работоспособности приложения | ||
- | * Устанавливаем из dpkg [[Инструмент GitLab#GitLab Runner]] на server и регистрируем как общий с тегом "k8s-deploy" и shell executor | + | * Размещение образа приложения в Registry |
- | * Устанавливаем [[Система Kubernetes#Инструмент командной строки kubectl]] на server | + | * Включаем [[Инструмент GitLab#GitLab Docker Registry]] |
- | * Настраиваем [[Система Kubernetes#Подключение к кластеру]] для пользователя gitlab-runner на server | + | * Включаем [[Технология Docker#Insecure Private Registry]] и [[Технология Docker#Аутентификация в Registry]] |
+ | * Создаем (Public, без README) проект gowebd | ||
+ | * Cохраняем образ, [[Технология Docker#Использование Private Registry]] | ||
- | * Настраиваем stage deploy через envsubst используя [[Инструмент GitLab#Пример shell Kubernetes]] | + | !!! Методическая рекомендация, запустить установку minikube из лабораторной работы 6.1 |
- | * Создаем проект gowebd-k8s (Public, без Readme) | + | |
- | * Деплоим нужную версию в ручную (New Pipeeline MY_WEBD_VER=ver1.1) | + | |
- | * Через WebIDE | + | * Можно продемонстрировать развертывание приложения на nodeN |
- | * Настраиваем зависимость между проектами gowebd и gowebd-k8s через stage deploy в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | + | |
- | * Увеличиваем версию, добавляем соответствующий тег, проверяем версию приложения в k8s | + | |
- | * Обсуждаем [[Система Kubernetes#Версии deployment]], недостатки Gitlab CD и варианты, например Argo CD | + | === 5.3 Тестирование в процессе CI и управление версиями === |
- | * [[Система Kubernetes#Удаление объектов]] (весь namespace) | + | * Проводим [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate |
- | * [[Система Kubernetes#Установка Helm]] (если еще не установлен) на kube1 | + | * Используем [[Инструмент GitLab#Регистрация DooD]] для добавления runner в проект gowebd |
- | * [[Система Kubernetes#Развертывание своего приложения]] (webd-chart с образом gowebd) | + | |
- | <code> | + | * Отключаем gowebd->CI/CD Settings->Auto DevOps |
- | server.corpX.un:~# cat /etc/bind/corpX.un | + | * Добавляем в папку gowebd [[Инструмент GitLab#Пример CI с использованием контейнеров]] |
- | </code><code> | + | * Используя инструкции из GitLab добавляем папку в проект и наблюдаем сборку образа с тэгом commit hash |
- | ... | + | * Можно продемонстрирорвать Smoke test, заменив порт в коде |
- | gowebd A 192.168.X.221 | + | |
- | A 192.168.X.222 | + | |
- | A 192.168.X.223 | + | |
- | ... | + | |
- | </code><code> | + | |
- | $ curl http://gowebd.corpX.un | + | |
- | </code> | + | |
- | * [[Система Kubernetes#Установка Helm]] на server | + | * Останавливаем, очищаем конфигурацию [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate |
- | <code> | + | * Удаляем Runner в GitLab |
- | gitlab-runner@server:~$ helm list -n my-ns | + | * [[Технология Docker#Обзор и удаление]] (преподавателю можно всех) образов c gate |
- | </code> | + | * Отключаем [[Технология Docker#Insecure Private Registry]] |
- | * Исправляем [[Инструмент GitLab#Пример shell Kubernetes]] с использованим helm и push-им все в репозиторий gowebd-k8s | + | |
- | * В проекте gowebd увеличиваем версию, добавляем соответствующий тег, проверяем версию приложения в k8s | + | |
- | * [[Система Kubernetes#Работа со своим репозиторием]] для размещения helm пакета (будет использоваться в дополнительном материале) | + | * Повторяем [[Инструмент GitLab#Установка в виде контейнера]] gitlab-runner на gate |
- | ===== Модуль 4. Дополнительные материалы ===== | + | * Используем [[Инструмент GitLab#Регистрация DinD]] для добавления runner в проект gowebd |
+ | * Добавляем необходимые для DinD элементы конфигурации в [[Инструмент GitLab#Пример CI с использованием контейнеров]] | ||
+ | * Увеличиваем версию и наблюдаем сборку образа с тэгом commit hash | ||
+ | * Можно продемонстрирорвать Lint test, добавив лишнюю переменную в коде | ||
- | ==== 4.1 Доступ к приложениям в Bare-Metal Kubernetes ==== | + | * Используем Git тэги ([[Сервис Git#Обновление сетевого репозитория из локального]] или Code->Tags) для указания версии Docker образов |
- | * Удаляем NS my-ns | + | ==== Вопросы ==== |
- | * "Хором" в классе можно выполнить шаги 10, 12, 13 | + | - Что такое "ветка" в Git и почему переименовали master в main? |
+ | - Из каких частей состоит имя образа? | ||
+ | - Как работает DooD и DinD? | ||
+ | - Что такое Linter? | ||
+ | - Что такое Smoke test? | ||
- | * В формате "Открытого/Персонального обучения": | + | ===== Модуль 6. Kubernetes ===== |
- | * Удаляем [[Система Kubernetes#Ingress baremetal DaemonSet]] в вебинаре будет повтор через helm) | + | ==== Теория ==== |
- | <code> | + | * [[https://timeweb.cloud/blog/sistemy-orkestracii-kontejnerov|Системы оркестрации контейнеров: что такое и лучше для вашего проекта]] |
- | server:~# ssh-copy-id gate | + | * [[https://habr.com/ru/articles/589415/|K8S для начинающих. Первая часть]] |
- | </code> | + | * [[https://habr.com/ru/amp/publications/651653/|K8S для начинающих. Часть вторая]] |
+ | ==== Лабораторные работы: Работа с minikube, cоздание deployment и service ==== | ||
- | * Видео [[Доступ к приложениям в Bare-Metal Kubernetes]] с 00:28:30 до 01:39:00 | + | === 6.1 Установка minikube === |
+ | * Для доступа к репозиторию, понадобится включить [[Сервисы Gateway и routing]] | ||
+ | * [[Система Kubernetes#Установка minikube]] для gitlab-runner@server (можно, если будет время, показать CD) | ||
- | ==== 4.2 Стратегии деплоя в Kubernetes ==== | + | === 6.2 Создание deployment и service === |
- | * Видео [[Стратегии деплоя в Kubernetes]] (выполняем работы с 00:05:30 до конца) | + | * Изучаем [[Система Kubernetes#Базовые объекты k8s]] - [[Система Kubernetes#Deployment]] и [[Система Kubernetes#Service]] |
+ | * Для понимания работы [[Система Kubernetes#Ingress]] (будет в следующем курсе), можно продемонстрировать использование [[Сервис HTTP#Прокси "красивого" URL в приложение (пример 3)|Nginx]] для доступа к приложению webd в minikube с хост системы | ||
- | ==== 4.3 Работа с хранилищами в Kubernetes и восстановление после аварии ==== | + | * Если есть 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]] (выполняем работы с 00:04:00 до конца) | + | * Почему Kubernetes часто обозначают K8s? |
+ | * Чем K8s отличается от Docker-Compose? | ||
+ | * Что используется для описания состояния объектов в K8s? | ||
+ | * Как связаны понятия Deployment, Replica Sets, Pods? | ||
+ | * Для чего используются Namespace? | ||
- | ==== 4.4 Продолжение восстановления после аварии и Обновление кластера Kubernetes ==== | + | ===== Модуль 7. Дополнительные материалы ===== |
- | * Видео [[Обновление кластера Kubernetes]] | + | * [[Вход в Jenkins]] и процесс непрерывной интеграции для администратора Linux (выполняем работы с 00:05:30 до конца) |
- | выполняем работы: | + | * [[Зачем нужен Kubernetes]] (выполняем работы с 00:02:45 до 00:53:00 и с 01:08:33 до конца), понадобятся [[Средства программирования shell#Ресурсы Web сервера на shell]] |
- | + | ||
- | * с 00:09:10 до 00:34:25 (восстанавливаем etcd) | + | |
- | * с 00:48:55 до 00:51:25 (добавляем kube3 как worker) | + | |
- | * с 00:54:50 до 01:03:33 (обновляем кластер) | + | |
+ | * [[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 - в режиме просмотра |