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

K8s для начинающих

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

Что такое Kubernetes (или, как часто русифицируют название, «Кубернетис»)? Это мощная платформа для оркестрации контейнеров, которая позволяет автоматизировать развертывание, управление и масштабирование приложений. Эта статья будет полезна тем, кто только начинает знакомство с Kubernetes. Мы рассмотрим основные понятия, разберем ключевые компоненты и архитектуру платформы, обсудим ее преимущества и расскажем, как установить Kubernetes. Эта информация поможет вам понять, как Kubernetes может повысить эффективность и надежность ваших приложений, а также ускорить процессы разработки и развертывания.

Kubernetes (K8s) — что это простыми словами?

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

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

Источник: Shutterstock. Kubernetes - один из самых популярных инструментов для оркестрации контеунеров

Что такое контейнеры и чем они полезны

Контейнеры — это легковесные и изолированные окружения для выполнения приложений. Они содержат в себе все необходимые для работы приложения компоненты: код, библиотеки, иные зависимости и системные инструменты. Контейнеры позволяют запускать приложения в любых средах (на ПК, серверах, в облаке) без модификации кода, а также контейнеры, управляемые платформой Kubernetes, помогают изолировать приложения и зависимости.

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

Контейнеры стали популярными благодаря следующим преимуществам:

  1. Изоляция приложений. Контейнеры изолируют приложения и их зависимости. Это предотвращает конфликты между приложениями, работающими на одном сервере.
  2. Портативность. Контейнеры можно запускать в различных средах разработки без изменения конфигурации. Приложения в контейнерах можно переносить между различными ОС и облачными платформами.
  3. Масштабируемость. Контейнеры можно легко создавать или удалять, чтобы поддерживать оптимальную производительность приложений.
  4. Автоматизация. Процесс создания, развертывания и управления контейнерами может быть легко автоматизирован и включать механизмы самовосстановления и откатов.
  5. Экономия ресурсов. Контейнеры более легковесные, чем виртуальные машины. Благодаря этому можно запускать больше приложений на меньшем количестве серверов и снижать затраты на инфраструктуру.

Компоненты и архитектура Kubernetes

Архитектура Kubernetes построена на принципах модульности и масштабируемости. Она включает в себя множество компонентов, о которых расскажем ниже.

Концепции

CSI (Container Storage Interface) — интерфейс для интеграции систем хранения данных с Kubernetes. Он позволяет подключать сторонние системы хранения данных через API.

Реализации CSI:

  • ceph, 
  • openebs, 
  • linstor.

CNI (Container Network Interface) — интерфейс для сетевой конфигурации контейнеров, который используется для управления сетью и взаимодействия между подами. 

Реализации CNI: 

  • flannel, 
  • calico, 
  • cilium.

CRI (Container Runtime Interface) — интерфейс для взаимодействия Kubernetes с различными средами выполнения контейнеров.

Реализации CRI:

  • containerd, 
  • CRI-O.

Кластеры и типы узлов

Кластеры — совокупность узлов (серверов), которые работают вместе для выполнения контейнеризованных приложений. Кластеры состоят из двух типов узлов: control plane и worker node. 

  1. Control Plane (Master node) — главный узел, который выполняет задачи по управлению и администрированию K8s-кластеров. Он включает в себя:
  • kube-apiserver — обеспечивает взаимодействие с Kubernetes через REST API или gRPC;
  • etcd — распределенное хранилище данных, нативно поддерживаемое Kubernetes. Хранит все данные о кластере в виде ключ-значение;
  • kube-controller-manager — следит за состоянием кластера и управляет различными контроллерами;
  • kube-scheduler — определяет, на каких нодах будут запущены контейнеры;
  • Kubelet — агент, работающий на каждом узле и следящий за состоянием подов (pods);
  • Container Runtime — среда для запуска контейнеров. K8s поддерживает различные среды выполнения контейнеров, например, Containerd или CRI-O.
  1. Worker nodes — это рабочие узлы, которые включают в себя:
  • Kubelet;
  • Kube-proxy — сетевой прокси-сервер, который позволяет конфигурировать сетевые правила на узлах;
  • Container Runtime.

Типы приложений по функциональному назначению

Приложения в Kubernetes запускаются внутри подов (pods) — наборов работающих контейнеров в кластере. Каждый под имеет свой жизненный цикл. К примеру, если на узле с запущенными подами произойдет сбой, все поды выйдут из строя. Такой сбой будет считаться необратимым: для восстановления нужно будет создать новые поды, даже если позже узел заработает. Чтобы облегчить управление и не контролировать каждый под вручную, в K8s были добавлены контроллеры.

