Roadmap для DevOps инженеров
В этой статье рассмотрим дорожную карту, как развиваться и что учить для тех, кто хочет стать DevOpsами/Site Reliability Engineerами.
📖 Общие полезные статьи
- 8 best practices по использованию Docker в продакшине
- Выбор стратегии деплоя микросервисов
- Blue-Green Deployment паттерн
- CI/CD
- Архитектура ПО
- Статьи по микросервисам
- Статьи про DevOps практики
- Статьи про паттерны проектирования
- Статьи по дата структурам
🗺️ Изучите язык программирования
Начать стоит с изучения одного из предложенных на дорожной карте языков программирования: Python, Ruby, Go, Rust, C, C++, и т.д. Главным будет базовое понимание какого-то Cи-подобного языка. это вам поможет в будущем читать код верхнеуровнево любого Си-подобного языка.
Что касается Go – это статически типизированный язык программирования, который был разработан внутри компании Google. В отличие от динамически типизированного языка, код проверяется перед запуском, а не после.
Go считается одним из простейших языков программирования для начинающих. Google создали быстро изучаемый язык для того, чтобы быстрее вводить новые команды программистов в работу. Простой синтаксис Go помогает быстро понять чужой код без дополнительных обозначений или комментариев.
Но доминирующим языком для бэкенда остается Python. Roadmap по питону можно найти тут.
📈 Agile DevOps процесc
Стоит так же выучить и Agile процессы. У вас должно быть глубокое понимание когда, как и каким образом встраивать DevOps процесс в вашу разработку.
Так же стоит обратить внимание на следующие статьи:
- Continuous integration vs. continuous delivery vs. continuous deployment
- Статьи по менеджменту
- Статьи по Agile процессам и практикам
💾 Big data решения
Часто девопсам нужно поддерживать BigData решения, схемы ниже описывают основные подходы к распределенным системам
Распределенная файловая система
Существует 3 основных подхода как организовать распределенную файловую систему:
- Один CPU к одному диску
- Параллельное считіваение - Один CPU и много дисков
- Распределенное считывание. Сет серверов из пункта №1
Distributed Database
Существует 2 основных подхода как организовать распределенную базу данных:
- Master-Slave(follower) репликация. В этом случае на Slave (follower) используется для чтения, а мастер для записи.
- Мульти мастер репликация
Distributed Computation
Для распределенных вычислений можно выделить 2 основных подхода:
- Несколько процессоров, которые использует совместную память для общения
- Отдельные компьютеры использующее свои процессоры и память, которые коммуницируют между собой по сети.
🔧 Навыки администрирования серверов
Инженеру DevOps необходимо управлять всеми типами серверов. Часто речь идет о целом парке: их может быть больше ста и состоят они из экземпляров ОС Linux (очень редко из экземпляров других ОС).
Поэтому для начала советую уделить особое внимание Linux. Если у вас мало опыта работы с данной ОС, начните с Ubuntu. Изучите основные команды, инструменты для мониторинга, настройки и разберитесь с работой терминала.
Список ОС которые нужно уметь администрировать
- Windows server
- Ubuntu
- CentOS
- RHEL
- FreeBSD
- OpenBSD
- NetBSD
- Fedora
- Debian
- SuseLinux
Понимать следующие аспекты ОС
- Управление процессами
- Потоки и параллелизм
- Сокеты
- Основы POSIX
- Основы компьютерных сетей
- Управление вводом/выводом
- Виртуализация
- Память/Диски
- Файловые системы
- Управление инициализацией (initd)
- Управление сервисами (systemd)
🕸️ Сети, безопасность и протоколы
Знание сетей, безопасности и базовых протоколов необходимо инженеру DevOps, так как он должен настраивать VPC и группы безопасности/брандмауэры, а также использовать различные протоколы.
- HTTP (протокол передачи гипертекста);
- SSL (обеспечивает защищенный обмен данными);
- SSH (сетевой протокол, позволяющий производить удаленное управление операционной системой);
- FTP (протокол передачи файлов);
- SMTP (простой протокол передачи почты)
- IMAPS
- POP38
- DMARC
- SPF
- Doman Keys
- Перенаправление портов
- IPSec & VPN
- AT-TLS
- OSPF Authentication
- SNMP
- Firewall
- Proxy
🏢 Веб серверы
🏘️ Инфраструктура как код
Инфраструктура как код (IaC) – это по сути настройка и подъем всей инфраструктуры в виде конфигурационных файлов, с помощью которых легко подымать новые серверы и масштабировать старые.
Контейнеры
- Docker – это программная платформа для быстрой разработки, тестирования и развертывания приложений. Docker упаковывает ПО в стандартизованные блоки, которые называются контейнерами. Каждый контейнер включает все необходимое для работы приложения: библиотеки, системные инструменты, код и среду исполнения. Благодаря Docker можно быстро развертывать и масштабировать приложения в любой среде и сохранять уверенность в том, что код будет работать.
- LXC – Linux containers система виртуализации на уровне операционной системы для запуска нескольких изолированных экземпляров операционной системы
Управление конфигурацией
- Ansible – ПО с открытым исходным кодом, которое автоматизирует поставку программного обеспечения, управление конфигурацией и развёртывание приложений. Ansible помогает DevOps-специалистам автоматизировать сложные задачи
- Salt
- Chef
- Puppet
Оркестрирование контейнеров
Управление инфраструктурой
Service mesh
- Istio – Open Source-проект, разработанный при сотрудничестве команд из Google, IBM и Lyft. Он решает сложности, возникающие в приложениях, основанных на микросервисах, например: управление трафиком, безопасность, трассировка, мониторинг, логи.
- Consul – это децентрализованный отказоустойчивый discovery-сервис от компании HashiCorp
- Envoy
- Linkerd
🏄♂️ CI/CD инструменты
🕵️ Мониторинг инфраструктуры и приложений
Мониторинг инфраструктуры
- Prometheus – мониторинг систем таких как: серверы, базы данных, отдельные виртуальные машины, приложение и другое.
- Grafana – платформа с открытым исходным кодом для визуализации, мониторинга и анализа данных.
- Nagios
- Zabbix
- Monit
- DataDog
Мониторинг приложений
- Jaeger – tracing приложений
- New Relic
- AppDynamic
- Instana
- OpenTracing
☁️ Облачные платформы
📝 Командная строка
Ниже приведен список утилит которые должен знать и использовать продвинутый DevOps.
Утилиты для работы с текстом
awk
sed
grep
sort
uniq
cat
cut
echo
fmt
tr
nl
egrep
fgrep
wc
Мониторинг процессов
ps
top
htop
atop
Isof
Сети
nmap
tgpdump
pung
mtr
traceroute
dlg
alrman
alrodump
dlg
iptables
netstat
Написание bash скриптов
Консоли
- Vim
- Nano
- PowerShell
- Emacs
Производительность системы
nman
iostat
sar
vmstat
Другие
strace
dtrace
systemtap
uname
df
history