Skip to content

Latest commit

 

History

History
742 lines (509 loc) · 29.1 KB

presentation.md

File metadata and controls

742 lines (509 loc) · 29.1 KB
theme background layout
default
cover
quote

Devops, CI/CD, Deploy — инструменты и практики

Николай Гагаринов, Hexlet


layout: two-cols

Обо мне

  • Программист, наставник и ментор
  • Пропагандирую опенсорс

Контакты

Контакты

::right::


Про формат

  • Лекция + лайфкодинг
  • Секции для вопросов

Цель лекции

  • Узнать, что такое DevOps
  • Изучить хорошие практики
  • Научиться применять знания в жизни
  • Познакомиться с полезными инструментами

Предпосылки

  • Длинный цикл изменений
  • Отсутствие контроля изменений (в инфраструктуре, в коде)
  • Неконсистентность сред выполнения кода (продакшен, дев, тестовое)
  • Бюрократия и избыточная коммуникация

layout: two-cols

DevOps

  • Это методология и культура непрерывного совершенствования процессов
  • Про преодоление разрыва между разработкой и оперированием (обслуживанию)
  • Больше про практики, чем про конкретные инструменты
  • DevOps-инженер — это человек, который помогает осуществлять интеграции DevOps

Что такое Devops? | 10-plus deploys per day: dev and ops cooperation at Flickr | Нейросеть про DevOps

::right::


Выгоды DevOps

  • Использование контроля версий
  • Инфраструктура как код
  • Приложение 12 факторов
  • Налаженные процессы
  • Continuous Integration (CI)
  • Continuous delivery (CD)
  • Автоматизация типовых действий
  • Идемпотентное выполнение действий (деплой, CI, инфраструктура)

layout: center

Время для вопросов

В этом блоке было:

  • Введение
  • Devops

Приложение 12 факторов

The Twelve-Factor App

  • Приложение двенадцати факторов — это методология для создания SaaS-приложений
  • Декларативный формат описания установки и настройки приложений с минимум затрат
  • Максимальная переносимость между средами выполнения
  • Становится неважно где мы развёртываем приложение (в облаке или на своем сервере)
  • Масштабирование без существенных изменений в инструментах, архитектуре, разработке

Инфраструктура как код

Wiki: Инфраструктура как код (англ. Infrastructure-asCode; Iac) Это подход для управления и описания инфраструктуры через конфигурационные файлы

Инфраструктура как код (IaaC) — модель в которой создание инфраструктуры пишется как код

  • Окружение или инфраструктура описывается с помощью кода :)

  • Нужны изменения? Пишем код

  • Если мы выполним код, то получим, то состояние, которое актуально

  • Декларативное описание

  • Пример IaaC:

    • Docker - описываем образы
    • Dotfiles - конфиги и инструменты, которые накатываются скриптом
    • Vagrant - пишем конфиг для виртуалки, кладём все, что нужно

Dotfiles example


Зачем нужна IaaC?

  • Проще управлять изменениями
  • Код можно положить в репо
  • Знание об инфраструктуре без необходимости лазать по серверам (характеристики, порты)
  • Видим, какие изменения вносятся
  • Есть инструменты, которые позволяют масштабировать изменения
  • Описываем желаемое состояние

Создание виртуалки руками

  1. Скачать Virtualbox и установить
  2. Скачать образ
  3. Создать новую машину, указать характеристики
  4. Установить ОС с помощью образа
  5. Пробросить директории (с хоста на виртуалку), порты, настроить сетевой адаптер
  6. Установить нужные пакеты (скриптом или руками)

Какие проблемы возникают

  • Это долго
  • Нужно помнить последовательность действий
  • Как поделиться готовым окружением с другим разработчиком?
  • Как увидеть историю изменений (почему сделали так, а не так)

Vagrant

  • Инструмент для быстрого развертывания окружения для разработки на основе систем виртуализации.
  • Виртуализация - Vmware, VirtualBox, Hyper-v
  • Инфраструктура как код (Vagrantfile)
  • Требуемое состояние системы описано в коде

layout: center

Время для вопросов

В этом блоке было:

  • Приложение 12 факторов
  • Инфраструктура как код
  • Vagrant

