♾️💎 20 лайфxаков для DevOps-инженеров

В каждой профессии – и DevOps не исключение – есть обширный пласт тайных знаний, лайфхаков, секретов мастерства и лучших практик. Любой специалист, продержавшись в профессии достаточно долго, набирает собственный багаж таких навыков. И хотя быстрых способов стать DevOps-гуру нет, есть хитрости и инструменты, которые подарят вам мгновенный прирост продуктивности – делимся подборкой.

Оригинал статьи можно почитать здесь.

Инструменты

При выборе наиболее подходящих инструментов всегда нужно учитывать контекст. Он может быть неожиданным: в Германии, к примеру, до сих пор надо посылать факс, чтобы ваше послание гарантированно не осталось без внимания, а в японских госучреждениях буквально до этого года в ходу были... дискеты.

Словом, самые полезные инструменты – необязательно самые новые и самые крутые, а те, что решают задачи конкретного проекта максимально эффективно. Перечисленные ниже инструменты подойдут для большинства случаев.

K9s

K9s — это CLI-интерфейс для работы с кластерами Kubernetes. Он простой и понятный: разобраться в навигации, наблюдении и управлении приложениями можно очень быстро. После его освоения вы, скорее всего, уже никогда не вернетесь к другим инструментам. K9s постоянно отслеживает изменения в Kubernetes и предлагает множество полезных команд для взаимодействия с наблюдаемыми ресурсами.

K9s

tmux

tmux — это мощный терминальный мультиплексор, который повышает продуктивность работы благодаря возможности сохранять сессии, управлять окнами и панелями, а также настраивать комбинации клавиш и конфигурационные файлы. Он поддерживает скрипты для автоматизации, облегчает совместную работу с общими сессиями и хорошо интегрируется с различными оболочками и инструментами.

tmux
♾️ Библиотека devops’a
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека devops’a»
♾️🎓 Библиотека DevOps для собеса
Подтянуть свои знания по DevOps вы можете на нашем телеграм-канале «Библиотека DevOps для собеса»
♾️🧩 Библиотека задач по DevOps
Интересные задачи по DevOps для практики можно найти на нашем телеграм-канале «Библиотека задач по DevOps»

Glasskube

Glasskube — это опенсорсный менеджер пакетов для Kubernetes, вдохновленный простотой Homebrew и npm.. Он позволяет развертывать, обновлять и настраивать пакеты в Kubernetes в 20 раз быстрее, чем при использовании Helm или Kustomize. Использовать Glasskube можно через GUI, CLI или напрямую развертывать пакеты через GitOps.

Glasskube

ripgrep

ripgrep — это мощный инструмент поиска, известный своей скоростью, гибкостью и удобным пользовательским интерфейсом. Он быстро обрабатывает большие кодовые базы с помощью продвинутых алгоритмов, поддерживает широкий спектр поисковых шаблонов и предоставляет четкие результаты с выделением ключевых слов. Хорошо интегрируется с другими инструментами, работает на разных платформах и настраивается под нужды пользователей.

ripgrep

Firefox Multi-Account Containers

Firefox Multi-Account Containers — сильно недооцененное браузерное расширение для управления онлайн-активностью. Оно помогает разделять веб-сайты на разные контейнеры или вкладки, предотвращая отслеживание сеансов между сайтами. Самая полезная функция — возможность одновременного входа в несколько аккаунтов в одном браузере. Изоляция сеансов с помощью разделения файлов cookie защищает личные данные и улучшает общий опыт использования любого сервиса. Даже если у вас есть несколько аккаунтов AWS — это не проблема: можно войти во все аккаунты сразу в одной вкладке браузера.

Firefox Multi-Account Containers

VPA

VPA (Vertical Pod Autoscaler) освобождает пользователей от необходимости устанавливать актуальные ограничения ресурсов и запросы для контейнеров в подах. При настройке он автоматически устанавливает запросы на основе использования, а затем обеспечивает соответствующее планирование на узлах, чтобы для каждого пода были доступны соответствующие объемы ресурсов.

