Поиск по сайту:

Вам действительно нужен Kubernetes (K8s)?


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

В чем хорош Kubernetes

Kubernetes (K8s) очень часто используется с Docker в профессиональных средах, и из-за этого может показаться, что это обновленная или более организованная версия Docker. Хотя в некоторых отношениях это верно, это не точная цель K8.

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

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

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

В чем Kubernetes не силен

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

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

Без Kubernetes единственная дополнительная проблема, которая у вас есть, — это необходимость вручную запускать команды на ваших серверах с помощью интерфейса командной строки docker или API docker-compose. Если вам нужно добавить новый контейнер или переместить контейнер на другой узел, вам нужно будет снова запустить эти команды. Это может быть проблемой, если, например, вы столкнулись с неожиданно высоким трафиком и вам нужно автоматически запустить больше экземпляров. K8s решит эту проблему. Но во многих случаях ваш трафик может быть относительно стабильным или, по крайней мере, предсказуемым на еженедельной основе, особенно для серверных служб, которые на самом деле не нуждаются в автоматическом масштабировании.

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

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

Что следует использовать вместо этого?

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

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

Если вы хотите автоматически масштабировать определенные службы, вам почти всегда нужно обращаться к API облачного провайдера для предоставления новых ресурсов. Kubernetes может справиться с этим для многих платформ, но такие сервисы, как AWS, Azure и GCP, имеют простые контейнерные сервисы с функциями автоматического масштабирования. Сервис AWS ECS можно легко настроить на автоматическое масштабирование в соответствии с высоким спросом.

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

docker run --detach 
--name watchtower 
--volume /var/run/docker.sock:/var/run/docker.sock 
containrrr/watchtower

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

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