theme | background | layout |
---|---|---|
default |
cover |
quote |
- Программист, наставник и ментор
- Пропагандирую опенсорс
::right::
- Лекция + лайфкодинг
- Секции для вопросов
- Узнать, что такое DevOps
- Изучить хорошие практики
- Научиться применять знания в жизни
- Познакомиться с полезными инструментами
- Длинный цикл изменений
- Отсутствие контроля изменений (в инфраструктуре, в коде)
- Неконсистентность сред выполнения кода (продакшен, дев, тестовое)
- Бюрократия и избыточная коммуникация
- Это методология и культура непрерывного совершенствования процессов
- Про преодоление разрыва между разработкой и оперированием (обслуживанию)
- Больше про практики, чем про конкретные инструменты
- DevOps-инженер — это человек, который помогает осуществлять интеграции DevOps
Что такое Devops? | 10-plus deploys per day: dev and ops cooperation at Flickr | Нейросеть про DevOps
::right::
- Использование контроля версий
- Инфраструктура как код
- Приложение 12 факторов
- Налаженные процессы
- Continuous Integration (CI)
- Continuous delivery (CD)
- Автоматизация типовых действий
- Идемпотентное выполнение действий (деплой, CI, инфраструктура)
В этом блоке было:
- Введение
- Devops
- Приложение двенадцати факторов — это методология для создания SaaS-приложений
- Декларативный формат описания установки и настройки приложений с минимум затрат
- Максимальная переносимость между средами выполнения
- Становится неважно где мы развёртываем приложение (в облаке или на своем сервере)
- Масштабирование без существенных изменений в инструментах, архитектуре, разработке
Wiki: Инфраструктура как код (англ. Infrastructure-asCode; Iac) Это подход для управления и описания инфраструктуры через конфигурационные файлы
Инфраструктура как код (IaaC) — модель в которой создание инфраструктуры пишется как код
-
Окружение или инфраструктура описывается с помощью кода :)
-
Нужны изменения? Пишем код
-
Если мы выполним код, то получим, то состояние, которое актуально
-
Декларативное описание
-
Пример IaaC:
- Docker - описываем образы
- Dotfiles - конфиги и инструменты, которые накатываются скриптом
- Vagrant - пишем конфиг для виртуалки, кладём все, что нужно
- Проще управлять изменениями
- Код можно положить в репо
- Знание об инфраструктуре без необходимости лазать по серверам (характеристики, порты)
- Видим, какие изменения вносятся
- Есть инструменты, которые позволяют масштабировать изменения
- Описываем желаемое состояние
- Скачать Virtualbox и установить
- Скачать образ
- Создать новую машину, указать характеристики
- Установить ОС с помощью образа
- Пробросить директории (с хоста на виртуалку), порты, настроить сетевой адаптер
- Установить нужные пакеты (скриптом или руками)
- Это долго
- Нужно помнить последовательность действий
- Как поделиться готовым окружением с другим разработчиком?
- Как увидеть историю изменений (почему сделали так, а не так)
- Инструмент для быстрого развертывания окружения для разработки на основе систем виртуализации.
- Виртуализация - Vmware, VirtualBox, Hyper-v
- Инфраструктура как код (Vagrantfile)
- Требуемое состояние системы описано в коде
В этом блоке было:
- Приложение 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/
# Копирование на сервер с помощью scp
scp mybashscript.sh root@ipaddress:~/
# Заходим на сервер и запускаем скрипт
ssh root@ipaddress
sh ~/mybashscript.sh
::right::
- При повторном запуске некоторые команды не будут выполняться так же, как в прошлый раз.
- Нужно не забывать про необходимые флаги
- Чтобы понять, что происходит - нужны комментарии.
- А если в середине скрипта, что-то пошло не так, что тогда?
- Нарушается идемпотентность
# # Скрипт останавливается и ждет ответа
➜ ~ 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 нужен только ssh и python
Инвентори-файл - в нём описаны сервера
; ./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
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
- Выполнить разовую команду (пингануть сервера, обновить кеш, получить какую-то информацию, типа аптайма)
- Написать playbook - yml файлик в котором будут выполняться последовательно команды.
- Спрятать секретные данные (пароли, токены) в хранилище (vault)
- Автоматизировать разные действия (деплой, подготовка окружения, создание файлов и тд)
Репозиторий с примерами по Ansible | Bash vs Ansible примеры
В этом блоке было:
- Управление инфраструктурой
- Идемпотентность
- Ansible
Wiki: Непрерывная интеграция (CI) - это практика автоматизации интеграции изменений кода от нескольких авторов в единый программный проект.
- В основе процесса CI лежит система контроля версий исходного кода (Git)
- Запускаются сборка, линтер, тесты
- С использованием CI цикл релизов может сократиться (деплой несколько раз в день)
- Цикл получения обратной связи (нахождение багов) может улучшиться
- Github Actions - бесплатный для открытых проектов
- Gitlab CI - часто используется в компаниях, бесплатный self-hosted
- Jenkins
CI-сервер выполняет заранее заданный скрипт (последовательность действий), вместо ручного выполнения
::right::
Деплой – процесс “разворачивания” веб-сервиса, например, сайта, в рабочем окружении. Рабочее окружение – место, где сайт запускается и доступен для запросов.
- Нужно заходить на сервер
- Перезапуск сервисов
- Иногда нужно откатывать миграции
- Можно реализовать различные стратегии деплоя
- Zero downtime deployment
Чем больше действий выполняется вручную, тем выше риск ошибки
- Оповещение о начале деплоя
- Код проекта скачивается на сервер (обычно через клонирование Git)
- Ставятся все необходимые зависимости
- Выполняется процесс сборки, например собирается фронтенд-часть
- Выполняются миграции. Миграции — SQL-скрипты, которые изменяют структуру базы данных
- Запускается новая версия кода
- Оповещение о завершении деплоя (или неудача)
Опционально - обработка ошибок, откат (rollback)
Инструменты зависят от того, каким образом запускается приложение
- Capistrano, Deployer
- Ansible (deploy_helper, ansistrano)
- Docker
- Kubernetes
- CI-сервера (Gitlab CI, Github Actions, Jenkins)
- Bash, Make
Wiki: Непрерывное развертывание (CD) - это процесс выпуска ПО, который использует автоматизированное тестирование для проверки правильности и стабильности изменений в кодовой базе для немедленного автономного развертывания в производственной среде.
При создании этой презентации был использован CI/CD :)
В этом блоке было:
- Continuous integration
- CI-сервера
- Деплой
- Continuous Deployment
Стратегия деплоя - условно способ раскатки приложения, чтобы обеспечить отсутствие прерывания сервиса (zero-downtime deployment)
Представьте себе интернет-магазин, у постоянно происходят покупки. Сколько потеряет магазин, если внезапно выключится на "Обслуживание"?
- Recreate - просто убиваем старую версию, запускаем новую
- Самый дешевый способ
- Подходит, если есть некая сессия и приложение в 1 экземпляре (например сервер игры)
::right::
- Ramped (rolling-update or incremental) - Старая версия постепенно заменяется новой
- Требуется наличие балансера и минимум 2 сервера
- База данных должна уметь работать с новой и старой версией приложения
::right::
- Blue/Green - новая версия живет вместе старой. Потом старая отключается
- Можно провести эксперименты с новой версией и боевой базой.
::right::
- Canary - часть трафика уходит на новую версию
- Может подойти для экспериментов (тестировании фич)
::right::
В этом блоке было:
- Стратегии деплоя
- "Цель. Процесс непрерывного совершенствования" Элияху Голдратт
- "Проект «Феникс». Роман о том, как DevOps меняет бизнес к лучшему" Джин Ким, Джордж Спаффорд, Кевин Бер
- Обсудили, что такое Devops, подходы и практики
- Познакомились с новыми полезными инструментами (Vagrant, Ansible)
- Из каких инструментов собрать пайплайн CI/CD и автоматизировать деплой
Применить полученные знания на практике. Добавить CI/CD, автоматизировать деплой на вашем тестовом проекте
- Что такое деплой?
- Что такое "управление конфигурацией"?
- Что такое хостинг и домен сайта простыми словами?
- Что такое Makefile и как начать его использовать
- Чек-лист хороших инженерных практик в компаниях
::right::
- Инфраструктура как код
- Вебинар: Stateful vs. Stateless
- Интервью с Алексеем Шараповым: о микросервисах
- Никита Соболев — Автоматизируем все с Github Actions
Помимо этого в репо презентации есть примеры кода и комментарии
- [email protected]
- https://github.com/fey
- https://gitlab.com/feycot
- https://www.linkedin.com/in/feycot/
- https://t.me/time2run
Задавайте вопросы, если что-то осталось непонятным, неуточненным, есть любопытство. Тегайте меня, если хотите ревью ДЗ - с удовольствием помогу чем смогу