Введение в DevOps
Программа курса
Модуль 0. Подготовка стенда в классе
Модуль 1: Развертывание стенда
Теория
Лабораторные работы: Развертывание стенда
1.1 Схема стенда, импорт, настройка и запуск VM gate и server
Запустите с правами Administrator
C:\cmder\cmder.exe
bash
cd
git clone http://val.bmstu.ru/unix/conf.git
cd conf/virtualbox/
!!! 8 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!!
./setup.sh X 8
1.2 Настройка сети VM gate и server
# sh net_gate.sh
# init 6
# sh net_server.sh
# init 6
1.3 настройка сервиса DNS
server:~# sh conf/dns.sh
Настройка клиента
DNS на gate и server
# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.10
# nslookup ns
Вопросы
Модуль 2: От Git к GitLab CI/CD
Теория
Лабораторные работы: От Git к GitLab
2.1 Вспоминаем Git
Сервис Git для каталога /etc на gate (демонстрирует преподаватель)
-
gate:~# sh conf/dhcp.sh
gate# su - student
2.2 Знакомимся с GitLab
!!! Если GitLab к этому времени не установился, начать тему Vagrant
-
Используем
Управление пользователями в GitLab для отключения авто регистрации, назначении пароля пользователю root и создания учетной записи student
-
Подключаемся как student, New Blank Project (Project name: dhcp, без README)
-
Редактируем dhcpd.conf в GitLab IDE (Commit to master branch)
2.3 Знакомимся с GitLab CI/CD
Устанавливаем
GitLab Runner (shell) на gate и регистрируем в GitLab
Используем
Пакет sudo для разрешений пользователя gitlab-runner
-
-
2.4 Работа с ветками в GitLab CI/CD
Вопросы
Чем отличается GitLab от Git?
Что делают операции add, commit, push в Git?
Для чего нужен GitLab Runner?
Как называется файл для CI/CD в GitLab?
Что такое “ветка” в Git и почему переименовали master в main?
Модуль 3: Инфраструктура как код
Теория
Лабораторные работы: Использование Vagrant
3.1 Использование Vagrant
3.2 Использование Ansible
3.3 Использование Ansible в Vagrant
Вопросы
Что общего и в чем отличие между Ansible, Vagrant и Terraform?
Что означает термин Provision в Vagrant?
Что такое module, playbook, role в Ansible?
Назовите каталоги в роли Ansible
Что должно быть установлено на целевой системе для управления через Ansible?
Каким образом Vagrant управляет VM?
Как реализован Ansible provision в Vagrant?
Модуль 4: Распространение ПО с использованием контейнеров
Теория
Лабораторные работы: Работа с контейнерами Docker
4.1 Разработка и нагрузочное тестирование приложения webd
external-host# curl http://172.16.1.X
external-host# echo "GET http://172.16.1.X" | vegeta attack -duration=60s -rate=400 | vegeta report
server# tail -f /var/log/syslog
4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле
-
Используя su - gitlab-runner (пригодится для тестов CI/CD из командной строки, для удобства работы выполнить
Настройка командных интерпретаторов), знакомимся с технологией и упаковываем приложение (без sftp) в Docker образ
-
-
4.3 Использование технологии Docker Registry для распространения приложения webd
Методически, достаточно показать на node1
4.4 GitLab CI для Docker images
Автоматизируем сборку образа используя
Проверка синтаксиса и
GitLab CI/CD, проверяем “в ручном” режиме, а затем, в автоматическом, не забыв назначить переменные проекта, метки Gitlab Runner и сделав add, commit и push
4.5 CD приложения webd с использованием docker-compose
Модифицируем
docker-compose для загрузки и запуска нескольких копий приложения и тестируем на server
-
Считаем, что пришлось делать “вручную”: выбирать узлы, монтировать nfs, загружать файл docker-compose, выяснять порты - выход:
Система Kubernetes
Вопросы
Зачем нужен Docker?
Чем Docker отличается от LXC?
Из каких частей состоит имя образа?
Чем Docker контейнер отличается от Docker образа?
Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами?
Зачем нужен Dockerfile?
Зачем “запихивать” сразу много инструкций в команду RUN?
Зачем нужен docker-compose?
Модуль 5: Управление ПО с использованием Kubernetes
Теория
Лабораторные работы: Тема лабораторных работ
5.1 Установка и подключение к k8s
5.2 Базовые объекты k8s
extern-host# cat /etc/hosts
...
172.16.1.X webd.corpX.un
5.3 Deploy в k8s
Автоматизируем deploy используя
GitLab CI/CD, сталкиваемся с необходимостью править версию в манифесте, рассмотрев вариант envsubst видим необходимость в Helm
5.4 Helm в k8s (следующий курс :)
-
-
-
Используем
Helm Chart для развертывания и тестирования
Ingress в новом кластере
-
Используем
Helm Chart для deploy приложения webd в
GitLab CI/CD, демонстрируем history и rollback
-
-
Вопросы
Почему Kubernetes часто обозначают K8s?
Чем K8s отличается от Docker-Compose?
Что используется для описания состояния объектов в K8s?
Как связаны понятия Deployment, Replica Sets, Pods?
Для чего используются Namespace?
Что общего и в чем различие между Service и Ingress?
Что используется для подключения Pod к общим файлам?
Для чего нужен Helm и что используется для его описания?
Дополнительные материалы