User Tools

Site Tools


введение_в_devops

Введение в 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

  • gate
# sh net_gate.sh

# init 6
  • server
# sh net_server.sh

# init 6
  • Создать в Putty профили gate, server и подключиться

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

gate:~# sh conf/dhcp.sh
gate# su - student

2.2 Знакомимся с GitLab

!!! Если GitLab к этому времени не установился, начать тему Vagrant

2.3 Знакомимся с GitLab CI/CD

  • Устанавливаем GitLab Runner (shell) на gate и регистрируем в GitLab
  • Используем Пакет sudo для разрешений пользователя gitlab-runner
  • Экспериментируем)

2.4 Работа с ветками в GitLab CI/CD

!!! в теме Ansible

  • Создаем новый репозиторий (Project name: openvpn1, без README) в GitLab и, пользуясь инструкцией к проекту, добавляем его в ветку main
  • Включаем Сервис Git для каталога openvpn1
  • Загружаем репозиторий openvpn1 на локальную систему в Cmder (!!! появляется скрытое окно, в котором надо нажать Ок), открываем проект в npp
  • Используем Работа с ветками в Git для тестовой конфигурации в Роль OpenVPN сервера (можно добавить и протестировать настройки push…dhcp…dns)
  • Устанавливаем и регистрируем GitLab Runner (shell) на server
  • Используем GitLab CI/CD Пример shell ansible для сервиса OpenVPN с ручным тестированием конфигурации
  • Дополнительное задание - добавить тестирование конфигурации перед деплоем

Вопросы

  1. Чем отличается GitLab от Git?
  2. Что делают операции add, commit, push в Git?
  3. Для чего нужен GitLab Runner?
  4. Как называется файл для CI/CD в GitLab?
  5. Что такое “ветка” в Git и почему переименовали master в main?

Модуль 3: Инфраструктура как код

Теория

  • Построение ландшафта инфраструктуры на примере Технология Vagrant
  • Построение ландшафта облачной инфраструктуры с использованием HashiCorp Terraform
  • Управление инфраструктурой на примере Сервис Ansible

Лабораторные работы: Использование Vagrant

3.1 Использование Vagrant

3.2 Использование Ansible

3.3 Использование Ansible в Vagrant

Вопросы

  1. Что общего и в чем отличие между Ansible, Vagrant и Terraform?
  2. Что означает термин Provision в Vagrant?
  3. Что такое module, playbook, role в Ansible?
  4. Назовите каталоги в роли Ansible
  5. Что должно быть установлено на целевой системе для управления через Ansible?
  6. Каким образом Vagrant управляет VM?
  7. Для чего предназначен Provision в Vagrant?
  8. Как реализован 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

4.3 Горизонтальное масштабирование приложения webd с использованием docker-compose

Вопросы

  1. Зачем нужен Docker?
  2. Чем Docker отличается от LXC?
  3. Из каких частей состоит имя образа?
  4. Чем Docker контейнер отличается от Docker образа?
  5. Как ПО в Docker контейнере может взаимодействовать с системой и другими контейнерами?
  6. Зачем нужен Dockerfile?
  7. Зачем “запихивать” сразу много инструкций в команду RUN?
  8. Зачем нужен 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

Вопросы

  • Почему Kubernetes часто обозначают K8s?
  • Чем K8s отличается от Docker-Compose?
  • Что используется для описания состояния объектов в K8s?
  • Как связаны понятия Deployment, Replica Sets, Pods?
  • Для чего используются Namespace?
  • Что общего и в чем различие между Service и Ingress?
  • Что используется для подключения Pod к общим файлам?
  • Для чего нужен Helm и что используется для его описания?

Дополнительные материалы

введение_в_devops.txt · Last modified: 2022/10/04 06:39 by val