Контроллеры — компоненты, которые следят за состоянием кластера или какого-либо ресурса в Kubernetes и выполняют различные действия для поддержания желаемого состояния. 

Основные контроллеры:

  1. Deployment — управляет развертыванием и обновлением подов. Он обеспечивает декларативное управление состоянием приложений, позволяет легко масштабировать приложения и управлять стратегиями обновления.
  2. ReplicaSet — гарантирует, что запущено определенное количество идентичных подов. Он используется для обеспечения стабильной работы приложения, автоматически заменяя поды, которые перестали работать или были удалены.
  3. StatefulSet — используется для управления приложениями с отслеживанием состояния. StatefulSet управляет порядком развертывания, масштабирования и обновления подов.
  4. DaemonSet — гарантирует, что на всех или некоторых узлах запускается экземпляр пода. Часто используется для развертывания системных демонов, инструментов мониторинга и логирования.

Типы ресурсов

  1. Pods — наименьшая и наиболее простая единица развертывания в Kubernetes, состоящая из одного или нескольких контейнеров.
  2. Services — ресурс, который подключает набор подов к абстрактному имени сервиса и IP-адресу. 
  3. Ingress — ресурс, который управляет внешним доступом к сервисам в кластере, обычно через HTTP/HTTPS. Ingress определяет правила маршрутизации и может обеспечивать балансировку нагрузки, SSL-терминацию и виртуальный хостинг на основе имени.
  4. ConfigMaps — используется для хранения неконфиденциальных данных конфигурации в виде пар ключ-значение. ConfigMaps позволяет управлять конфигурацией приложений отдельно от контейнерных образов, что облегчает обновление конфигураций без пересборки образов.
  5. Secrets — используется для хранения конфиденциальной информации, такой как пароли, токены, ключи K8s API. Secrets помогают избежать хранения чувствительных данных в открытом виде в манифестах подов или контейнерных образах.

Преимущества Kubernetes

  1. Автоматическое восстановление. Kubernetes автоматически перезапускает поды, которые перестали работать, перемещает поды на рабочие ноды, убирает и заменяет поды, не прошедшие проверку состояния.
  2. Масштабируемость. K8s позволяет легко масштабировать приложения как вертикально (добавляя больше ресурсов для каждого отдельного контейнера), так и горизонтально (добавляя больше экземпляров подов).
  3. Автоматизация развертывания и управления. Kubernetes предоставляет ряд API и механик работы отдельных ресурсов, которые позволяют построить инструменты для автоматического развертывания, обновления и отката приложений. С их помощью можно интегрировать процессы CI/CD и обеспечить быстрое и надежное обновление приложений без простоев.
  4. Безопасность. Kubernetes обеспечивает изоляцию приложений на уровне контейнеров, а также изоляцию от слоя управления кластером.
  5. Балансировка нагрузки. Kubernetes автоматически распределяет трафик между подами, обеспечивая высокую доступность приложения.
  6. Экономия ресурсов. K8s управляет легковесными контейнерами. Это позволяет эффективно использовать вычислительные ресурсы и снижает затраты на инфраструктуру.
  7. Поддержка микросервисной архитектуры. Kubernetes позволяет управлять множеством небольших, независимо разрабатываемых и развертываемых сервисов. Это дает возможность масштабирования, позволяет стандартизировать подходы, упрощает обновление кода и продуктов в целом, позволяет легко откатывать изменения и многое другое.
Как установить Kubernetes вручную
Источник: Shutterstock. Kubernetes обладает рядом неоспоримых преимществ среди других решений, среди них: масштабируемость, безопасность и экономия ресурсов

Как установить Kubernetes

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

Kubernetes можно развернуть различными способами: через kubeadm, kOps, kubespray, с помощью cluster API и другие. В этой статье мы развернем кластер через kubeadm.

Kubeadm — инструмент, который используется для создания кластеров K8s. Он выполняет действия, необходимые для быстрого запуска минимально жизнеспособного кластера. Kubeadm также служит «строительным блоком» для более высокоуровневых инструментов, таких как kubespray.

Подготовка кластера Kubernetes с другими инструментами требует времени, ресурсов сервера и опыта. Kubeadm прост в освоении и подходит для случаев, когда необходимо быстро развернуть кластер с минимальными ресурсами.