Управление конфигурацией

Подготовка свежего окружения под запуск приложения

# Все действия выполняются вручную
# Заходим на удаленную машину (Сервер на Ubuntu)
ssh root@ipaddress

# Создание пользователя для деплоя. Где-то здесь копируются ssh ключи
sudo adduser deploy

sudo apt install curl
# установка Node.js
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install nodejs
# установка и настройка Nginx
sudo apt install nginx
vim /etc/nginx/default.conf

# Формирование структуры директорий для сервиса
mkdir -p /opt/hexlet/versions/

layout: two-cols

Bash-скрипты

# Копирование на сервер с помощью scp
scp mybashscript.sh root@ipaddress:~/

# Заходим на сервер и запускаем скрипт
ssh root@ipaddress
sh ~/mybashscript.sh

::right::


Почему Bash-скрипты недостаточно хороши?

  • При повторном запуске некоторые команды не будут выполняться так же, как в прошлый раз.
  • Нужно не забывать про необходимые флаги
  • Чтобы понять, что происходит - нужны комментарии.
  • А если в середине скрипта, что-то пошло не так, что тогда?
  • Нарушается идемпотентность
# # Скрипт останавливается и ждет ответа~ apt install golang
The following additional packages will be installed:
  golang-1.13 ...
After this operation, 329 MB of additional disk space will be used.
Do you want to continue? [Y/n]
apt install -y golang
# будет ошибка
mkdir /hexlet
mkdir /hexlet # ?
# ошибки не будет
mkdir -p /hexlet
mkdir -p /hexlet

Идемпотентность

Идемпотентность – это свойство какой-либо операции, например, вызова функции или выполнения HTTP-запроса. Операция считается идемпотентной, если повторные выполнения приводят к тому же результату что и первое выполнение.

Команда развертывания всегда задает целевую среду в той же конфигурации независимо от состояния запуска среды.


Ansible

  • Автоматизировать процесс настройки локального окружения и удаленных серверов
  • Автоматизировать процесс сборки, деплоя
  • Инфраструктура как код
  • Обеспечивает идемпотентность
  • Описывает желаемое состояние
  • Для работы Ansible нужен только ssh и python

Базовые сущности Ansible

Инвентори-файл - в нём описаны сервера

; ./inventory.ini
[webservers]
web-01 ansible_host=68.183.222.69 ansible_user=root
web-02 ansible_host=68.183.213.233 ansible_user=root

Плейбук - в yaml формате описаны задачи для выполнения. Задачи в плейбуке могут выполняться на разных хостах, в том числе на локальных (например для выполнения миграций или оповещения о деплое)

- name: configure and deploy the webservers and application code
  hosts: webservers
  remote_user: root
  roles:
    - web

- name: deploy MySQL and configure the databases
  hosts: dbservers
  remote_user: root
  roles:
    - db

Ansible

install:
  ansible-galaxy install -r requirements.yml

ping:
  ansible -i inventory.yml all -m ping

deploy:
  ansible-playbook playbook.yml -i inventory.ini --vault-password-file vault-password

Что можно сделать с помощью Ansible?

  • Выполнить разовую команду (пингануть сервера, обновить кеш, получить какую-то информацию, типа аптайма)
  • Написать playbook - yml файлик в котором будут выполняться последовательно команды.
  • Спрятать секретные данные (пароли, токены) в хранилище (vault)
  • Автоматизировать разные действия (деплой, подготовка окружения, создание файлов и тд)

Репозиторий с примерами по Ansible | Bash vs Ansible примеры


layout: center

Время для вопросов

В этом блоке было:

  • Управление инфраструктурой
  • Идемпотентность
  • Ansible

Continuous integration

Wiki: Непрерывная интеграция (CI) - это практика автоматизации интеграции изменений кода от нескольких авторов в единый программный проект.

  • В основе процесса CI лежит система контроля версий исходного кода (Git)
  • Запускаются сборка, линтер, тесты
  • С использованием CI цикл релизов может сократиться (деплой несколько раз в день)
  • Цикл получения обратной связи (нахождение багов) может улучшиться

layout: two-cols

