This is an old revision of the document!
Введение в 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/
./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
-
-
-
Подключаемся как 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?
Для чего предназначен Provision в Vagrant?
Как реализован 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=10s -rate=400 | vegeta report
server# tail -f /var/log/syslog
4.2 Использование технологии Docker для распространения приложения webd
Устанавливаем
Технология Docker на server, и, используя учетную запись gitlab-runner (удобно для тестов CI/CD из командной строки), знакомимся и упаковываем приложение (без sftp)
-
-
-
-
Добавляем и тестируем
docker-compose для загрузки и запуска нескольких копий приложения
4.3 Горизонтальное масштабирование приложения webd с использованием docker-compose
Вопросы
Зачем нужен Docker?
Чем Docker отличается от LXC?
Из каких частей состоит имя образа?
Чем Docker контейнер отличается от Docker образа?
Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами?
Зачем нужен Dockerfile?
Зачем “запихивать” сразу много инструкций в команду RUN?
Зачем нужен docker-compose?
Модуль 5: Управление ПО с использованием Kubernetes
Теория
Лабораторные работы: Тема лабораторных работ
5.1 Установка и подключение к k8s
5.2 Базовые объекты k8s
-
Для понимания работы
Ingress, изучаем
NGINX, используя его параллельно
Ingress для доступа к приложению webd с хост системы
и системы снаружи для тестирования livenessProbe (лучше не использовать
DNS View из-за множества внутренних сетей Docker/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 для развертывании
Ingress в новом кластере
Изучаем тему
Helm на примере разработки чарта для приложения webd
-
Вопросы
Почему Kubernetes часто обозначают K8s?
Чем K8s отличается от Docker-Compose?
Что используется для описания состояния объектов в K8s?
Как связаны понятия Deployment, Replica Sets, Pods?
Для чего используются Namespace?
Что общего и в чем различие между Service и Ingress?
Что используется для подключения Pod к общим файлам?
Для чего нужен Helm и что используется для его описания?
Дополнительные материалы