Установка будет производиться на серверы с операционной системой Ubuntu. В качестве примера мы установим одну master node с именем k8s-master и одну worker node с именем k8s-worker.

Подготовка к установке

  1. На всех нодах откройте файл /etc/hosts в любом текстовом редакторе, например nano:
  1. Удалите строку с IP-адресом вашего сервера. Затем добавьте записи:

Где:

  • IP_MASTER_NODE — IP-адрес мастер-ноды,
  • IP_WORKER_NODE — IP-адрес рабочей ноды.

Чтобы сохранить изменения и закрыть файл, нажмите Ctrl+X, Y, Enter.

  1. Измените имя хоста в master node:
  1. Измените имя хоста в worker node:
  1. Перезайдите на каждый из серверов.

Установка Kubernetes

На всех нодах проделайте следующие шаги:

  1. Введите команды:
  1. Установите необходимые пакеты с помощью команды:
  1. Создайте директорию /etc/apt/keyrings:
  1. Добавьте GPG-ключ репозитория:
  1. Добавьте репозиторий K8s с помощью команды:
  1. Обновите список доступных пакетов с помощью команды:

Обратите внимание: во время выполнения этой команды может возникнуть ошибка 403:

Проблема возникает из-за подключения к серверам по IPv6. Чтобы ее устранить, можно отключить использование IPv6.

Чтобы временно (до перезагрузки) отключить использование IPv6, введите команды:

Чтобы включить IPv6, воспользуйтесь командами:

Чтобы полностью отключить использование IPv6, откройте файл /etc/sysctl.conf:

Добавьте в него параметры:

После сохраните изменения и закройте файл, нажав Ctrl+X, Y, Enter.

  1. Установите необходимые пакеты с помощью команды:
  1. Отключите автоматическое обновление kubelet, kubeadm и kubectl:
  1. Включите kubelet с помощью команды:
  1. Проверьте установленную версию kubeadm:
Вывод команды kubeadm version
  1. Отключите подкачку памяти:

Включение модулей ядра и изменение настроек sysctl

На всех нодах проделайте следующие шаги:

  1. Включите модули overlay и br_netfliter с помощью команд:
  1. Настройте sysctl. Для этого откройте файл kubernetes.conf:
  1. Добавьте в файл следующие параметры:

Чтобы сохранить изменения и закрыть файл, нажмите Ctrl+X, Y, Enter.

  1. Перезапустите sysctl с помощью команды:

Установка Containerd

На всех нодах проделайте следующие шаги:

  1. Включите постоянную загрузку модулей Containerd при помощи команды (обратите внимание: нужно ввести сразу все 4 строки):
  1. Выполните перезагрузку sysctl:
  1. Добавьте GPG-ключ для репозитория с помощью команды:
  1. Добавьте репозиторий Docker при помощи команды:
  1. Обновите список доступных пакетов и установите Сontainerd:
  1. Авторизуйтесь под пользователем root:
  1. Создайте новую директорию для Сontainerd с помощью команды:
  1. Добавьте в директорию конфигурационный файл:
  1. Откройте файл config.toml в любом текстовом редакторе, например nano:
  1. Измените значение параметра SystemdCgroup на true:

После сохраните изменения и закройте файл, нажав Ctrl+X, Y, Enter.

  1. Выйдите из-под root-пользователя:
  1. Выполните перезагрузку Containerd:
  1. Включите автоматический запуск службы Containerd:

Развертывание Kubernetes

  1. Войдите в k8s-master и извлеките образы контейнеров:
  1. Инициализируйте ноды с помощью команды:
  1. После выполнения команды в терминале появится информация о команде kubeadm join. Скопируйте эту команду.
Команда kubeadm join в терминале

Затем введите скопированную команду на k8s-worker. Так вы присоедините ноду к кластеру.

Если вы забыли сохранить команду, для повторного получения откройте ноду k8s-master и введите:

  1. Откройте k8s-master и создайте директорию для кластера при помощи команды:
  1. Скопируйте K8s config-файл в созданную директорию и измените владельца файла с помощью команды:
  1. Разверните сеть подов с помощью команды:
  1. Убедитесь, что вы успешно развернули сеть:
Успешно развернутая сеть подов
  1. В ноде k8s-master присвойте ноде k8s-worker роль worker при помощи команды:
  1. Затем выполните команду:
