Создан заказ №8011239
17 января 2022
Как заказчик описал требования к работе:
Нужно написать научно исследовательскую курсовую работу по теме «Kubernetes и другие оркестраторы» или «Кластерное (распределенное) хранилище на примере Сeph»
Работа заключается в том, чтобы выбрать интересующую тематику и на ее основе провести анализ (обзор) существующих методов (алгоритмов, систем
, языков и сред программирования и т.д.).
Требования: 10-15 стр, минимальная оригинальность 70%
Темы, которые мне интересны, написал в описании
подробнее
Заказчик не использовал рассрочку
Гарантия сервиса
Автор24
20 дней
Заказчик воспользовался гарантией, чтобы исполнитель повысил уникальность работы
20 января 2022
Заказ завершен, заказчик получил финальный файл с работой
Курсовая Kubernetes и другие оркестраторы.docx
2022-01-23 21:42
Последний отзыв студента о бирже Автор24
Положительно
Очень хороший автор, быстро и качественно выполняет работы, идет на контакт. Рекомендую! И еще раз благодарю!
Хочешь такую же работу?
Зарегистрироваться
Тебя также могут заинтересовать
по этому предмету
по этому типу и предмету
Читай полезные статьи в нашем
Применение микроконтроллеров в системах автоматизированной обработки информации и управления
Автоматизация различных технологических процессов выполняется при помощи микроконтроллеров, то есть модулей, встраиваемых в производственную архитектуру предприятия. Они превращаются в её составной компонент и формируют независимую систему управления информационной обработкой. Сегодня программируемые логические микроконтроллеры являются нормой в автоматизированных системах. Основным смыслом автома…
подробнее
Система информационной поддержки деятельности автосалона
На сегодняшний день в Российской Федерации есть большое количество автосалонов, в которых есть очень много автомобилей разных марок и комплектации. То есть автоматизация их деятельности считается одним из важных показателей, поскольку при её отсутствии возрастает вероятность ошибочных действий и работа станет занимать больше времени. Это ведёт к уменьшению прибыли, а также к сокращению количества …
подробнее
Основные функции современных смартфонов
Сегодня уже никто не удивляется тому факту, что мобильный телефон способен делать фото, входить в интернет, снимать качественные видео, выполнять работу с документами и так далее. Мало того, прогресс не стоит на месте, и практически все эти функции уже могут осуществлять даже наручные часы, такие как, к примеру, iWatch (Apple). Смартфон (Smartphone, то есть, умный телефон) является мобильным телеф…
подробнее
Автоматизация процесса документооборота в ООО
В литературе, посвящённой экономическим вопросам, можно встретить утверждение, что в бизнесе присутствуют определённые «наиболее важные» и некоторые «наименее важные» составляющие. Сторонники данного подхода приводят в качестве аргумента тот факт, что главные процессы, это те, на которых реально построена организация, а сопутствующие процессы, в частности документооборот в организации, являются та…
подробнее
Применение микроконтроллеров в системах автоматизированной обработки информации и управления
Автоматизация различных технологических процессов выполняется при помощи микроконтроллеров, то есть модулей, встраиваемых в производственную архитектуру предприятия. Они превращаются в её составной компонент и формируют независимую систему управления информационной обработкой. Сегодня программируемые логические микроконтроллеры являются нормой в автоматизированных системах. Основным смыслом автома…
подробнее
Система информационной поддержки деятельности автосалона
На сегодняшний день в Российской Федерации есть большое количество автосалонов, в которых есть очень много автомобилей разных марок и комплектации. То есть автоматизация их деятельности считается одним из важных показателей, поскольку при её отсутствии возрастает вероятность ошибочных действий и работа станет занимать больше времени. Это ведёт к уменьшению прибыли, а также к сокращению количества …
подробнее
Основные функции современных смартфонов
Сегодня уже никто не удивляется тому факту, что мобильный телефон способен делать фото, входить в интернет, снимать качественные видео, выполнять работу с документами и так далее. Мало того, прогресс не стоит на месте, и практически все эти функции уже могут осуществлять даже наручные часы, такие как, к примеру, iWatch (Apple). Смартфон (Smartphone, то есть, умный телефон) является мобильным телеф…
подробнее
Автоматизация процесса документооборота в ООО
В литературе, посвящённой экономическим вопросам, можно встретить утверждение, что в бизнесе присутствуют определённые «наиболее важные» и некоторые «наименее важные» составляющие. Сторонники данного подхода приводят в качестве аргумента тот факт, что главные процессы, это те, на которых реально построена организация, а сопутствующие процессы, в частности документооборот в организации, являются та…
подробнее
Простые истины
Итак, вы хотите освоить Kubernetes. Это такой технологический хайп, о котором, кажется, говорят все. Я затрудняюсь сказать, сколько рекрутеров обращались ко мне с предложением поработать с Kubernetes. Kubernetes — это определенно круто!
Вполне возможно, к вам относится одно из следующих утверждений:
-
Вы слышали о Kubernetes и, наконец, решили, что настало время посмотреть, к чему вся эта шумиха.
-
Вы опытный инженер-программист, который уже некоторое время работает с Kubernetes в режиме обучения «just-in-time». То есть, вы изучаете только то, что вам нужно для выполнения работы. Теперь же вам становится все труднее, и вы решили, что настало время углубиться в некоторые основы.
-
Вы — технический лидер, и у вас есть команда, работающая с Kubernetes (или, возможно, она взаимодействует с командой, работающей с Kubernetes), и вы хотели бы повысить свою компетентность.
Что бы ни привело вас сюда, добро пожаловать! Я рад, что вы здесь!
Моя цель состоит в том, чтобы сделать все просто и предоставить основные базовые материалы для изучения и понимания Kubernetes. Kubernetes может показаться большим и пугающим. Давайте посмотрим правде в глаза… любая новая технология внушает страх. Так много всего нужно изучить. Так много нюансов. Особенно когда вы начинаете с нуля.
Моя цель — показать вам, что Kubernetes не так уж и страшен, и вдохновить вас на дальнейшее совершенствование своих знаний. (ознакомьтесь с одним из моих расширенных постов) Если вы уже давно занимаетесь Kubernetes, пусть это освежит ваши знания! Возможно, вы делали все определенным образом, принимая как должное, что «так оно и работает». А сейчас, возможно, вы лучше поймете, почему это работает именно так.
Давайте начнем!
Обзор
В этом посте я расскажу о следующих темах:
-
Что такое Kubernetes?
-
Высокоуровневый взгляд: Архитектура Kubernetes;
-
Копаем глубже: Ресурсы, контроллеры и операторы;
-
Инструмент командной строки kubectl для взаимодействия с Kubernetes.
Примечание: Я предполагаю, что у вас уже есть базовые знания о контейнерах.
Прежде всего… что такое Kubernetes? Kubernetes — это система оркестрации контейнеров, которая позволяет развертывать, масштабировать и управлять контейнерными приложениями. В сокращенном виде она также именуется k8s.
Забавный факт: Kubernetes уходит своими корнями в проект Borg, который изначально разрабатывался компанией Google.
Теперь вам, возможно, интересно, что такое оркестровка контейнеров. Давайте рассмотрим пример.
Допустим, у вас на компьютере запущена куча контейнеров Docker. Возможно, некоторым из них нужно общаться друг с другом. А может быть, ваша подруга Нэнси пытается получить доступ к конечной точке API, запущенной на одном из этих контейнеров. Как обеспечить, чтобы контейнеры могли общаться друг с другом? Как вы можете гарантировать, что Нэнси сможет безопасно получить доступ к конечной точке API? Что произойдет, если один из ваших контейнеров умирает? Что будет, если вам понадобится масштабировать контейнеры, потому что внезапно доступ к конечной точке API понадобится не только Нэнси… это будет Нэнси и все ее друзья-разработчики, участвующие в хакатоне. Что тогда?
Вот тут-то и приходит на помощь оркестровка контейнеров. Она может помочь вам со всем этим и даже больше. Под оркестровкой контейнеров понимается возможность определения, развертывания и эксплуатации вычислительного кластера, состоящего из нескольких виртуальных машин или физических серверов, для запуска контейнеров и управления их жизненным циклом.
Заклятые друзья Kubernetes
Несмотря на то, что Kubernetes очень крут и популярен, вы можете быть шокированы, узнав, что это не единственный контейнерный оркестратор! Поэтому будет справедливо упомянуть несколько конкурентов Kubernetes:
-
Docker Swarm
-
Marathon
-
Amazon ECS
-
Azure Service Fabric
-
Hashicorp Nomad
Дистрибутивы Kubernetes
Стоит упомянуть, что существует несколько различных способов запуска Kubernetes.
Локальный
Во-первых, вы можете запустить Kubernetes локально на своей машине. Вот несколько инструментов, которые делают это возможным:
-
KIND (означает Kubernetes in (в) Docker)
-
Docker Desktop (он поставляется вместе с Kubernetes, и вы можете запустить его локально)
-
Minikube
Решения облачных вендоров
Запуск k8s локально — это хорошо для разработки приложений и локального тестирования, но в конечном итоге нам нужно, чтобы эта штука работала в проде и масштабно. Вот здесь нам и пригодится тот факт, что большинство крупных поставщиков облачных решений имеют свои собственные варианты k8s. К ним относятся:
-
Google Kubernetes Engine (GKE);
-
Amazon Elastic Kubernetes Service (EKS);
-
Azure Kubernetes Service (AKS).
У каждого из вендоров облака обычно есть небольшой набор команд CLI для автоматического создания кластера k8s. Это совершенно волшебное ощущение — дать команду CLI, которая создает целый кластер за 5-10 минут. Мы говорим не только о запуске виртуальных машин по требованию, но и о запуске всех служб, которые обеспечивают работу k8s. Если задуматься, это впечатляет!
Они также предоставляют вам некоторые базовые графические интерфейсы k8s, хотя ничего сверхъестественного.
Решения для предприятий
Для людей с корпоративным мышлением, которые любят красивые графические интерфейсы администратора и любят, чтобы их водили за руку (без осуждения — на самом деле существует огромный рынок для такого рода вещей), вы можете обратить внимание на некоторых из этих поставщиков:
-
RedHat OpenShift
-
VMWare Tanzu
-
Rancher
Эти поставщики, как правило, добавляют слой управления поверх Kubernetes, ориентируясь на корпоративную аудиторию. Как я уже упоминал ранее, они имеют причудливые консоли администратора. Они также имеют тонну плагинов, доступных через их соответствующие «маркетплейсы», и могут иметь свои собственные реализации k8s (например, выбор сервисной сети). Эти вендоры также предоставляют вам возможность запускать кластеры k8s в общедоступных облаках или в частных облаках с собственным хостингом.
Сделай сам
И, наконец, вы всегда можете создать свои собственные кластеры k8s с нуля. Если вы действительно хотите понять, как работает Kubernetes, то этот способ вам точно подойдет!
2. Компоненты Kubernetes
Теперь, когда мы немного ознакомились с Kubernetes, давайте заглянем под капот.
Кластер Kubernetes состоит из узлов. Эти узлы могут быть как физическими, так и виртуальными машинами. Вы можете иметь кластер из одного или нескольких узлов, хотя в идеале вам нужно как минимум два узла в сценарии, не используемом для разработки.
Кластер обычно состоит из главного узла (мастер) и множества рабочих (воркер) узлов (minion).
Примечание: Вот почему вам нужно как минимум два узла — потому что неправильно иметь кластер, в котором один узел одновременно выполняет функции мастера и воркера.
Мастер осуществляет наблюдение за воркерами и организует выполнение оркестровки (вспомните, что делает менеджер). Воркеры отвечают за запуск контейнеров.
На приведенной ниже схеме показано, что происходит внутри мастера и воркера:
Главный узел
Как управляющий всей этой операцией, мастер имеет довольно много компонентов:
-
etcd;
-
Сервер API;
-
Менеджер контроллеров;
-
Планировщик.
Давайте разберемся в них.
etcd
etcd — это распределенная база данных ключ-значение. Она является источником достоверных данных для Kubernetes. Каждый раз, когда вы вносите изменения в Kubernetes — например, отправляя YAML или JSON через REST API k8s или с помощью инструмента kubectl CLI (подробнее об этом позже) — эти изменения сохраняются в etcd в виде JSON. Он также версионируется, таким образом, обеспечивается серьезный контроль версий.
Одной из ключевых особенностей etcd является ее способность следить за изменениями. То есть, она сверяет текущие настройки системы с любыми входящими изменениями, отправленными в Kubernetes через REST API вызов или kubectl.
Предупреждение для зануд: я лично считаю, что etcd — один из самых крутых компонентов Kubernetes. Вы можете установить etcd на свою локальную машину (например, OSX или Ubuntu) и поиграть с ним, используя инструмент etcdctl CLI. В Python даже есть несколько библиотек для программного взаимодействия с etcd. Я лично играл с библиотекой Python etcd3, и рекомендую изучить etcd самостоятельно!
Сервер API
Сервер API отвечает за обслуживание API Kubernetes. Хотите поговорить с Kubernetes и попросить его сделать что-то для вас? Это ваша прямая линия — будь вы пользователь, программа или kubectl. Сервер API также отвечает за отправку и получение данных в/из etcd.
Менеджер контроллеров
Менеджер контроллеров — это мозг, который стоит за оркестрацией. Kubernetes имеет несколько контроллеров, каждый из которых отвечает за разные вещи. Они следят за состоянием вашего кластера, затем вносят или запрашивают изменения, когда это необходимо. Менеджер контроллеров следит за тем, чтобы он указывал нужным контроллерам на выполнение необходимых действий. Например, существуют контроллеры для:
-
Принятие мер при выходе из строя пода;
-
Подключение служб к подам;
-
Создание учетных записей и доступ к API-токенам.
И многие другие…
Примечание: Если вам интересно, что такое под, то это, по сути, обертка вокруг одного или нескольких контейнеров.
Планировщик
Планировщик распределяет работу между несколькими узлами. Он смотрит на требования к ресурсам (например, к процессору и памяти), чтобы определить, когда и на каком узле запускать под.
Рабочие узлы
Очевидно, что мастер делает многое, но, как и менеджер, он ничто без рабочих узлов (воркеров). Воркеры содержат 2 основных компонента:
-
Kubelet;
-
Kube-proxy.
Kubelet
Kubelet — это агент (небольшое приложение), который запускается на каждом рабочем узле в кластере. Его основная задача — следить за тем, чтобы контейнеры запускались в поде (обертке из одного или нескольких контейнеров). Но кто указывает ему запустить эти контейнеры? Это происходит из control plane (управляющего уровня) (где находится наш хороший друг — менеджер контроллеров). Когда уровень управления требует, чтобы что-то произошло в узле, kubelet делает это.
Kubelet запускает рантайм контейнера и, как следует из названия, отвечает за фактический его запуск. Точнее, он управляет полным жизненным циклом контейнера: получение образа контейнера (из реестра контейнеров, такого как Docker Hub) и его хранение, выполнение контейнера, подключение к сети и т. д. — популярная среда выполнения контейнеров; однако существуют и другие, такие как containerd, CRI-O.
Примечание: В настоящее время Kubernetes использует контейнерный рантайм Docker; однако в ближайшем будущем он откажется от Docker в пользу Container Runtime Interface (CRI), созданный для Kubernetes. Образы, созданные Docker, будут продолжать работать в вашем кластере со всеми режимами выполнения, как и раньше, поэтому не стоит паниковать!
Kube-proxy
Kube-proxy обрабатывает сетевые соединения внутри и за пределами вашего кластера. Это означает, что если подам нужно общаться между собой или если какому-то внешнему сервису нужно обратиться к подам, kube-proxy поможет это сделать.
3. Ресурсы, контроллеры и операторы
Теперь, когда мы познакомились с основами компонентов Kubernetes, давайте рассмотрим некоторые другие ключевые понятия и терминологию Kubernetes.
Ресурсы
Ресурс Kubernetes — это объект или операция в Kubernetes, доступ к которым осуществляется через Kubernetes API. Тип ресурса известен как kind (вид) и представлен в виде объекта JSON. Этот JSON-объект хранится (и версионируется) в хранилище etcd.
Существует две категории ресурсов: примитивные и пользовательские. Примитивные ресурсы поставляются «из коробки» с Kubernetes. К ним относятся Pod, Service, Deployment, ServiceAccount, PersistentVolumeClaim, RoleBinding… Я могу продолжить.
apiVersion: v1
kind: ServiceAccount
metadata:
name: pipeline-sa
secrets:
- name: basic-docker-user-pass
- name: basic-git-app-repo-user-pass
Образец примитивного ресурса в Kubernetes
Пользовательские ресурсы являются расширением API Kubernetes и поэтому не всегда доступны в стандартной установке Kubernetes. После инсталляции вы можете использовать инструмент kubectl CLI для создания и доступа к этим ресурсам (подробнее о kubectl позже). Пользовательские ресурсы создаются, когда вы хотите/необходимо, чтобы Kubernetes делал некоторые вещи, которые вы не можете получить из коробки с k8s.
Вот пример того, как выглядит пользовательский ресурс:
apiVersion: tekton.dev/v1alpha1
kind: PipelineRun
metadata:
generateName: my-pipeline-run-
spec:
serviceAccountName: pipeline-sa
pipelineRef:
name: my-pipeline
resources:
- name: git-app-repo
resourceRef:
name: git-app-repo
- name: image-registry
resourceRef:
name: image-registry
Образец пользовательского ресурса в Kubernetes
Заметьте, что в большинстве случаев примитивный и пользовательский ресурс имеют одинаковые основные поля:
-
apiVersion
: Версия API Kubernetes, который вы используете для создания ресурса; -
kind
: Тип создаваемого ресурса; -
metadata
: Данные, которые однозначно идентифицируют ресурс; -
spec
: Сообщает Kubernetes желаемое состояние ресурса.
Примечание: Не все ресурсы имеют поле spec
(например, ServiceAccount
, Role
, RoleBinding
).
Контроллеры
Как говорилось ранее, контроллер следит за состоянием вашего кластера, затем вносит или запрашивает изменения, где это необходимо, для достижения желаемого состояния. Что именно это значит?
Позвольте мне привести занятный пример. Предположим, вы спасатель в бассейне. Ваша работа заключается в том, чтобы обеспечить безопасность всех людей в бассейне. Для этого вы должны постоянно проверять, чтобы никто из пловцов не попал в беду. Это и есть желаемое состояние. Поэтому, если вы видите, что кто-то тонет, то вы идете и вытаскиваете его из воды, а также выполняете любые другие необходимые спасательные операции, чтобы убедиться, что он больше не находится в бедственном положении.
Операторы
Оператор — это разновидность контроллера. Помните те пользовательские ресурсы, о которых я говорил ранее? Определить пользовательский ресурс — это хорошо, но в конце концов, как заставить Kubernetes сделать с ним что-то полезное? Вот тут-то и приходят на помощь операторы — это закулисный код, который заставляет эти пользовательские ресурсы делать полезные вещи.
В то время как все операторы являются контроллерами, не все контроллеры — операторы. Это может сбить с толку, потому что на первый взгляд кажется, это практически одно и то же. Основное различие заключается в том, что операторы расширяют функциональность Kubernetes и работают вместе с пользовательскими ресурсами, чтобы это произошло.
Интересный факт: операторы могут быть написаны на любом языке, и существуют несколько фреймворков, которые предоставляют шаблонный (boilerplate) код, чтобы помочь вам написать свой собственный оператор.
Создавать операторы может кто угодно: вы, ваша организация или сторонний вендор. Например, RedHat OpenShift имеет свой собственный набор операторов (вместе с сопутствующими пользовательскими ресурсами), которые являются частью его основного продукта, который он запускает поверх обычного Kubernetes. И благодаря замечательному сообществу разработчиков открытого кода многие из операторов доступны для совместного использования. Вы можете ознакомиться с некоторыми из них на сайте OperatorHub.io.
4. kubectl
Вы слышали, как я много говорил о kubectl
в этом посте, и теперь мы, наконец, увидим, из-за чего вся эта шумиха! kubectl
— это интерфейс командной строки (CLI) для управления операциями на кластерах Kubernetes. Он взаимодействует с API-сервером, чтобы получить информацию о нашем кластере и указать Kubernetes сделать что-нибудь для нас, например, создать новый ресурс или изменить существующий. Как я уже говорил, если вы расширяете Kubernetes API с помощью чудесной комбинации операторов и пользовательских определений ресурсов (CRD), вы можете использовать kubectl
для доступа/обновления этих ресурсов!
Поскольку это инструмент командной строки, kubectl
запускается на вашей локальной машине. Он работает совместно с файлом kubeconfig
, который представляет собой YAML-файл, по умолчанию установленный в $HOME/.kube/config. Вот как может выглядеть пример файла kubeconfig
:
Записи в файле kubeconfig
автоматически создаются при подключении к существующему кластеру Kubernetes.
Например, если бы я хотел подключиться к кластеру Azure Kubernetes, я бы использовал Azure’s az CLI для выполнения следующей команды:
az aks get-credentials --resource-group my-resource-group --name my-aks-cluster
Который заполнит мой файл kubeconfig
для меня.
Аналогично, я могу использовать gcloud CLI Google Cloud для подключения к кластеру Google Kubernetes следующим образом:
gcloud container clusters get-credentials my-gke-cluster --region=us-central1-a
Дело в том, что у каждого облачного провайдера есть свой собственный облачный CLI и набор команд для подключения к кластеру Kubernetes в этом облаке и соответствующего обновления файла kubeconfig
.
После регистрации кластера в файле kubeconfig
вы можете запускать различные команды для работы с ним. Вы также можете использовать kubectl
для получения информации о кластерах, которые у вас зарегистрированы, и для обновления конфигурации отдельных кластеров.
Примечание: Вы можете зарегистрировать несколько кластеров Kubernetes из разных облаков в одном файле kubeconfig
. Также вы можете иметь несколько файлов kubeconfig
, если вам так больше нравится.
Заключение
Уф-ф! Было очень много интересного! Это ни в коем случае не было техническим углублением в Kubernetes. Скорее, моя цель была познакомить вас с основными концепциями, дать вам представление о том, как работает Kubernetes, и, надеюсь, вдохновить вас на более глубокое изучение этой популярной технологии, о которой, кажется, говорят все.
Вы сможете обмолвится о нескольких забавных фактах про Kubernetes своим друзьям и близким во время следующего звонка в Zoom, а также рассказать им такие вещи, как:
-
Что такое Kubernetes и зачем он вам нужен;
-
Разница между главным и рабочим узлами, а также все преимущества каждого из них;
-
Что такое ресурсы;
-
Разница между контроллерами и операторами;
-
Что делает
kubectl
.
Перевод материала подготовлен для будущих студентов курса «DevOps практики и инструменты».
Инфраструктура как код (IaC), Immutable Infrastructure и другие страшные слова из книжек про DevOps у всех на слуху, а в родной компании всё еще по заявкам создаем виртуалки накликивая их в гипервизоре. Всех желающих приглашаем на открытый урок «Принципы организации инфраструктурного кода и работа над инфраструктурой в команде на примере Terraform», на котором поговорим о том, зачем и как начать использовать практику Infrastructure as a Code.
31 августа 2020
33 101
2
Время чтения ≈ 16 минут
Содержание:
- История создания
- Как работает технология
- Основные компоненты
- Процесс установки
- Настройка Kubernetes
- Заключение
Контейнеризация приложений — один из главных трендов современных IT-разработок. Однако, у контейнеров есть один существенный недостаток для массового потребителя — сложная настройка масштабирования.
Решением стали автоматические системы управления контейнеризацией, наиболее популярной из которых является Kubernetes. Это программное обеспечение с открытым исходным кодом от компании Google завоевало признание благодаря сочетанию гибкости, безопасности и мощности.
Cтатья «Kubernetes для чайников» поможет разобраться как устроена платформа управления контейнеризацией, как установить ПО и для чего его можно использовать в дальнейшем. Она будет полезна как для начинающих пользователей Kubernetes, так и для профильных IT-специалистов.
История создания
Проект Kubernetes (сокращенно K8s) вырос из системы управления кластерами Borg. Внутренний продукт поискового гиганта Google получил название в честь кибер-рассы боргов из легендарного сериала «Звездный путь».
Команде разработчиков Google Borg была поставлена масштабная задача — создать открытое программное обеспечение для оркестрирования* контейнеров, которое станет вкладом Google в развитие мировых IT-технологий. Приложение было написано на основе языка Go.
* Под «оркестрированием» подразумевается автоматизированное управление связанными сущностями — контейнерами или виртуальными машинами.
На этапе разработки K8s назвался Project Seven («Проект «Седьмая»). Это было прямой отсылкой к персонажу «Звездного пути» Seven of Nine («Седьмая-из-девяти») — андроиду-боргу, сумевшему вернуть себе человечность. Позже проект получил имя «Кубернетес», от греческого слова κυβερνήτης, которое означает «управляющий», «рулевой» или «кормчий».
В 2014 году общественности представили исходные коды, а годом позже появилась первая версия программы Kubernetes 1.0. В дальнейшем все права на продукт были переданы некоммерческому фонду Cloud Native Computing Foundation (CNCF), куда входят Google, The Linux Foundation и ряд крупнейших технологических корпораций.
Как работает технология
Принципы устройства
Основы работы K8s – применение декларативного подхода. От разработчика требуется указать, чего необходимо достичь, а не способы достижения.
Помимо этого, в Kubernetes могут быть задействованы императивные команды (create, edit, delete), которые позволяют непосредственно создавать, модифицировать и удалять ресурсы. Однако, их не рекомендуется использовать для критически важных задач.
Для развертывания программного обеспечения в Kubernetes применяется база Linux-контейнеров (например, Containerd или CRI-O) и описание — сколько потребуется контейнеров и в каком количестве им потребуются ресурсы. Само развертывание контейнеров происходит на основе рабочих нод — виртуальных или физических машин.
Основные задачи Kubernetes
- Развертывание контейнеров и все операции для запуска необходимой конфигурации. В их число входят перезапуск остановившихся контейнеров, их перемещение для выделения ресурсов на новые контейнеры и другие операции.
- Масштабирование и запуск нескольких контейнеров одновременно на большом количестве хостов.
- Балансировка множества контейнеров в процессе запуска. Для этого Kubernetes использует API, задача которого заключается в логическом группировании контейнеров. Это дает возможность определить их пулы, задать им размещение, а также равномерно распределить нагрузку.
Преимущества K8s
- Обнаружение сервисов и балансировка нагрузок. Контейнеры могут работать через собственные IP-адреса или использовать общее имя DNS для целой группы. K8s может регулировать нагрузку сетевого трафика и распределять его, чтобы поддержать стабильность развертывания.
- Автоматическое управление хранилищами. Пользователь может задавать, какое хранилище использовать для развертывания по умолчанию — внутреннее, внешнего облачного провайдера (GKE, Amazon EKS, AKS), другие варианты.
- Автоматическое внедрение и откат изменений. Пользователь может на лету делать любые дополнения к текущей конфигурации контейнеров. Если это нарушит стабильность развертывания, K8s самостоятельно откатит изменения до стабильно работающей версии.
- Автоматическое распределение ресурсов. Kubernetes сам распределяет пространство и оперативную память из выделенного кластера нод, чтобы обеспечить каждый контейнер всем необходимым для работы.
- Управление паролями и настройками. K8s может служить приложением для безопасной обработки конфиденциальной информации, связанной с работой приложений — паролей, OAuth-токенов, SSH-ключей. В зависимости от способа применения, данные и настройки можно обновлять без создания контейнера заново.
- Самовосстановление при возникновении сбоя. С помощью особых метрик и тестов система может быстро опознать поврежденные или переставшие отвечать на запросы контейнеры. Вышедшие из строя контейнеры создаются заново и перезапускаются на том же поде.
Kubernetes – удобный инструмент оркестрации контейнеров. Однако, это решение, не работает само по себе, без подготовки и дополнительных настроек. Например, пользователям придется решать вопросы по миграции схем баз данных или разбираться с обратной совместимостью API.
Основные компоненты
Схема взаимодействия основных компонентов K8s
Node (Нода)
Ноды или узлы — виртуальные или физические машины, на которых разворачивают и запускают контейнеры. Совокупность нод образует кластер Kubernetes.
Первая запущенная нода или мастер-нода непосредственно управляет кластером, используя для этого менеджер контроллеров (controller manager) и планировщик (scheduler). Она ответственна за интерфейс взаимодействия с пользователями через сервер API и содержит в себе хранилище «etcd» с конфигурацией кластера, метаданными и статусами объектов.
Namespace (Пространство имен)
Объект, предназначенный для разграничения ресурсов кластера между командами и проектами. Пространства имен — несколько виртуальных кластеров, запущенные на одном физическом.
Pod (Под)
Первичный объект развертывания и основной логический юнит в K8s. Поды — набор из одного и более контейнеров для совместного развертывания на ноде.
Группировка контейнеров разных типов требуется в том случае, когда они взаимозависимы и должны запускаться в одной ноде. Это позволяет увеличить скорость отклика во время взаимодействия. Например, это могут быть контейнеры, хранящие веб-приложение и сервис для его кэширования.
ReplicaSet (Набор реплик)
Объект, отвечающий за описание и контроль за несколькими экземплярами (репликами) подов, созданных на кластере. Наличие более одной реплики позволяет повысить устойчивость от отказов и масштабирование приложение. На практике ReplicaSet создается с использованием Deployment.
ReplicaSet является более продвинутой версией предыдущего способа организации создания реплик (репликации) в K8s – Replication Controller.
Deployment (Развертывание)
Объект, в котором хранится описание подов, количество реплик и алгоритм их замены в случае изменения параметров. Контроллер развертывания позволяет выполнять декларативные обновления (с помощью описания нужного состояния) на таких объектах, как ноды и наборы реплик.
StatefulSet (Набор состояния)
Как и другие объекты, например — ReplicaSet или Deployment, Statefulset позволяет развертывать и управлять одним или несколькими подами. Но в отличие от них, идентификаторы подов имеют предсказуемые и сохраняемые при перезапуске значения.
DaemonSet (Набор даемона)
Объект, который отвечает за то, чтобы на каждой отдельной ноде (или ряде выбранных) запускался один экземпляр выбранного пода.
Job/CronJob (Задания/Задания по расписанию)
Объекты для регулировки однократного или регулярного запуска выбранных подов и контроля завершения их работы. Контроллер Job отвечает за однократный запуск, CronJob — за запуск нескольких заданий по расписанию.
Label/Selector (Метки/Селекторы)
Метки предназначены для маркировки ресурсов. Позволяют упростить групповые манипуляции с ними. Селекторы позволяют выбирать/фильтровать объекты на основе значения меток.
По факту, метки и селекторы не являются самостоятельными объектами Kubernetes, но без них система не сможет полноценно функционировать.
Service (Сервис)
Средство для публикации приложения как сетевого сервиса. Используется, в том числе, для балансировки трафика/нагрузки между подами.
Процесс установки
Установка Kubernetes, рассмотренная ниже, предполагает наличие одного (или более) серверов с операционной системой Centos 7 или Ubuntu 16.04.
Важно! Нужно заранее отключить раздел «swap». Если на сервере пока не установлена операционная система, достаточно не создавать этот раздел. Для отключения нужно выполнить в терминале команду: swapoff -a.
Затем открыть «/etc/fstab» с правами root и удалить соответствующую команде строчку «#/swapfile».
Проект Kubernetes изначально действует на основе контейнеров Docker, существенно расширяя их функциональность. Логично, что начинать работу Kubernetes следует именно с установки Docker.
Проще всего остановить выбор на версии, добавленной на текущий момент в репозитории. Ее протестировали разработчики, поэтому данная связка Kubernetes и Docker будет работать наиболее стабильно.
В 2021 году Kubernetes объявили, что, начиная с версии Kubernetes 1.24, откажутся от Docker как основной среды исполнения контейнеров в пользу нативных сред на базе Container Runtime Interface (CRI). В кратком руководстве по переходу, который компания разместила на официальном сайте проекта, сказано, что поддержка контейнеров Docker в старых версиях Kubernetes сохранится.
Установка контейнеров на Ubuntu 16.04
Чтобы установить Docker на Ubuntu 16.04, необходимо выполнить следующие команды с правами суперпользователя:
apt-get update apt-get install -y docker.io
Если требуется работать с более новыми версиями контейнеров, запустите команды:
apt-get update apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://downloa d.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable" apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
Установка контейнеров в CentOS 7
Для установки Docker на Centos, в консоли нужно выполнить команды:
yum install -y docker systemctl enable docker && systemctl start docker
Установка kubeadm, kubelet и kubectl в Ubuntu
Для работы с Kubernetes понадобится установить компоненты kubeadm, kubelet и kubectl. Эти утилиты понадобятся для создания управления кластером Kubernetes.
- Kubectl — позволяет создавать и настраивать объекты в кластере.
- Kubelet — занимается запуском контейнеров на хостах.
- Kubeadm — позволит настраивать компоненты, составляющие кластер.
В Ubuntu эти компоненты можно установить следующим способом:
apt-get update && apt-get install -y apt-transport-https software-properties-common curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - add-apt-repository "deb http://apt.kubernetes.io/ kubernetes-xenial main" apt-get update apt-get install -y kubelet kubeadm kubectl systemctl enable kubelet && systemctl start kubelet
Установка kubeadm, kubelet и kubectl в CentOS
В CentOS 7 компоненты устанавливаются следующим образом:
cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Kubernetes baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64 enabled=1 gpgcheck=1 repo_gpgcheck=1 gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg EOF setenforce 0 yum install -y kubelet kubeadm kubectl systemctl enable kubelet && systemctl start kubelet
Обращаем внимание! Команда setenforce 0 позволит получить корректный доступ контейнеров к файловой системе хоста. Последняя необходима для функционирования сети у подов.
Нужно убедиться, что «kubelet» и «docker» пользуются одним и тем же драйвером «cgroup». В этом может помочь команда:
cat << EOF > /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"] } EOF
Инициализация кластера
Нужно указать сервер, на котором установлен K8s (он будет первичным — там будут запускаться остальные операции) и выполнить инициализацию кластера:
kubeadm init --pod-network-cidr=10.244.0.0/16
Обращаем внимание! Опция «—pod-network-cidr» задает адрес виртуальной сети подов и может отличаться, в зависимости от используемого сетевого плагина.
В данном примере будем использован наиболее распространенный сетевой плагин — Flannel. По умолчанию он использует сеть «10.244.0.0/16», которая была указана в параметре, приведенном выше.
При выполнении команды в консоли, есть вероятность появления ошибок или предупреждений. Ошибки нужно исправлять в обязательном порядке, а на предупреждения можно не обращать внимание, если это не окружение «production».
Если все сделано правильно, на экране отобразится команда, позволяющая присоединить остальные ноды кластера к первичному хосту. Команда может отличаться, в зависимости от структуры кластера. Ее нужно сохранить на будущее.
После выполнения этой команды система выведет примерный результат:
Остается выполнить следующие команды от имени пользователя, который будет управлять кластером:
mkdir -p $HOME/.kube sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config sudo chown $(id -u):$(id -g) $HOME/.kube/config
Настройка CNI
Перед тем, как начать запускать в кластере приложения, нужно выполнить настройку Container Network Interface («сетевой интерфейс контейнера» или CNI). CNI нужен для настройки взаимодействия и управления контейнерами внутри кластера.
Существует много плагинов для создания CNI. В данном примере применяется Flannel, так как это наиболее простое и проверенное решение. Однако, не меньшей популярностью пользуются плагины Weave Net от компании Weaveworks и Calico (Project Calico), обладающие более широким функционалом и возможностями сетевых настроек.
Чтобы установить Flannel, выполните в терминале команду:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
В выводе будут отображены имена всех созданных ресурсов.
Добавление узлов (нод) в кластер
Чтобы добавить новые ноды в существующий кластер, требуется выполнить следующий алгоритм:
- Подключиться к серверу через SSH.
- Установить на сервер Docker, Kubelet, Kubeadm (как показано выше).
- Выполнить команду:
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
Данная команда была выведена при выполнении команды «kubeadm init» на мастер-ноде.
Если команда не была сохранена, то можно ее составить повторно.
Получение токена авторизации кластера (<token>)
- Подключиться к серверу через SSH.
- Запустить команду, которая присутствовала на выводе команды «kubeadm init». Например:
kubeadm join --token <token> <control-plane-host>:<control-plane-port> --discovery-token-ca-cert-hash sha256:<hash>
Если токена нет, его можно получить, выполнив следующую команду на мастер-ноде:
kubeadm token list
Вывод должен быть примерно таков:
По умолчанию, срок действия токена — 24 часа. Если требуется добавить новый узел в кластер по окончанию этого периода, можно создать новый токен следующей командой:
kubeadm token create
Вывод будет примерно таков:
5didvk.d09sbcov8ph2amjw
Если значение параметра «—discovery-token-ca-cert-hash» неизвестно, его можно получить следующей командой:
openssl x509 -pubkey -in /etc/kubernetes/pki/ca.crt | openssl rsa -pubin -outform der 2>/dev/null | openssl dgst -sha256 -hex | sed 's/^.* //'
Будет получен примерно такой вывод:
8cb2de97839780a412b93877f8507ad6c94f73add17d5d7058e91741c9d5ec78
Для ввода IPv6-адреса в параметр «<control-plane-host>:<control-plane-port>», адрес должен быть заключен в квадратные скобки. Например:
[fd00::101]:2073
- Должен быть получен вывод следующего вида:
- Спустя несколько секунд нода должна появиться в выводе команды:
kubectl get nodes
Дополнительные настройки
В дефолтной конфигурации мастер-нода не запускает контейнеры, так как занимается отслеживанием состояния кластера и перераспределением ресурсов. Ввод данной команды даст возможность запускать контейнеры на мастере, собенно, если кластер содержит лишь одну ноду:
kubectl taint nodes --all node-role.kubernetes.io/master-
Проверка работоспособности кластера
Проверить, что кластер запустился и правильно работает, можно так:
kubectl -n kube-system get pods
Вывод будет аналогичен. В нем будут отображены системные POD’ы k8s.
Теперь установку можно считать завершенной. Далее можно продолжить настройку K8s для работы с веб-приложениями. Например, подключить диспетчер пакетов «helm» для автоматического развертывания приложений или контроллер «nginx ingress», отвечающий за маршрутизацию внешнего трафика.
Заключение
Несмотря на кажущуюся сложность настройки, K8s стоит времени, потраченного на его изучение. Kubernetes — наиболее совершенный на сегодня инструмент оркестрирования контейнеров. Он позволяет не только автоматизировать процесс развертывания, но и максимально упрощает дальнейший процесс работы с массивами контейнеров.
С помощью этого краткого руководства начать работу с K8s сможет даже начинающий пользователь. В дальнейшей работе с платформой поможет подробная официальная документация, доступная, в том числе, на русском языке.
Оцените материал:
[Всего голосов: 1 Средний: 5/5]
Kubernetes (K8s) — это программная платформа для автоматического управления контейнеризованными приложениями. Она предлагает базовые механизмы для их развертывания, масштабирования и поддержки. Система имеет открытый исходный код и быстро растущую экосистему.
Kubernetes разработала компания Google на основе более ранней системы управления кластерами Borg. Первое название — Project Seven, в честь героини сериала Star Trek. Аллюзией на нее также являются семь ручек на штурвале логотипа проекта. Современное название отсылает к греческому слову «рулевой». Исходный код системы был представлен в 2014 году. После выхода версии 1.0 в 2015 году Google в сотрудничестве с Linux Foundation основала фонд Cloud Native Computing Foundation (CNCF) и передала ему Kubernetes в рамках начального технологического вклада.
Что представляет собой контейнеризация
Контейнеризация приложений — одно из ключевых понятий в работе Kubernetes. Для его понимания кратко рассмотрим подходы к развертыванию приложений на серверах.
Традиционный способ. На первых этапах развития компьютерной техники несколько приложений, установленных на одном сервере, отбирали ресурсы друг у друга, снижая эффективность работы. Решением стал запуск одной программы на одном физическом сервере. Но иметь несколько серверов было невыгодно.
Виртуальная машина. Это программная или аппаратная эмуляция работы одной или нескольких гостевых платформ (quest) на платформе-хозяине (host). Виртуальная машина имитирует компоненты аппаратного обеспечения или целый ПК с отдельной ОС. Это позволило эффективнее разграничить ресурсы физического сервера между ВМ и масштабировать их работу.
Контейнер. По сути, это усовершенствованный вариант виртуальной машины с максимальной изоляцией в рамках одной операционной системы. В отличие от обычной ВМ, он не связан с базовой аппаратной инфраструктурой и может легко переноситься между облаками и несколькими ОС.
Преимущества контейнеризации:
- простота и гибкость развертывания приложений по сравнению с ВМ;
- непрерывность создания, интеграции и развертывания контейнера с возможностью быстро откатить изменения;
- создание контейнеров приложений в процессе сборки/релиза и отделение приложения от аппаратной инфраструктуры;
- идентичность среды разработки и тестирования на сервере и терминалах разработчика (ноутбуках, ПК);
- возможность переносить приложения между облаками и ОС — Ubuntu, RHEL, CoreOS, on-prem, Google Kubernetes Engine и т.д.;
- разделение приложений на изолированные, распределенные, гибкие микросервисы с динамическим развертыванием и управлением.
Как работает Kubernetes
Сами по себе контейнеры — это способ развертывания и запуска приложений на сервере. Если контейнеров несколько, важно настроить их совместную работу так, чтобы они не отбирали друг у друга ресурсы аппаратной платформы и эффективно их расходовали. Кроме развертывания и запуска контейнеров, разработчику нужно периодически исправлять ошибки. Делать это вручную очень сложно. Kubernetes позволяет автоматизировать большинство процессов. Это называется «оркестрация контейнеров». Платформа может масштабировать приложения и обрабатывать возникающие ошибки, распределять ресурсы, поддерживать баланс между контейнерами и т.д. Но K8s работает не один. Чтобы он мог запустить приложения и службы в контейнерах, каждый должен быть оснащен средой выполнения. Это может быть Docker, rkt или runc.
Kubernetes действует на уровне логики, а не аппаратного обеспечения, по принципу «ведущий — ведомый». Управление системой основано на двух подходах:
- декларативном — разработчик задает цели, а не пути их достижения, которые система автоматически выбирает сама;
- императивном — разработчик может распоряжаться ресурсами с помощью команд «Создать», «Изменить», «Удалить».
Возможности Kubernetes
Наблюдение за работой сервисов. Платформа позволяет следить как за отдельными приложениями, так и за всем кластером сразу. K8s имеет веб-интерфейс. Все данные о работе сервисов система предоставляет разработчику в интуитивно понятном виде.
Распределение нагрузки. Трафик, который потребляют контейнеры, может различаться. Это негативно влияет на развертывание приложений. Kubernetes автоматически отслеживает нагрузку в контейнерах, и если в каком-то из них обнаруживается высокий трафик, то платформа распределяет его между другими контейнерами. Это может сделать и сам разработчик, указав платформе имеющиеся ресурсы, а также их количество, необходимое для работы приложений.
Оркестрация хранилища. С помощью Kubernetes разработчик может выбрать систему хранения: локальное хранилище, облако и т.д. Платформа автоматически создаст ее и настроит под потребности проекта.
Развертывание и откаты. Платформа позволяет развертывать приложения в автоматическом и ручном режимах. Есть вариант канареечного развертывания, когда изменения, внесенные разработчиком, применяются только на некоторой части контейнеров. Такое решение позволяет осторожно тестировать обновления. Изменения можно автоматически откатить.
Самоконтроль. Если контейнер отказывает или сбоит, Kubernetes автоматически перезапускает или останавливает его. Освободившиеся ресурсы она распределяет на другие приложения. Система контролирует их работу в соответствии с критериями, заданными разработчиком. Если контейнер не соответствует им, платформа отключает его или заменяет на другой, а также скрывает от клиента, пока он не будет готов к обслуживанию.
Безопасность и конфиденциальность. Kubernetes может сохранять и контролировать конфиденциальные данные (пароли, ключи SSH, OAuth-токены), распределять права доступа к системе. Обновление и развертывание приложений не затрагивает образы контейнеров и не раскрывает секретные сведения в конфигурации стека.
Хотя Kubernetes предоставляет широкие возможности по автоматизированной оркестровке контейнеризованных приложений, она не является полностью автоматической. Разработчику нужно выполнять предварительную подготовку и настройку.
Основные объекты кластера Kubernetes
Объекты — сущности, которые в архитектуре Kubernetes используются для представления состояния кластера.
Nodes (ноды, узлы)
Это физические или виртуальные машины, на которых развертываются и запускаются контейнеры с приложениями. Совокупность нод образует кластер Kubernetes.
Nodes бывают двух типов:
- Master (мастер-нода) — узел, управляющий всем кластером. Он следит за остальными нодами и распределяет между ними нагрузку с помощью менеджера контроллеров (controller manager) и планировщика (scheduler). Как правило, мастер-нода занимается только управлением и не берет на себя рабочие нагрузки. Для повышения отказоустойчивости существует несколько мастер-нод.
- Worker (рабочие ноды) — узлы, на которых работают контейнеры. В зависимости от параметров ноды (объема памяти и центрального процессора) на одном узле может работать много контейнеров. Чем больше рабочих узлов, тем больше приложений можно запустить. Также количество влияет на отказоустойчивость кластера, потому что при выходе из строя одной ноды нагрузка переносится на другие.
Pods (Поды)
Это абстрактный объект Kubernetes, представляющий собой «обертку» для одного или группы контейнеров. Контейнеры в поде запускаются и работают вместе, имеют общие сетевые ресурсы и хранилище. Kubernetes не управляет контейнерами напрямую, он собирает их в поды и работает с ими.
Под и все его контейнеры функционируют на одном узле и находятся там до завершения работы. Оно может произойти в соответствии с жизненным циклом, из-за выхода из строя узла или обновления контейнера в составе пода. При пересоздании под может создаться на другой ноде, которая отличается от первоначальной.
Чаще всего в поде только один контейнер (приложение), потому что у каждого могут быть свои требования к масштабированию, производительности, SLA и пр.
Поды, объединяющие несколько контейнеров, встречаются реже. Например, когда надо объединить взаимосвязанные приложения, зависящие друг от друга. Запускать их отдельно бессмысленно.
Обычно Kubernetes сам создает поды. Для этого он должен знать образы, требования к узлам и пр. В этом помогают контроллеры, например Deployments.
Controllers (контроллеры)
Контроллеры — это общее название средств управления, следящих за кластером и поддерживающих желаемое его состояние. Существует несколько типов контроллеров:
- Deployment (развертывание). Набор алгоритмов и директив, описывающих поды, число их экземпляров, порядок их замены при изменении характеристик. С его помощью разработчик декларирует изменения нодов и наборов реплик. Это самый популярный способ разместить приложение в Kubernetes.
- ReplicaSet (набор реплик). Описывает и управляет работой нескольких подов на кластере. Чем больше таких реплик, тем выше устойчивость системы к отказам и лучше масштабируются приложения.
- StatefulSet (набор состояния). Контроллер применяется для управления приложениями с отслеживанием состояния (stateful-приложениями) с использованием постоянного хранилища.
- DaemonSet (набор «демонов»). Представляет собой совокупность «демонов» (фоновых программ, работающих без взаимодействия с пользователем) и отвечает за запуск одной реплики выбранного пода на каждом отдельном узле. То есть по мере добавления узлов в кластер добавляются и поды.
- Job (задание). Контроллер, отвечающий за однократный запуск выбранного пода и завершающий его работу. CronJob — его разновидность, запускающая группу заданий по заданному расписанию.
Services (сервисы)
Сервисы объединяют поды в логическую группу и определяют политику доступа к ним. По функционалу они напоминают маршрутизатор и балансировщик нагрузки между подами.
Поды могут пересоздаваться, уничтожаться, переезжать на другие ноды и изменять IP-адреса. Если внешней системе или сервису будет нужно обратиться к поду, они должны быть в курсе его жизненного цикла и понимать, куда обращаться в конкретный момент времени. Это неудобно. Поэтому в Kubernetes есть сервисы, которые знают количество подов, хосты, на которых они работают, и пр. Сервис получает запрос от внешних систем или сервисов, определяет, какому именно поду его адресовать, и делает это.
Persistent Volumes (постоянные тома)
Это способ хранения данных между перезапусками контейнеров.
Контейнеры могут в любой момент быть уничтожены или перезапущены. Их идея в том, что они легко «умирают» и заново появляются при необходимости. Поэтому все постоянные данные должны храниться вне контейнера. Но в целях безопасности контейнеры изолированы от основной системы. Кроме того, для отказоустойчивости могут создаваться несколько экземпляров контейнеров. Появляется новая проблема: нужно синхронизировать данные между репликами.
Для решения этих проблем в Kubernetes есть Persistent Volumes. Это постоянные тома, жизненный цикл которых не связан с подами и контейнерами. Самостоятельные ресурсы создаются и управляются отдельно.
Namespaces (пространства имен)
Это возможность разделить физический кластер Kubernetes на виртуальные, каждый из которых изолирован от других. Обычно пространства имен создаются для того, чтобы разделить команды, разные проекты или среды развертывания (dev, test, prod).
Ресурсы в них скрыты друг от друга, но не изолированы полностью. Сервис из одного пространства может общаться с сервисом из другого. При необходимости разграничить доступ пространства имен можно полностью изолировать.
В каждом Namespaces есть свои ресурсы: сервисы, поды, развертывания. В одном пространстве имен они должны иметь уникальные названия, но эти же названия допустимо использовать в других пространствах. В Namespaces входят не все ресурсы: например, Persistent Volumes и ноды доступны всему кластеру.
Основные компоненты кластера
Компоненты — это службы, модули и программы, обеспечивающие работу всего кластера. Они работают в нодах, то есть на виртуальных или физических серверах, где используется Kubernetes.
Кластер Kubernetes включает следующие компоненты:
- kube-apiserver. С помощью сервера API обеспечивается работа API кластера, обрабатываются REST-операции и предоставляется интерфейс, через который остальные компоненты взаимодействуют друг с другом. Также через него проходят запросы на изменение состояния или чтение кластера. Работает на master-нодах;
- kube-scheduler. Компонент, планирующий, на каких узлах разворачивать поды. Он учитывает такие факторы, как ограничения, требования к ресурсам, местонахождение данных и пр. Работает на master-нодах;
- etcd. Распределенное хранилище в формате «ключ-значение». В нем хранится состояние всего кластера. Главная задача etcd — обеспечить отказоустойчивость кластера и консистентность данных. Etcd — самостоятельный проект. Он развивается отдельно от Kubernetes и применяется в разных продуктах. Работает на master-нодах;
- kube-proxy. Служба, которая управляет правилами балансировки нагрузки. Она конфигурирует правила IPVS или iptables, через которые выполняются проксирование и роутинг. Работает на worker-нодах;
- kube-controller-manager. Компонент запускает работу контроллеров. Работает на master-нодах;
- kubelet. Cлужба, которая управляет состоянием ноды: запуском, остановкой и поддержанием работы контейнеров и подов. Работает на worker-нодах.
Преимущества и недостатки Kubernetes
Высокая популярность этой платформы среди разработчиков имеет следующие причины.
Портативность и гибкость
Kubernetes не зависит от аппаратного обеспечения. Работающую платформу можно переносить на другой сервер, в частное или общедоступное облако. Главное требование — операционная система хоста должна иметь подходящую версию ОС Linux и Windows.
Экономичность
Крупным компаниям Kubernetes помогает уменьшить расходы на ИТ-инфраструктуру благодаря группировке приложений в пакеты. Это оптимизирует использование средств, инвестированных в инфраструктуру и оборудование. K8s дает много возможностей для масштабирования приложения и делает процесс более доступным. Одновременно он сокращает нагрузку на персонал, позволяет сотрудникам направить силы на решение других задач, повышает эффективность использования ресурсов инфраструктуры.
Поддержка мультиоблачности
Kubernetes позволяет работать с мультиоблачной средой, то есть выполнять рабочие задачи как в одном облаке, так и в нескольких. Также можно переносить систему из одной облачной среды в другую, повышая ее безопасность.
Эффективное распределение задач
Микросервисы Kubernetes эффективно распределяют задачи между рабочими группами. Это делает систему более гибкой и ускоряет выполнение большого объема работы. Разработчики контролируют большие приложения, включающие множество контейнеров, одновременно делая их более детализированными.
Наличие развитой экосистемы
Kubernetes поддерживает много крупных корпораций, но это свободное ПО. Фонд CNCF только контролирует его развитие, но не владеет им. Поэтому сторонние разработчики могут создавать дополнения, расширяющие функционал системы, обмениваться опытом друг с другом. Большое количество справочных материалов и широкое комьюнити энтузиастов делают решаемой любую проблему, возникающую при работе с Kubernetes. Также можно пройти интерактивные уроки на официальном сайте.
Надежность
K8s уменьшает сложность облака, а также делает работу с ним более понятной и надежной. Это касается не только технических аспектов системы, но и вопросов безопасности информации, распределения прав доступа.
Из недостатков разработчики выделяют только относительную сложность платформы. Многие процессы необходимо настраивать вручную, сложно организован перенос между облаками и серверами. Поэтому от разработчика требуется высокий уровень квалификации даже для решения задач средней сложности.