DevOps Kubernetes
Kubernetes для чайников
Сегодня дадим ответ на вопрос «Kubernetes – что это?» и расскажем об основах работы с кубернетес для чайников. Благодаря Kubernetes можно масштабировать контейнеры без дополнительных затрат, используя возможности данного программного обеспечения. Кубернетес можно применять для команд и проектов любых размеров. Программное обеспечение имеет открытый код и комьюнити его любит за широкую свободу действий. По работе с Kubernetes Habr предлагает много публикаций, подтверждающих гибкость и совместимость с разными инфраструктурами. Например, Azure Kubernetes (AKS) – бессерверная платформа с возможностями CI/CD корпоративного уровня.Docker Kubernetes – также удачный симбиоз. Те, кто пользуется контейнерами в Docker, часто сталкиваются с проблемой. Как запускать и балансировать контейнеры на большом количестве хостов? Проект Docker Kubernetes предусматривает API для логического распределения контейнеров. Можно определять группы, балансировать нагрузку и выстраивать размещение.
Terraform Kubernetes – эффективная рабочая пара при деплое кластера куберенетес. Часто используется при миграции систем и сервисов в облачную инфраструктуру. В подтверждение совместимости кубера по запросу Kubernetes Хабр найдете публикации с практическими примерами и кейсами.
Немного разобрались с вопросом «Kubernetes – что это?», идем дальше к непосредственному разбору концепции.
Kubernetes Tutorial
В этом разделе будет небольшой Kubernetes tutorial по терминам и компонентам концепции. В работе Kubernetes используются такие понятия:
- Kubernetes Cluster – кластер, состоящий из набора машин
- Node – нода (машина)
- Kubernetes Secrets – объекты с конфиденциальной информацией
- Pods – группа контейнеров
- Kubernetes Service – сущность, определяющая доступ к Pods
- Kubernetes Replication Controllers – обеспечивает запуск реплик Pods
- Kubernetes Volumes – директория
- Kubernetes Jobs – контроллер, создающий и отслеживающий Pods
- Kubernetes Labels – пары «ключ-значение», прикрепляемые к объектам
- Среда – среда разворачивания контейнеров.
А теперь вкратце поговорим про компоненты. Components Kubernetes dashboard выполняют базовые операции и обрабатывают события. Запускаются в произвольном кластере и на любой машине.
- kube-apiserver – компонент, предоставлемый API Kubernetes, клиентская часть dashboard, используется при горизонтальном масштабировании
- etcd – хранилище данных «ключ-значение»
- kube-scheduler – используется для отслеживания под и привязки их к нужному узлу
- kube-controller-manager – компонент, запускающий процессы контроллера
- cloud-controller-manager – компонент, запускающий контроллеры, взаимодействующие с облачными сервисами
- kubelet – агент для каждого узла, отслеживает запуск контейнеров в Pod
- kube-proxy – прокси, работающий в каждом узле.
Есть и другие, дополнительные компоненты кластера, не указанные в этом кратком Kubernetes tutorial. С ними вы познакомитесь поближе уже непосредственно при работе с Kubernetes.
Чтобы осуществить install Kubernetes Ubuntu (установить кубернетес на виртуальную машину Ubuntu), сделайте несколько шагов:
- Пройдите предустановку.
- Настройте окружение.
- Установите Kubeadm, Kubelet, Kubectl.
- Запустите кластер от master.
- Присоедините ноды к кластеру.
Рекомендован Ubuntu 16.04 image, так как кубернетес тянет много ресурсов.
Kubernetes AWS
Для работы с Kubernetes AWS используется специальный управляемый сервис Amazon EKS (Elastic Kubernetes Service). Сюда можно перенести любое приложение кубернетес, используя Kubernetes Configmap. Конфигмап помогает разделять файлы и контейнеры, избавляя от необходимости упаковывать конфиги в образы. Возможности Kubernetes AWS позволяют интегрироваться с сервисами CloudWatch, Auto Scaling Groups, Access Management, VPC. Это дает возможность масштабирования, мониторинга, балансировки нагрузки.
Kubernetes Deployment
Контроллер Kubernetes Deployment дает возможность декларативно обновлять ноды и наборы реплик. Вы описываете нужное состояние объекта Kubernetes Deployment на нужном режиме контроля. Планируя развертывание, не забудьте создать аккаунт Kubernetes GitHub. Возьмите на заметку – пакетный менеджер Kubernetes Helm облегчает установку первых рабочих нагрузок.
Для работы с трафиком многие выбирают Kubernetes Ingress. Этот ресурс базовый и для начала его работы нужен Ingress Controller. Не забудьте настроить резервный прокси, соответствующий объекту Kubernetes Ingress.
Для мониторинга можно использовать Kubernetes Prometheus, который выполняет проактивный мониторинг кластера. Также отображает видимость и планирует его производительность, высылает уведомления от триггеров и предупреждений.
Kubernetes Secrets
Мы уже упоминали, что Kubernetes Secrets – объекты с конфиденциальной информацией, например, OAuth-токены, пароли, ssh-ключи. Информация в форме Kubernetes Secrets более гибкая и безопасная при сборке образа или описании контейнера. Секреты могут создаваться и пользователем, и системой. При использовании секрета, под на него ссылается как на файл.
Kubernetes Service
Объект кластера Kubernetes Service – абстрактный объект, определяющий логический набор подов. Кроме этого сервис определяет политику доступа к подам. Рекомендуемый формат для Kubernetes Service – YAML, JSON. Сервисы дают возможность принятия трафика приложениями. Они могут быть открыты разными способами, в зависимости от типа в спецификации.
Kubernetes vs Docker
Когда говорят о Kubernetes vs Docker, почему-то иногда их противопоставляют друг другу. Kubernetes vs Docker – это не противопоставление, а сотрудничество. Различие есть, но это два разных программных продукта, которые могут успешно работать в паре. Кубернетес позволяет управлять контейнерами Docker через API. Запускает контейнеры, рабочие нагрузки, помогает в перемещении и масштабировании контейнеров на разных серверах. Более подходящим сравнением двух технологий является Kubernetes vs Docker Swarm. Docker Swarm фокусируется на сборке контейнеров в кластер. Технология интегрирована в Docker и использует свой собственный API.
FAQ
Kubernetes – программное обеспечение с открытым исходным кодом, один из инструментов DevOps. Используется для развертывания, масштабирования, управления, балансировки, мониторинга контейнеров. Благодаря автоматизации, Kubernetes существенно упрощает большинство процессов, связанных с оркестрацией контейнеров. Деплоймент разворачивается на базе контейнеров и описания, по которому Кубернетес поднимает контейнеры и управляет ими. Программа поддерживает нужную конфигурацию, перезапускает и перемещает контейнеры согласно установленному описанию.
Самый простой пример реализации Kubernetes – это работа в паре с Docker, установив приложение Docker Desktop. Также понадобиться запустить утилиту kubectl. В Docker Desktop (настройки Preferences), нужно будет добавить Kubernetes. Сразу рекомендуем увеличить количество выделяемых ресурсов для Кубернетес и Docker.
Все процессы и изменения в Kubernetes описаны в yaml-файлах. В файлах описываем процессы deployment, используя образы Dockerfile, можем менять конфигурацию (опять-таки через yaml-файл). В итоге у нас появляется Pod – минимальная единица развертывания в Кубернетесе. Далее работаем с описанием согласно вашим потребностям в данной конкретной оркестрации.
Полный курс Kubernetes может составлять 40-70 часов – теория и практика. На таком курсе начнете с общих понятий оркестрации и контейнеризации, и плавно перейдете к Кубернетес. Есть интенсивные курсы, например, 2-3 дня теории и практики. Это довольно плотный интенсив, и нужно быть готовым к насыщенной учебе несколько часов в день. Для опытных разработчиков и администраторов разработаны 8-часовые интенсивы в формате learning-by-doing. Концепция предусматривает мало теории и больше практики – обучение прямо по ходу практических заданий. Но здесь нужно быть уже подкованным в теории, чтобы успеть освоить практику в сжатые сроки.
Выучить Kubernetes – не самая сложная задача, если у вас уже есть опыт работы с контейнерами. На практическом интенсиве можно освоить Кубернетес за несколько дней. Но дело в том, что инфраструктура постоянно развивается и масштабируется. Docker перестал быть монополистом в контейнерных технологиях, а деплоймент становиться более комплексным. Культура построения микросервисных систем, обеспечение безопасности, контроль данных, межсерверное взаимодействие займут больше времени обучения. Эти направления в комплексе с Kubernetes помогут вам существенно повысить свою профессиональную компетенцию.
Выбирать не нужно – можно удобно совмещать эти два программных продукта. В Kubernetes есть API, который запускает и помогает логически распределять контейнеры на группы. Он же балансирует нагрузку между машинами, выстраивает размещение, перемещает и масштабирует контейнеры на серверах. Можно также использовать технологию Docker Swarm, которая интегрирована в Docker. У Docker Swarm свой API, который сфокусирован на сборке контейнеров в кластер. Поэтому, не рекомендуем противопоставлять эти два программных продукта – применяйте их в паре.
Не совсем верно противопоставлять Kubernetes и Docker, так как Kubernetes не является системой оркестрации. В Кубернетес есть своя версия yaml-файлов вместо файлов compose. Данное программное обеспечение предназначено для планирования контейнеризации и описания процессов оркестрации. Система более развита,чем Docker и подходит для масштабного корпоративного пользования. Сравнивать Kubernetes более корректно с Docker Swarm или Amazon ECS. В Docker можно использовать Kubernetes с помощью Docker Swarm.
И Kubernetes, и Amazon ECS (AWS) являются быстрыми и масштабируемыми системами управления контейнерами. Они помогают запускать и управлять контейнерами в кластере на управляемых серверах. Довольно тяжело сравнивать Kubernetes и Amazon ECS. ECS – это сервис Amazon, который используется только со своими “родными” сервисами, например, IAM, and EC2. А Кубернетес – ПО с открытым кодом, которое можно использовать на сервисах Amazon ECS или Google Compute. Объединяющей чертой двух продуктов является возможность работать на Amazon EC2.
Kubernetes – проект с открытым исходным кодом, который доступен на GitHub. Программное обеспечение написано на языке программирования Go. Изначально Kubernetes был создан Google для оркестрации контейнеров на внутренних проектах компании. В 2014 году Кубернетес вышел в свободный доступ как open source project. Сегодня данный программный продукт поддерживается и развивается комьюнити. Среди основных контрибьюторов – Google и Red Hat.
Kubernetes может работать без Docker, равно как и Docker без Kubernetes. Тем не менее, работа в симбиозе значительно усиливает функционал этих двух программных продуктов. Оба инструмента активно используются в облачных вычислениях. Docker в этой паре отвечает за все, что связано с концепцией контейнеризации. Kubernetes – за оркестрацию контейнеров. Docker создает и запускает контейнеры в одной ОС, а также управляет ими. Когда Docker работает на нескольких ОС, за управление берется Kubernetes.