CI-сервера

  • Github Actions - бесплатный для открытых проектов
  • Gitlab CI - часто используется в компаниях, бесплатный self-hosted
  • Jenkins

CI-сервер выполняет заранее заданный скрипт (последовательность действий), вместо ручного выполнения

::right::


Деплой

Деплой – процесс “разворачивания” веб-сервиса, например, сайта, в рабочем окружении. Рабочее окружение – место, где сайт запускается и доступен для запросов.


Деплой

Зачем автоматизировать?

  • Нужно заходить на сервер
  • Перезапуск сервисов
  • Иногда нужно откатывать миграции
  • Можно реализовать различные стратегии деплоя
  • Zero downtime deployment

Чем больше действий выполняется вручную, тем выше риск ошибки


Пример деплоя

  1. Оповещение о начале деплоя
  2. Код проекта скачивается на сервер (обычно через клонирование Git)
  3. Ставятся все необходимые зависимости
  4. Выполняется процесс сборки, например собирается фронтенд-часть
  5. Выполняются миграции. Миграции — SQL-скрипты, которые изменяют структуру базы данных
  6. Запускается новая версия кода
  7. Оповещение о завершении деплоя (или неудача)

Опционально - обработка ошибок, откат (rollback)


Полезные инструменты для автоматизации

Инструменты зависят от того, каким образом запускается приложение

  • Capistrano, Deployer
  • Ansible (deploy_helper, ansistrano)
  • Docker
  • Kubernetes
  • CI-сервера (Gitlab CI, Github Actions, Jenkins)
  • Bash, Make

Continuous Deployment

Wiki: Непрерывное развертывание (CD) - это процесс выпуска ПО, который использует автоматизированное тестирование для проверки правильности и стабильности изменений в кодовой базе для немедленного автономного развертывания в производственной среде.

При создании этой презентации был использован CI/CD :)


CI/CD Pipeline


layout: center

Время для вопросов

В этом блоке было:

  • Continuous integration
  • CI-сервера
  • Деплой
  • Continuous Deployment

layout: center

Стратегии деплоя

Стратегия деплоя - условно способ раскатки приложения, чтобы обеспечить отсутствие прерывания сервиса (zero-downtime deployment)

Представьте себе интернет-магазин, у постоянно происходят покупки. Сколько потеряет магазин, если внезапно выключится на "Обслуживание"?


layout: two-cols

Стратегии деплоя - Recreate

  • Recreate - просто убиваем старую версию, запускаем новую
  • Самый дешевый способ
  • Подходит, если есть некая сессия и приложение в 1 экземпляре (например сервер игры)

::right::


layout: two-cols

Стратегии деплоя - Ramped

  • Ramped (rolling-update or incremental) - Старая версия постепенно заменяется новой
  • Требуется наличие балансера и минимум 2 сервера
  • База данных должна уметь работать с новой и старой версией приложения

::right::


layout: two-cols

Стратегии деплоя - Blue/Green

  • Blue/Green - новая версия живет вместе старой. Потом старая отключается
  • Можно провести эксперименты с новой версией и боевой базой.

::right::


layout: two-cols

Стратегии деплоя - Canary

  • Canary - часть трафика уходит на новую версию
  • Может подойти для экспериментов (тестировании фич)

::right::


Стратегии деплоя


layout: center

Время для вопросов

В этом блоке было:

  • Стратегии деплоя

Литература

  • "Цель. Процесс непрерывного совершенствования" Элияху Голдратт
  • "Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему" Джин Ким, Джордж Спаффорд, Кевин Бер

Итоги

  • Обсудили, что такое Devops, подходы и практики
  • Познакомились с новыми полезными инструментами (Vagrant, Ansible)
  • Из каких инструментов собрать пайплайн CI/CD и автоматизировать деплой

Домашнее задание

Применить полученные знания на практике. Добавить CI/CD, автоматизировать деплой на вашем тестовом проекте


layout: two-cols

Ссылки

Гайды

Инструменты

::right::

Видео

Презентация

Помимо этого в репо презентации есть примеры кода и комментарии


Контакты

Задавайте вопросы, если что-то осталось непонятным, неуточненным, есть любопытство. Тегайте меня, если хотите ревью ДЗ - с удовольствием помогу чем смогу


layout: end