Пример конфигурации VPA
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
  name: my-app-vpa
spec:
  targetRef:
    apiVersion: "apps/v1"
    kind:       Deployment
    name:       my-app
  updatePolicy:
    updateMode: "Auto"

kubectx + kubens

kubectx + kubens — лучшие инструменты для быстрого переключения между контекстами (кластерами) и пространствами имен Kubernetes.

kubectx
kubens

ChatGPT

Чтобы выжать из чат-бота максимум пользы, нужно задать ему роль DevOps сеньора. В промпте должны быть детальные указания для глубокого вхождения в роль:

Ты будешь действовать как старший инженер DevOps, предоставляя лайфхаки и советы о том, как стать выдающимся DevOps-специалистом. 
Ты готов помогать младшим членам команды с любыми вопросами, которые у них могут возникнуть.
Пожалуйста, включай в ответы практические советы, рекомендуемые инструменты и лучшие практики для управления инфраструктурой и CI/CD пайплайнами. 
Напиши ответ, используя мой стиль общения, который является ясным, кратким и практичным. Вот примеры моего стиля общения:
"Сосредоточьтесь на автоматизации повторяющихся задач для экономии времени и снижения ошибок."
"Для контейнеризации и оркестровки используйте предназначенные для этого инструменты – Docker и Kubernetes."
"Всегда мониторьте производительность системы и будьте проактивными в выявлении потенциальных проблем."
"При обучении младших сотрудников будьте терпеливыми и объясняйте концепции простыми словами."

Чтобы убедиться в том, что чат-бот вошел в роль, понял ваши потребностей, и будет предоставлять наиболее релевантную информацию и советы, стоит задать ему несколько тестовых вопросов — они помогут уточнить промпты:

Твои советы и объяснения больше ориентированы на начинающих или тех, кто уже имеет некоторый опыт в DevOps?
Можешь ли ты предоставить более подробные примеры твоего стиля общения, особенно в тех случаях, когда ты объясняешь сложные концепции младшим сотрудникам?
Есть ли конкретные проблемы или важные области внутри DevOps (например, автоматизация, мониторинг, безопасность), которые ты хотел бы приоритизировать для обучения и поддержки младших сотрудников?

Навыки

Навыки не приобретаются мгновенно — этот процесс требует времени и усилий. Основная сложность, однако, состоит в том, чтобы понять, какие навыки действительно нужны — ИТ-сфера меняется слишком стремительно. Впрочем, есть два ключевых навыка, которые всегда будут полезны для DevOps-инженеров: написание скриптов и ведение документации.

Написание скриптов

Скрипты для DevOps инженера — как швейцарский нож. Они должны стать самым мощным, универсальным, многофункциональным инструментом в вашем арсенале. С помощью скриптов можно:

  • Автоматизировать повторяющиеся задачи.
  • Связывать разные процессы.
  • Обеспечивать единообразие в разных средах.

Как научиться писать скрипты:

  • Осваивайте инструменты вроде Makefile.
  • Изучайте регулярные выражения (regex) для обработки текста.
  • Практикуйтесь в написании скриптов на Bash для работы в командной строке.

Практический совет:

Не нужно становиться экспертом перед тем, как начать использовать скрипты на работе. Ищите в своих текущих процессах шаги, которые выполняются вручную, пробуйте автоматизировать эти шаги с помощью скриптов. Это значительно упростит вашу работу и сделает вас более ценным специалистом. Если нужна помощь — спросите совета у более опытного коллеги или ChatGPT.

Совершенствуйте свои навыки, а не резюме.
Шерил Сэндберг

Документация

Документация помогает сохранить знания и опыт, которые могут пригодиться позже. Это лучший способ позаботиться о своем профессиональном будущем. Основной принцип — записывайте все, в любом приложении для ведения заметок. Не так важно, какой именно инструмент вы выберете, главное — выбрать один и придерживаться его. Постоянство в использовании одного инструмента эффективнее, чем постоянные переходы между разными системами.

