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
!!! в теме Ansible
Включаем
Сервис Git для каталога openvpn1 и загружаем его в
Создаем новый репозиторий (Project name: openvpn1, без README) в GitLab и пользуясь инструкцией к проекту, добавляем его в ветку main)
Загружаем репозиторий openvpn1 на локальную систему в
Cmder (!!! появляется скрытое окно, в котором надо нажать Ок), открываем проект в npp
-
-
Используем GitLab CI/CD
Пример shell ansible для сервиса OpenVPN с ручным тестированием тестовой конфигурации
Дополнительное задание - добавить тестирование конфигурации перед деплоем
Вопросы
Чем отличается GitLab от Git?
Что делают операции add, commit, push в Git?
Что такое “ветка” в Git и почему переименовали master в main?
Для чего нужен GitLab Runner?
Как называется файл для CI/CD в GitLab?
Модуль 3: Инфраструктура как код
Теория
Лабораторные работы: Использование Vagrant
3.1 Использование Vagrant
3.2 Использование Ansible
3.3 Использование Ansible в Vagrant
Вопросы
Что общего и в чем отличие между Ansible, Vagrant и Terraform?
Что такое 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-compose для загрузки и запуска нескольких копий приложения
4.3 Горизонтальное масштабирование приложения webd с использованием docker-compose
Примечание: слушатели делают только “Сервис NFS на server”, остальное демонстрирует преподаватель
-
-
Настраиваем доступ к
Локальные репозитории на node1,2,3, понадобится в k8s (дополнительное задание - создать ansible playbook для настройки подключения docker к локальному репозиторию)
-
Считаем, что пришлось делать “вручную”: выбирать узлы, монтировать nfs, загружать файл docker-compose, выяснять порты - выход:
Система Kubernetes
Вопросы
Зачем нужен Docker?
Зачем нужен Dockerfile?
Зачем “запихивать” сразу много инструкций в команду RUN
Модуль 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
-
Вопросы
Дополнительные материалы