Список нод

В списке должна появиться master node и одна worker node. 

На этом установка и развертывание K8s завершены. Вы создали самый примитивный кластер с минимально необходимыми настройками. 

Пример использования 

В качестве примера использования Kubernetes мы создадим pod, запустим сервис NodePort и получим доступ к поду через узел кластера. Для этого:

  1. Создайте файл манифеста для пода с именем pod.yaml:
  1. Откройте файл в любом текстовом редакторе, например, nano:
  1. Добавьте в файл следующие строки:

Затем сохраните и закройте файл, нажав Ctrl+X, Y, Enter.

  1. Примените манифест с помощью команды:
  1. Создайте файл манифеста для сервиса NodePort и именем service.yaml:
  1. Откройте файл в любом текстовом редакторе, например nano:
  1. Добавьте в файл следующие строки:

Затем сохраните и закройте файл, нажав Ctrl+X, Y, Enter.

  1. Примените манифест с помощью команды:
  1. Теперь сервис NodePort будет доступен на любом узле кластера по IP-адресу узла и заданному в шаге 7 порту. Например, если в качестве значения nodePort указан порт 30007, а IP-адрес одного из узлов — 192.168.1.100, то pod будет доступен по адресу http://192.168.1.100:30007. Для проверки можно использовать команду curl:

Где <NodeIP> — IP вашей ноды.

Вывод будет примерно следующим:

Вывод команды curl

Внедрение Kubernetes в бизнес

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

  1. Проведите аудит существующей ИТ-инфраструктуры и определите, какие приложения и сервисы могут быть контейнеризированы.
  2. Оцените готовность команды к работе с Kubernetes и потребность в обучении и поддержке.

Затем подготовьтесь к миграции:

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

Для перехода на K8s:

  1. Разверните кластер Кубера и мигрируйте первое приложение либо разверните тестовый проект. Выявите проблемы и при необходимости адаптируйте процессы.
  2. Внедрите практику CI/CD, чтобы автоматизировать развертывание приложений в Kubernetes.
  3. Настройте системы мониторинга и логирования для отслеживания состояния кластера и производительности приложений.
  4. Уделите внимание безопасности кластера, настройте ролевое управление доступом и защиту сетевого трафика.
  5. Постепенно продолжайте оптимизировать и масштабировать кластер.

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

Анастасия Мартынова

УПД в бухгалтерии: когда один документ может заменить несколько

Многие предприниматели жалуются на сложный и слишком изобильный документооборот: много документов приходится оформлять. Но при этом российское законодательство дает возможность...
Read More

Что такое роялти, как их рассчитать и кому они выгодны

Чтобы легально пользоваться результатами чужого труда в своем бизнесе, нужно за это заплатить. И неважно, идет ли речь о дизайне...
Read More

Франшиза: что это, как работает и стоит ли начинать такой бизнес

Франшизы предоставляют предпринимателям возможность использовать популярные бренды, эффективные бизнес-модели и поддержку со стороны материнской компании. Но за эти привилегии придется...
Read More

Какие компании называют вендорами и как они работают

Некоторые компании сосредотачивают в своих руках и производственные мощности, и права на то, что на них производят, и репутацию, которой...
Read More

Обособленное подразделение: как открывать и ставить на учет части компании

У любой компании есть адрес, по которому она «прописана», то есть зарегистрирована в ЕГРЮЛ. Но склад и офис с бухгалтерами...
Read More

С какого возраста можно открыть ИП и как это правильно сделать

Подросток может заниматься бизнесом, но с учетом важных условий, прописанных в законе. Разбираемся, как несовершеннолетнему стать предпринимателем, что такое эмансипация,...
Read More

Коносамент — главный документ морских грузоперевозок

Ежедневно по морю перевозят десятки, а то и сотни тысяч контейнеров с грузами. Чтобы партия товара, изготовленная, например, в Китае,...
Read More

Лучшая система налогообложения для вашего бизнеса. Как выбрать?

Одна из главных головных болей любого предпринимателя — уплата налогов. И дело даже не в том, что кому-то не хочется...
Read More

Фискальный чек — что это, зачем нужен и что будет, если его не выдать

Кто-то выкидывает их сразу возле кассы, кто-то тщательно собирает, чтобы потом проанализировать траты за месяц, кто-то даже не забирает их...
Read More

Расчет заработной платы по окладу в 2024 году: как понять, сколько заработал сотрудник

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