User Tools

Site Tools


devops1._основные_инструменты

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

  • 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 к SCM к CI/CD

  • !!! Заранее выполняем на server
  • !!! Заранее выполняем на host системе
  • Технология Vagrant Установка

Теория

Лабораторные работы: От Git к CI/CD

2.1 Вспоминаем Git

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

2.2 Знакомимся с SCM Gitea

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

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

!!! в теме Ansible

  • Создаем новый репозиторий (Project name: openvpn1, Private, без README) в GitLab
  • Пользуясь инструкцией к проекту, включаем Сервис Git для каталога openvpn1 (ubuntu20 ветка master) и помещаем его в GitLab
  • Устанавливаем и регистрируем GitLab Runner (shell) на server
  • Используя GitLab Pipeline Editor добавляем в проект openvpn1 Пример shell ansible Pipeline и наблюдаем выкатку в прод после Commit в master/main
  • Добавляем параметры dhcp-option,block-outside-dns и Commit в test с созданием Merge requests и наблюдаем выкатку в тестовую среду, проверяем работу сервиса в ней
  • Одобряем Merge requests и наблюдаем выкатку в прод

Вопросы

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

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

Теория

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

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

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

  • Лабораторная работа 2.4

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

Вопросы

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

Модуль 4: Распространение ПО с использованием контейнеров

Теория

Лабораторные работы: Работа с контейнерами Docker

4.1 Разработка и нагрузочное тестирование приложения webd

  • Преподаватель использует linux систему external-host для нагрузочного тестирования и демонстрирует “разработку” приложения на VM server
  • Web сервер на shell (методически, для обсуждения кода, можно, для упрощения, удалить из него все за комментированные строки, но не сохранять. Так же, можно вывести в лог Пример HTTP диалога)
  • duration=60s rate=400 выдерживают 10 экземпляров приложения
  • в качестве external-host можно использовать gate
cmd> route add 172.16.1.0 mask 255.255.255.0 10.5.N.178

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 на одном узле

4.3 Использование технологии Docker Registry для распространения приложения webd

Методически, достаточно показать на node1

4.4 GitLab CI для Docker images

  • Размещаем каталог webd в On-Premise gitlab пользуясь инструкцией к проекту
  • Автоматизируем сборку образа используя Проверка синтаксиса и Пример shell docker GitLab CI/CD, не забыв назначить метки Gitlab Runner. Можно обсудить добавление переменных в проект и вывод их через env

4.5 CD приложения webd с использованием docker-compose

  • Модифицируем docker-compose для загрузки и запуска нескольких копий приложения и тестируем на server
  • Используя Подключение через API скачиваем на node1,2,3 файл docker-compose запускаем несколько экземпляров приложения и, через Настройка балансировки нагрузки, повторяем нагрузочное тестирование
  • Считаем, что пришлось делать “вручную”: выбирать узлы, монтировать nfs, загружать файл docker-compose, выяснять порты - выход: Система Kubernetes

Вопросы

  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

extern-host# cat /etc/hosts
...
172.16.1.X     webd.corpX.un
или
ext-host:~# echo "GET http://webd.corpX.un" | vegeta attack -duration=20s -rate=400 -connect-to webd.corpX.un:80:172.16.1.X:80 | vegeta report

5.3 Deploy в k8s

  • Автоматизируем deploy используя Пример shell Kubernetes GitLab CD (см. выше)
  • Тестируем “выкатку” новой версии приложения через запрос несуществующего файла и Версии deployment
  • Столкнувшись с необходимостью править версию в манифесте, рассмотрев вариант с envsubst в Пример shell Kubernetes, видим необходимость в Helm
  • В финале, можно “закоммитить” новую версию приложения прямо в GitLab

Вопросы

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

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

devops1._основные_инструменты.txt · Last modified: 2024/11/12 11:26 by val