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

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 по максимуму и обеспечат устойчивый рост и развитие бизнеса.

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

Установка, настройка и использование RabbitMQ

Интернет версии Веб 2.0 начал активно развиваться в начале 21 века, с появлением новых сайтов и веб-приложений. Используя синхронные вызовы,...
Read More

Node.js простыми словами: что это, плюсы и минусы

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

Мониторинг дисковой подсистемы в Zabbix

Стабильная работа серверов играет важную роль в бизнес-процессах. Сбой в работе сервера может привести к серьезным последствиям: от потери данных...
Read More

О методологии CI/CD простыми словами — принципы, этапы, плюсы и минусы

Подход CI/CD в последнее время много обсуждается в IT. Он часто используется для создания приложений или разработки облачных решений. Но...
Read More

Разбираемся с IP: адреса, маски и маршруты

Сетевые технологии — это неотъемлемая часть любого современного бизнеса и повседневной жизни. Будь то работа в офисе или использование интернета...
Read More

Хостинг Майнкрафт

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

Российские ОС для серверов: какие решения лучше подходят для корпоративной инфраструктуры?

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

Какую российскую ОС выбрать для бизнеса

На российском IT-рынке существует большое количество операционных систем, которые ориентированы на решение задач бизнеса. Многие организации стремятся работать на российских...
Read More

Что такое Grafana

У современной компании есть тысячи различных показателей, которые она получает из различных источников. Grafana ― это программа, которая может объединить...
Read More

Что такое бизнес-аналитика

Любой бизнес ― это, в первую очередь, цифры: доходы, расходы, налоги, инвестиции и многие другие показатели. Разобраться в них поможет...
Read More