Что такое Kubernetes / K8s?

За последние годы процессы развертывания приложений значительно изменились и распространилась практика контейнеризации приложений. Она представляет собой метод упаковки приложений и их зависимостей в изолированные контейнеры, которые могут быть развернуты и выполнены практически в любой среде исполнения. Популярной платформой оркестрации контейнеров является Kubernetes, она предоставляет средства для автоматизации развертывания, масштабирования и управления контейнеризированными приложениями, сокращая сложность и усилия, требуемые для этих операций.
Kubernetes — что это такое простыми словами
K8s / Kubernetes — это открытая расширяемая платформа для автоматизации процесса развертывания, масштабирования и управления контейнеризированными приложениями, разработанная командой Google. Кубернетис предоставляет набор функций и инструментов для эффективного управления контейнерами с приложениями в распределенных средах.
Основные преимущества K8s включают:
- автоматизацию развертывания и оркестрации контейнерами, что позволяет разработчикам эффективно управлять кластером контейнеров. Он предоставляет средства для запуска, остановки и мониторинга контейнеров, а также для управления нагрузкой и ее балансировки между узлами кластера;
- масштабирование приложений горизонтально и вертикально. Автоматически реагирует на изменения нагрузки и может увеличивать или уменьшать количество экземпляров контейнеров для обеспечения оптимальной производительности и доступности;
- встроенный механизм самоисцеления. Он способен обнаруживать и восстанавливать неработающие контейнеры или узлы автоматически, обеспечивая непрерывную работу приложений;
- использование декларативной модели, в которой разработчики определяют желаемое состояние системы, а Kubernetes самостоятельно приводит систему в соответствие с этим состоянием. Это упрощает процесс развертывания и управления приложениями, обеспечивая консистентность и предсказуемость окружения;
- поддержку различных окружений. Kubernetes позволяет развертывать контейнеры Kubernetes на различных платформах, включая облачные провайдеры (например, AWS, Google Cloud, Microsoft Azure) и собственные локальные серверы. Это обеспечивает гибкость и универсальность в выборе инфраструктуры.
История K8S
История Kubernetes началась с работы Google над разработкой системы управления масштабируемыми приложениями внутри компании. В 2003 году Google начал использовать систему под названием Borg для управления своими распределенными приложениями и ресурсами в масштабе всей компании. Borg предоставлял автоматическое развертывание, масштабирование, мониторинг, а также управление ресурсами.
В 2014 году инженеры Google решили создать открытую и доступную версию системы управления контейнерами, основанную на опыте и принципах, заложенных в Borg. Они начали разрабатывать проект под названием Kubernetes. В Google считали, что контейнеризация и оркестрация приложений являются важными составляющими разработки и управления современными приложениями, и решили делиться своими знаниями и инструментами с широкой общественностью разработчиков.
Google анонсировал первую публичную версию Kubernetes в июне 2014 года. Платформа была выпущена как открытый исходный код и передана в управление Cloud Native Computing Foundation (CNCF), организации, которая поддерживает развитие облачных технологий и проектов. С момента своего выпуска Kubernetes получил широкую поддержку и привлек огромное внимание сообщества разработчиков и индустрии. Он стал стандартом де-факто для управления приложениями и является одним из самых активно развивающихся проектов в CNCF.
Kubernetes сегодня продолжает развиваться и привлекать все больше компаний и организаций, которые используют его для управления своими приложениями в различных инфраструктурах. Kubernetes предоставляет мощные инструменты для работы с приложениями на различных платформах, включая облачные провайдеры, такие как Serverspace, и собственные локальные среды.
За последние годы k8s претерпел значительные изменения и развитие и теперь он является неотъемлемой частью современного DevOps и разработки облачных приложений. Было выпущено множество новых версий, добавлены новые функциональные возможности и улучшения. Компании и организации всего мира активно внедряют Kubernetes для управления своими контейнеризированными приложениями, а экосистема вокруг платформы постоянно растет.
Архитектура Kubernetes
1. Мастер-узел, или Control Plane Node. Здесь выполняются важные задачи по администрированию кластера k8s. Он включает в себя 4 компонента:
- API-сервер (API Server) предоставляет интерфейс для взаимодействия с Kubernetes API.
- Контроллеры (Controllers) обеспечивают управление и контроль за состоянием кластера, включая контроллер развертывания (Deployment Controller), контроллер репликации (Replication Controller) и другие.
- Scheduler отвечает за планирование и размещение подов на рабочих узлах, основываясь на требованиях ресурсов и политиках размещения.
- etcd – это распределенное хранилище ключ-значение, используемое для хранения конфигурации кластера и состояния.
2. Nodes или ноды используются для обозначения физических или виртуальных машин, на которых работают контейнеры. Каждая нода представляет собой рабочий узел (Worker Node) в кластере Kubernetes. Нода является исполнительной средой для контейнеров и предоставляет ресурсы и средства для выполнения приложений в контейнерах. На ноде работает агент Kubernetes, называемый Kubelet, который управляет жизненным циклом контейнеров и подов на данной ноде.
Каждая нода имеет свои вычислительные ресурсы (процессор, память, хранилище) и сетевые интерфейсы. Ноды связаны с мастер-узлами (Master Nodes) через сеть, чтобы обмениваться информацией о состоянии кластера и получать команды для размещения и управления контейнерами.
- Kubelet – это агент, устанавливаемый на каждом рабочем узле, который управляет и контролирует контейнеры в подах, находящихся на данной ноде;
- Kube-proxy обеспечивает сетевую связность для подов, включая проксирование и балансировку нагрузки;
- Container Runtime отвечает за запуск и управление контейнерами, например, Docker, Containerd, CRI-O.
3. Поды (Pods) – это базовая и минимальная развертываемая единица, которая объединяет один или несколько контейнеров вместе и обеспечивает им изолированную среду выполнения. Под является основным строительным блоком для размещения и управления контейнерами в Kubernetes.
4. Сервисы (Services): Абстракция, предоставляющая постоянную точку доступа к группе подов и балансировку нагрузки между ними.
5. Дополнительные компоненты:
- Контроллер репликации обеспечивает запуск и управление несколькими экземплярами подов для повышения отказоустойчивости и масштабируемости приложений.
- Постоянные тома (Persistent Volumes) и постоянные тома-запросы (Persistent Volume Claims) позволяют приложениям сохранять данные в постоянном хранилище даже при перезапуске или перемещении подов.
- Конфигурации и секреты включают конфиг-карты (ConfigMaps) для хранения конфигурационных данных и секреты (Secrets) для безопасного хранения конфиденциальной информации, такой как пароли или ключи доступа.
- Ingress Controller обеспечивает управление входящим сетевым трафиком в кластере, позволяя настраивать маршрутизацию и балансировку нагрузки для сервисов.
- Namespaces используются для логического разделения и изоляции ресурсов в кластере, позволяют создавать виртуальные группы для приложений и пользователей.
- Kubernetes интегрируется с различными системами мониторинга и логирования, такими как Prometheus, Grafana, ELK Stack и другими, чтобы обеспечить наблюдаемость и анализ состояния кластера и приложений.
Для чего нужен Kubernetes
Кubernetes выполняет ряд важных задач, связанных с управлением контейнерами:
- Развертывание контейнеров и управление их состоянием. Kubernetes обеспечивает возможность запуска, остановки и перезапуска контейнеров. Это позволяет гарантировать, что требуемые приложения работают и поддерживаются в актуальном состоянии.
- Масштабирование приложений. Kubernetes позволяет масштабировать приложения путем запуска нескольких контейнеров одновременно на большом количестве хостов. Это обеспечивает более эффективное использование ресурсов и повышает отказоустойчивость системы.
- Балансировка нагрузки. Kubernetes автоматически балансирует нагрузку между контейнерами, равномерно распределяя ее и обеспечивая оптимальную производительность системы. С помощью API Kubernetes группирует контейнеры логически, определяет их пулы и размещение, что способствует эффективному использованию ресурсов.
Процесс установки Kubernetes
Услугу «Kubernetes» вы можете заказать в Serverspace, выбрав версию, локацию кластера и настроив CPU, RAM и количество узлов. В панели управления услугой вы можете подключить Dashboard. Но как же начать с ним работу?
Вы имеете возможность создавать и удалять кластеры, изменять их конфигурацию, а также добавлять и удалять узлы через нашу панель управления. Для выполнения других задач вам потребуются инструменты командной строки, специально разработанные для работы с кластерами.
kubectl – это командная утилита Kubernetes. С ее помощью вы можете запускать разнообразные команды для взаимодействия с вашими кластерами Kubernetes. Kubectl дает возможность развертывания приложений, контроля и управления ресурсами кластера, а также просмотра журналов. Полный список возможностей kubectl можно найти в официальной документации, доступной на сайте Kubernetes.
Разберем установку утилиты на Ubuntu. Для этого вам необходимо использовать следующую команду:
sudo apt-get update && sudo apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl
Чтобы подключиться к кластеру Kubernetes из командной строки, вам потребуется конфигурационный файл, содержащий сертификаты аутентификации и другую информацию о соединении. Следуйте этим шагам для загрузки файла на ваш компьютер или сервер и его импорта:
Загрузите конфигурационный файл на свой компьютер или сервер:
export KUBECONFIG=<путь к файлу>
Теперь вам необходимо подключиться к кластеру
Для проверки подключения к кластеру, получите информацию о его состоянии:
kubectl cluster-info
В результате успешного подключения будет выведен адрес, на котором запущен Control Plane:
Kubernetes control plane is running at https://XXX.XXX.XXX.XXX:YYY
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Если kubectl настроен неверно или не может подключиться к кластеру Kubernetes, в консоли отобразится следующее сообщение:
The connection to the server was refused - did you specify the right host or port?
Для диагностики ошибок подключения используйте следующую команду, которая выводит подробную информацию:
kubectl cluster-info dump
Для работы с kubectl и ознакомления с основными командами Kubernetes вы можете использовать шпаргалку от Kubernetes.