Kubernetes¶
«В деле своем лесоруб не силой берет, а сноровкой;
Той же сноровкой ведет по волнам винночерного моря
Кормчий свой легкий корабль, бросаемый в стороны ветром;
Той же сноровкой и в гонках один побеждает другого».
Гомер, «Илиада».
Kubernetes — ПО для оркестрации (или проще — жонглирования) контейнеров, как правило, применяется совместно с Docker. У Kubernetes довольно высокий порог входа, но он умеет больше своих конкурентов (таких как Docker Swarm, Apache Mesos, Red Hat OpenShift или HashiCorp Nomad), поэтому в настоящее время именно Kubernetes стал, можно сказать, системой оркестрации, применяемой по умолчанию.
Иногда для краткости используется сокращение k8s.
Тогда как Docker и технология контейнеризации появились как средства автоматизации развёртывания отдельных приложений, появление Kubernetes стало ответом на требование автоматизации работы с большим количеством контейнеров. Kubernetes позволяет гибко настроить управление контейнерами, а также автоматически балансировать нагрузку, запуская приложение сразу на нескольких серверах. Именно умение автоматически масштабировать нагрузку и обеспечивать стабильную доступность серверов привело к преобладанию Kubernetes на рынке оркестраторов, так как Docker Swarm или Apache Mesos имеют достаточно ограниченные возможности решения задач такого рода.
Тут стоит вскользь упомянуть, что кроме Docker Swarm есть еще и Docker Compose. Основное отличие между ними — Docker Compose позволяет работать с приложением, состоящим из нескольких контейнеров и работающим на одном сервере; Docker Swarm позволяет оркестрировать контейнерами на базе многих серверов. В практике DevOps инженеров нередки случаи, когда вслед за ростом бизнеса и расширением списка требований приходится последовательно переносить инфраструктуру приложения сначала с Docker Compose на Docker Swarm, а потом с Docker Swarm на Kubernetes, поэтому имеет смысл рассмотреть использование k8s с самого начала.
Кроме standalone Kubernetes существует еще и Managed Kubernetes, позволяющий использовать Kubernetes в качестве облачного сервиса и несколько упрощающий оркестрацию. Managed Kubernetes с каждым годом завоёвывает всё большую популярность, так как позволяет пользоваться полнофункциональным k8s даже тем организациям, которые не имеют в своём составе полноценной команды DevOps инженеров.
При выборе конкретной технологии оркестрации всё же нужно не забывать, что Kubernetes — сложная система, требующая не только комплексного подхода для своего обслуживания, но и, как правило, достаточно глубокого изменения методологии собственно разработки, т. е. каждый программист не только должен понимать и применять специфические подходы, свойственные пайплайну Docker/Kubernetes, но и иметь достаточно глубокие познания в DevOps, чтобы при обновлении ПО иметь возможность самостоятельно связать новый код с инфраструктурой контейнеризации/оркестрации. Kubernetes предоставляет набор очень мощных и гибких инструментов оркестрации, жизненно необходимых для highload проектов с изменяемой (и зачастую непредсказуемой) нагрузкой. Но нужно трезво оценивать необходимость подобного инструментария в рамках вашего конкретного проекта. То, что на освоение k8s придётся потратить много времени и сил даже специалистам высокой квалификации — это еще полбеды. Гораздо хуже, если из-за плохого понимания Kubernetes начнутся отказы и простои сервисов компании.
Примерный уровень владения Kubernetes, необходимый для администрирования и разработки, можно оценить по курсу программ Certified Kubernetes Administrator (CKA), Certified Kubernetes Security Specialist (CKS) и Certified Kubernetes Application Developer (CKAD) от Linux Foundation.