Навыки кодинга, необходимые крутому Linux-инженеру
В вакансиях Linux-инженера среди требований встречается упоминание базовых навыков разработки ПО. Рассказываем, что входит в это понятие и зачем они нужны специалисту.
3К открытий5К показов
Linux-инженер администрирует и поддерживает сервисы в компании. Он может не быть участником команды разработки, а работать только с инфраструктурой: устанавливать, настраивать и администрировать сервисы.
Может показаться, что кодить здесь не нужно, но навыки разработки ПО особенно важны, когда Linux-инженер помогает с автоматизацией процесса разработки. Linux-инженер из компании КРОК Антон Селиверстов рассказывает, что именно нужно уметь делать.
Антон Селиверстов
Linux-инженер КРОК
Понимать процесс разработки ПО
Компилировать и читать код разработчика
Понимать основы тестирования
Автоматизировать установку сервисов
Настраивать мониторинг сервисов
Автоматизировать сбор логов
Владеть инструментами контейнеризации
Доставлять код в окружение
Понимать процесс разработки ПО
Чтобы понимать, когда и где нужна автоматизация, важно разобраться в базовых подходах к правильной разработке ПО. Для этого можно изучить манифест «Twelve-Factor App». Это методология, описывающая 12 факторов, которые важно учитывать при создании SaaS-сервисов: декларативность, масштабируемость, непрерывное развёртывание и т. д.
Компилировать и читать код разработчика
В компании может быть много команд разработки. Кто-то пишет на Python, кто-то разрабатывает на Java. Учить все языки, чтобы работать с любой командой, не самый оптимальный вариант. Да и выбор языка программирования зависит даже не от компании, а от проекта. Но инженеру нужно уметь компилировать код. Это пригодится и вне работы в команде, так как многие инфраструктурные сервисы, вроде Nginx или HAProxy можно скомпилировать из исходного кода и установить.
Вдаваться во все тонкости языка на уровне разработчика Linux-инженеру не нужно, поэтому можно выбрать курсы, которые заточены под конкретные инженерные задачи. Для этого, например, подойдут программы «Golang для инженеров» или «Python для инженеров» от «Слёрм».
Понимать основы тестирования
Код необходимо тестировать, причём не только на этапе разработки, но и при доставке в окружения. Поэтому Linux-инженер должен разбираться в видах тестирования, знать, как они проводятся, уметь встраивать в CI/CD-пайплайн хотя бы тесты на безопасность и простейшие проверки. Например, линтеры — это программы, которые проверяют синтаксис кода и исправляют простые ошибки вроде незакрытых скобок, пропущенных точек с запятой.
Базовый вид тестирования на безопасность, который полезно использовать, — SAST-тестирование. Он позволяет проверить сервис на ошибки и уязвимости в исходном коде с помощью статического анализа.
Автоматизировать установку сервисов
Устанавливать сервисы можно вручную, выполняя все команды, а можно автоматизировать эти задачи. Для этого Linux-инженер пишет сценарии, которые при запуске выполняют необходимые действия на виртуальных машинах. Автоматизировать этот процесс можно с помощью инструментов конфигурации вроде Ansible. Он подключается к удалённой виртуальной машине и настраивает сервис в соответствии с необходимыми параметрами.
Познакомьтесь с этим инструментом, прочитав статью: Что такое Ansible и как его использовать
Настраивать мониторинг сервисов
После установки необходимо осуществлять поддержку всей платформы, потому что проблемы в системе могут возникнуть на любом этапе.
Системы мониторинга собирают показатели с виртуальных машин и сервисов и на их основе строят информативные графики. По ним можно сделать вывод, насколько оптимально и корректно работает система, хватает ли ресурсов и т. д. Настраивать необходимые для анализа показатели можно с помощью Prometheus и Grafana.
Автоматизировать сбор логов
Умение находить и читать нужные логи поможет быстро определить и проанализировать ошибку. Так как виртуальных машин и сервисов в компании может быть много, на ручную проверку логов может уйти много времени. Поэтому есть системы централизованного логирования, которые автоматически собирают необходимые данные в одном месте. Одна из самых популярных — Elasticsearch. С помощью дополнительного компонента Logstash эти логи передаются в систему и автоматически анализируются. А благодаря инструменту Kibana их можно удобно визуализировать, читать и фильтровать.
Владеть инструментами контейнеризации
Также нужно познакомиться с понятиями контейнеризации и инструментарием Docker. С его помощью можно запускать приложения изолированно от основной ОС. А чтобы управлять этими контейнерами, нужно знать инструменты оркестрации, например, Kubernetes. Он их запускает, автоматически отслеживает состояние и перезапускает в случае сбоев. Поэтому Kubernetes наиболее полезен, когда микросервисов становится много. Также управлять контейнерами можно и с помощью Docker Compose — это инструмент, который позволяет описать конфигурацию из нескольких сервисов и запустить сразу несколько взаимосвязанных контейнеров.
Доставлять код в окружение
Также Linux-инженер занимается развёртыванием и управлением приложениями. Когда разработчик пушит свой код в Git-репозиторий, Linux-инженер помогает доставить код в нужное окружение: сначала в среду разработки, потом в тестовое окружение, потом уже на продакшн. Он создаёт пайплайн, который первым этапом тестирует код. Если тесты успешны, то пайплайн собирает Docker-образ и пушит в удалённый репозиторий, например, Nexus или GitLab Container Registry. После этого образ скачивается или запускается на нужном окружении: это может быть виртуальная машина или Kubernetes-кластер.
Навыки разработки ПО для Linux-инженера скорее вспомогательные, чем основные. Однако их знание даёт конкурентное преимущество на рынке — используя этот опыт, он может продолжить рост в качестве DevOps-инженера в команде разработки или стать SRE-инженером.
А чтобы вы могли ещё глубже прокачать навыки Linux-инженера, мы собрали для вас подборку книг: от азов до управления системами.
3К открытий5К показов