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

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

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

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

Kubernetes (K8s) — что это?

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

Основная цель 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 вручную

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

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

Аутсорсинг VS собственное производство одежды: опыт бренда кроссовок

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

Как сократить затраты на инфраструктуру в два раза: опыт ИТ-компании Ctrl2GO

Рассказываем, как помогли российскому разработчику систем аналитики мигрировать в частное облако и сократить затраты на аутсорсинговые услуги. (далее…)
Read More

Каким должен быть сайт-визитка для эксперта

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

Как продвигать бизнес с помощью геосервисов

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

Как открыть своё digital-агентство

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

Что такое Data Science и кто такой Data Scientist

Что такое наука о данных, чем занимается Data Scientist и можно ли обучиться этой специальности с нуля – об этом...
Read More

Как и зачем малому бизнесу работать с НКО

Начинающим компаниям в сфере IT, дизайна, PR и маркетинга, бухгалтерских и аудиторских услуг НКО могут быть очень полезны как клиенты. Раскрываем все нюансы такого сотрудничества: от выбора партнёра до менеджмента проекта и финансовых отношений.
Read More

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

В современном мире применение контейнеризации стало неотъемлемой частью процесса разработки и тестирования программного обеспечения. Контейнеры позволяют разработчикам упаковывать приложения вместе...
Read More

Как открыть ИП

Статус ИП — удобный «средний» вариант для старта бизнеса. Рассказываем, как открыть ИП, сколько времени и денег на это потребуется, на что обратить внимание.
Read More

Что такое конверсия и как ее рассчитать

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