Найти тему
DevOps Qazaqstan

Лучшие практики создания приложений в Kubernetes

Оглавление

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

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

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

1. Думайте мельче

Команды разработчиков приложений, разрабатывающие ПО для контейнеров, должны мыслить масштабно. Этот сдвиг в мышлении невсегда даётся легко.

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

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

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

Это может показаться нелогичным, но такой подход обеспечивает бесперебойную репликацию ПО, более простое тестирование, более плавную интеграцию в конвейеры CI/CD и, что немаловажно, более простое обслуживание.

Большее количество более мелких компонентов означает, что у вас будет больше контейнеров и точек интеграции, что усложняет процесс. Однако Kubernetes предназначен для упрощения и автоматизации управления большим количеством контейнеров. Вы можете воспользоваться преимуществами функций оркестрации контейнеров Kubernetes, чтобы применить подход «думай мельче».

2. Используйте CI/CD автоматизацию

В первом пункте мы упомянали конвейеры CI/CD. Если вы еще не используете или не рассматриваете конвейеры CI/CD как часть своей контейнерной стратегии, вам следует начать прямо сейчас.

Вы поймете ключевые преимущества контейнеров и Kubernetes, только когда перейдете на CI/CD. Например:

  • Масштабирование вверх и вниз в ответ.
  • Разрабатывайте, тестируйте и развертывайте в рабочей среде в нескольких средах.
  • Тестируйте в производстве и постоянно улучшайте.

Kubernetes сам по себе не дает этих преимуществ. Вам нужен правильный рабочий процесс и интегрированные инструменты, чтобы включить CI/CD в вашей организации.

Убедитесь, что вы выбрали инструменты, которые интегрируются с Kubernetes и позволяют отслеживать разработку и тестирование в каждой среде и в каждом контейнере.

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

Эти методы помогут вам сократить время выхода на рынок и снизить риски циклов вашего продукта.

3. Делайте образы контейнеров легкими

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

Облегченные образы контейнеров с общими слоями быстрее переносятся и развертываются. Kubernetes может запускать и останавливать легкие образы контейнеров быстрее, чем тяжелые. Это помогает автомасштабированию и аварийному восстановлению быть максимально быстрыми.

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

Чтобы образы контейнеров были легкими, следуйте этим рекомендациям.

Используйте полные базовые образы

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

Включите все длительные процессы установки в ваши базовые образы и разрешите запуск конфигураций Ambler при загрузке системы. Это быстрее, чем запускать сценарии установки в каждом контейнере при их загрузке.

Однако, если вы используете Scala, JavaScript или Java, вам может быть сложно это сделать, потому что виртуальная машина Java (JVM) достаточно громосткая.

Используйте многоэтапные сборки Docker

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

4. Проверяйте сторонние образы или сделайте их сами

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

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

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

5. Планируйте наблюдаемость, телеметрию и мониторинг с самого начала

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

Планируйте наблюдаемость, телеметрию и мониторинг с самого начала. Это сократит время разработки, а также принесет следующие преимущества.

  • Вы можете уменьшить общий размер изображения
  • Вы можете повысить надежность телеметрии и мониторинга
  • Вы можете полностью контролировать потоки информации между вашими контейнерами
  • Вы можете инструментировать информацию, которая, как вы знаете, потребуется для наблюдения, упрощая отслеживание, идентификацию и реагирование на проблемы

6. Рассмотрите приложения без сохранения состояния

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

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

Вы можете использовать приложения и процессы без сохранения состояния, чтобы максимизировать независимость и свести к минимуму частоту обращения Kubernetes к предыдущим процессам и информации.

Вы не можете всегда оставаться без состояния. Иногда операции с отслеживанием состояния необходимы для потока информации в системе или предпочтительнее из-за их преимуществ для пользователя.

Однако, если вы с самого начала стремитесь к работе без сохронения состояния в качестве основной цели, вы максимизируете производительность Kubernetes.

7. Учитывайте совместимость

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

Во время планирования и разработки сделайте функциональную совместимость основной целью вашего программного обеспечения. Вам нужно будет рассмотреть:

  • Портативность
  • Совместимость
  • Поддержка

Это серьезная проблема, но ее стоит решить, если вы хотите максимально эффективно использовать Kubernetes и свою распределенную систему.

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

Лучшая производительность, безопасность, управление и видимость ждут тех, кто понимает, как использовать Kubernetes в полной мере.

CORE 24/7 - первый сертифицированный поставщик услуг по Kubernetes в Средней Азии. Мы сможем проконсультировать и обучить вашу команду работе с K8S или перенести приложение на систему Kubernetes и оказывать поддержку вашего проекта 24/7/365.