This is an old revision of the document!
DevOps1. Основные инструменты
Программа курса
Модуль 0. Подготовка стенда в классе
Модуль 1: Развертывание стенда
Теория
Лабораторные работы: Развертывание стенда
1.1 Схема стенда, импорт, настройка и запуск VM gate и server
Запустите с правами Administrator
C:\cmder\cmder.exe
bash
cd
test -d conf && rm -r conf
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 к SCM к CI/CD
Теория
Лабораторные работы: От Git к CI/CD
2.1 Вспоминаем Git
Сервис Git для каталога /etc на gate (демонстрирует преподаватель)
-
gate:~# sh conf/dhcp.sh
gate# su - student
2.2 Знакомимся с SCM Gitea
-
Подключаемся как student, Repository Name: dhcp
-
Редактируем dhcpd.conf в Gitea (Commit to master branch)
2.3 Знакомимся с Jenkins CI/CD
2.4 Знакомимся с GitLab CI/CD
-
-
Используем
Управление пользователями в GitLab для отключения авто регистрации, назначении пароля пользователю root и создания учетной записи student (лучше назначить его администратором)
!!! в теме Ansible
-
Используя GitLab Pipeline Editor добавляем в проект openvpn1
Пример shell ansible Pipeline и наблюдаем выкатку в прод после Commit в master/main
Вопросы
Чем отличается 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=20s -rate=100 | vegeta report
server# tail -f /var/log/syslog
4.2 Использование технологии Docker и docker-compose для масштабирования приложения webd на одном узле
-
Знакомимся с
docker-compose для запуска нескольких копий приложения (без sftp и vol)
4.3 Использование технологии Docker Registry для распространения приложения webd
Методически, достаточно показать на node1
4.4 GitLab CI для Docker images
-
Автоматизируем сборку образа используя
Проверка синтаксиса и
Пример shell docker GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление переменных в проект и вывод их через env
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
Вопросы
Почему Kubernetes часто обозначают K8s?
Чем K8s отличается от Docker-Compose?
Что используется для описания состояния объектов в K8s?
Как связаны понятия Deployment, Replica Sets, Pods?
Для чего используются Namespace?
Дополнительные материалы