Важно:

  • Не тратьте слишком много времени на организацию и оптимизацию заметок.
  • Заметки не должны быть идеальными, они должны быть функциональными.
  • Излишнее внимание к оформлению и структуре заметок — это лишняя работа, которая может отвлекать от реальных задач.

Привычки

Одной мотивации недостаточно для долгосрочного успеха и развития: продуманные и последовательные привычки — ключ к постоянному росту. Привычки помогают оставаться эффективным, даже когда мотивация снижается.

Мотивация — это то, что заставляет вас начать. Привычки — это то, что заставляет вас продолжать.
Джим Райан

Выделяйте конкретные промежутки времени вместо составления ToDo-списков

Вместо ведения списков дел нужно выделять конкретные временные интервалы на выполнение конкретных задач. Списки дел сами по себе — это просто списки желаний. Реальный рабочий план появляется только тогда, когда вы размещаете задачи в календаре. При составлении плана важно выделять время на непрерывную, сосредоточенную, глубокую работу: это критично для значимого вклада в команду.

Мало кто может выполнить свой дневной план на 100%. План можно корректировать в течение дня, если происходит что-то непредвиденное. Используйте временные интервалы как ориентиры, не забывайте об отдыхе. Главное — взять за правило придерживаться какого-то плана в принципе.

Компенсация времени, потраченного на совещания

Большинство работников не могут полностью контролировать свое расписание — значительная часть рабочего времени тратится на стендапы, синки и дейлики. Встречи и совещания имеют свойства возникать неожиданно — это может испортить ваши планы на сосредоточенную работу.

Решить эту проблему можно только одним способом: каждый раз, когда в ваш календарь добавляется новая встреча, вы должны резервировать эквивалентный блок времени для глубокой работы. Прошла часовая встреча — выделяйте час для сосредоточенной работы. Эта привычка требует дисциплины и последовательности, но только так можно сохранять гибкость, не жертвуя при этом своей продуктивностью.

Ритуал завершения рабочего дня

Это серия вопросов, на которые вы должны себе ответить в конце рабочего дня. Привычка особенно полезна для удаленных работников – она позволяет «выключить» рабочий режим и не думать о своих обязанностях до следующего дня. Следование такому ритуалу помогает улучшить баланс между работой и личной жизнью, а также повышает общую продуктивность. Примерный список вопросов:

  • Все ли мелкие задачи я выполнил?
  • Остались ли у меня незавершенные разговоры?
  • Нужно ли перенести какие-то задачи на завтра?
  • Сколько часов глубокой работы я выполнил?
  • Проверил ли я в последний раз метрики, которые отслеживаю?

Ведение заметок во время встреч

Ведение заметок во время встреч и их последующее распространение должно быть обычной практикой в компании. Если это не так, у вас есть отличная возможность начать эту практику.

Преимущества практики ведения заметок

- Для вас лично:

  • Помогает лучше сконцентрироваться на содержании встречи.
  • Улучшает запоминание ключевых моментов.
  • Позволяет структурировать информацию в процессе ее получения.

- Для команды:

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

- Для компании:

  • Создает культуру прозрачности и ответственности.
  • Помогает в долгосрочном планировании и отслеживании прогресса.

Тестовые прогоны сбоев

Тестовые прогоны сбоев это превентивная практика, которая помогает DevOps инженерам быть готовыми к реальным проблемам. Регулярно отрабатывая сценарии возможных сбоев, вы повышаете свою эффективность в критических ситуациях, сокращаете время реакции и минимизируете риски для системы. Это ключевой элемент в обеспечении надежности и стабильности инфраструктуры.

Основные навыки для отработки

- Подключение к системам:

  • Быстрое подключение к кластерам или виртуальным машинам.
  • Проверка доступа ко всем необходимым ресурсам.

- Работа с файлами:

  • Перемещение файлов между системами.
  • Быстрый поиск и анализ логов.

- Работа с контейнерами:

  • Извлечение логов из контейнеров.
  • Диагностика проблем в контейнеризованных приложениях.

- Настройка доступа:

  • Настройка SSH ключей.
  • Подготовка и проверка kubeconfig файлов.
  • Настройка других необходимых инструментов доступа.

Скрипты, конфигурации и расширения

Если вам приходится выполнять какую-то задачу более одного раза – автоматизируйте ее или оптимизируйте.

Краткие алиасы вместо полных команд

Не печатайте полные команды – используйте алиасы. Только представьте, сколько времени можно сэкономить за несколько лет работы в DevOps, если печатать алиас k вместо kubectl.

Вот примеры таких алиасов, которые DevOps-инженеры используют каждый день:

k=kubectl
kctx='kubectl ctx'
kgp='kubectl get pods'
kns='kubectl ns'
l='ls -lah'
la='ls -lAh'
ll='ls -lh'
ls='ls -G'
lsa='ls -lah'
md='mkdir -p'
rd=rmdir
run-help=man

Эффективная очистка завершенных задач

В среде с большим количеством задач завершенные задачи могут быстро накапливаться – это приводит к значительному потреблению ресурсов. Для решения этой проблемы нужно использовать TTL контроллер в Kubernetes: он дает возможность указать время жизни завершенных задач или подов. После истечения этого времени они автоматически удаляются.

Как использовать:

  • Установите поле .spec.ttlSecondsAfterFinished в спецификации задачи.
  • Значение этого поля указывает, сколько секунд задача должна существовать после завершения

В этом примере задача будет автоматически удалена через 100 секунд после завершения:

apiVersion: batch/v1
kind: Job
metadata:
  name: test-ttl-job
spec:
  ttlSecondsAfterFinished: 100
  ...

Синхронизация с удаленным репозиторием

Пример скрипта для синхронизации вашего локального репозитория с удаленным (использование --force-with-lease обеспечивает дополнительную безопасность, проверяя, что вы не перезапишете чужие изменения в удаленном репозитории):

git remote add upstream <upstream-url>
git fetch upstream
git rebase upstream/main
git push --force-with-lease

Автодополнение команд в kubectl

Автодополнение упрощает и ускоряет работу с Kubernetes. Эта функция особенно полезна при подготовке к экзамену CKA (Certified Kubernetes Administrator), поскольку значительно сокращает время, необходимое для ввода команд, и улучшает вашу производительность во время экзамена.

Установка и настройка автозаполнения для kubectl на Linux включает в себя несколько шагов:

# Установка bash-completion
sudo apt-get install bash-completion

# Добавление скрипта автозаполнения kubectl в .bashrc
echo 'source <(kubectl completion bash)' >>~/.bashrc

# Применение изменений
source ~/.bashrc

О других методах установки можно прочитать здесь.

Расширение Remote – SSH

Расширение Remote – SSH для VS Code позволяет разработчикам использовать любую удаленную машину, доступную через SSH, как среду разработки. Это расширение значительно упрощает процесс разработки, предоставляя возможность работать непосредственно на той же операционной системе, на которой планируется развертывание приложения, использовать мощное оборудование удаленной машины, переключаться между различными рабочими средами и отлаживать приложения на расстоянии.

В заключение

Не существует волшебной формулы, которая автоматически сделает вас одним из 1% выдающихся DevOps-инженеров. Это вопрос времени и постоянного саморазвития. Со временем вы станете лучше распознавать повторяющиеся паттерны и находить быстрые решения на основе предыдущего опыта. Все перечисленные выше советы, конечно, не принесут вам мгновенное повышение или 50% прибавку к зарплате – но они, несомненно, станут отличной базой для дальнейшего развития.

***

Есть ли у вас собственные секреты и лайфхаки для DevOps, которые не были упомянуты в статье? Поделитесь своим опытом в комментариях!

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ

Библиотека программиста
12 июля 2017

Что такое Docker, и как его использовать? Подробно рассказываем

Разберем по косточкам, ведь Docker – это мощный инструмент, и огромное коли...