В статье мы расскажем, что такое Kubernetes, опишем установку Kubernetes с нуля, и покажем, как настроить Kubernetes и начать работать с ним.
История создания Kubernetes
История Kubernetes берет свое начало в 2014 году, когда Google представил проект на базе своего внутреннего инструмента Borg, разработанного для управления большими кластерами серверов. Borg был решением Google для эффективного управления сотнями тысяч контейнеров, которые работали в дата-центрах компании по всему миру. Kubernetes был создан с целью сделать эту технологию доступной для широкой аудитории. Основной вклад в проект был внесен инженерами Google: Джо Бедой, Бренданом Бернсом и Крэйгом МакЛаки, которые заложили основы Kubernetes как открытой платформы. В 2016 году Google передала Kubernetes под управление Cloud Native Computing Foundation (CNCF), который является подразделением Linux Foundation. С тех пор Kubernetes стал одним из самых популярных решений для управления контейнерами, поддерживаемым сообществом разработчиков и рядом крупных ИТ-компаний.
Введение в Kubernetes: что это такое и как устроено
Kubernetes (Кубернетес) — это платформа для автоматизации управления контейнерами приложений с помощью кластеров на Ubuntu, CentOS и других ОС семейства Linux. Кластеры подключены к высокоуровневому API. Благодаря этому можно системно группировать контейнеры, балансировать нагрузку и активировать задачи одновременно из сотен приложений.
Настройка Kubernetes-кластера будет интересна крупным компаниям с разработками формата Big Data или команде программистов, которым нужна крупная производственная среда. Для таких масштабных проектов хорошо подойдет инфраструктурная платформа на основе Kubernetes. Kubernetes требователен к приложениям, с которыми работает — они должны функционировать строго по принципу микросервисов. Также кластер Кубернетес расходует много ресурсов, поэтому запускать его в небольших проектах невыгодно.
Для чего нужен Kubernetes
Kubernetes — платформа управления контейнерами, которая используется для автоматизации развертывания, масштабирования и управления контейнерными приложениями. Контейнеры — это небольшие, изолированные среды, которые содержат в себе все необходимое для выполнения приложения: код, библиотеки, зависимости и конфигурации. Они позволяют создавать стабильные и переносимые приложения, которые можно запускать на различных платформах без модификации кода.
Однако управление контейнерами в большом масштабе может стать сложным процессом. Kubernetes решает эту проблему, предоставляя инструменты для:
- оркестрации контейнеров. Kubernetes автоматически управляет всеми запущенными контейнерами, помогая распределять их нагрузку, запускать новые экземпляры и отслеживать их состояние. Он позволяет автоматизировать задачи, которые вручную было бы сложно контролировать, например, балансировку нагрузки и замену неработающих экземпляров;
- масштабирования. Kubernetes поддерживает автоматическое горизонтальное масштабирование, позволяя увеличивать или уменьшать количество запущенных контейнеров в зависимости от нагрузки на приложение;
- управления отказоустойчивостью. Kubernetes автоматически перезапускает контейнеры в случае сбоя и перераспределяет их на другие узлы, чтобы поддерживать высокую доступность приложений;
- управления конфигурацией и конфиденциальными данными. Kubernetes упрощает управление конфигурацией и конфиденциальной информацией (например, паролями и ключами шифрования), обеспечивая их защиту и удобную работу с ними. Эти данные можно развертывать и обновлять без перезапуска контейнеров и не раскрывая конфиденциальную информацию в конфигурации стека.
Kubernetes облегчает процесс развертывания приложений в контейнерах, делая их управление гибким, надежным и масштабируемым.
Основные компоненты архитектуры Kubernetes
Архитектура Kubernetes состоит из следующих компонентов:
- Nodes (нода или узел) — виртуальная или физическая машина, на которой работают контейнеры приложений. Каждая нода содержит компоненты, которые позволяют запускать сервисы контейнеризации (например, CRI-O или Containerd). Существует 2 типа нод: Control Plane (Master node) и Worker nodes. Control Plane — это главный узел, отвечающий за управление и администрирование Kubernetes-кластерами. Worker nodes — это отдельные рабочие узлы.
- Pods или поды — базовые модули для управления приложениями. Могут состоять из одного или нескольких контейнеров.
- Volume или том — ресурс для единовременного использования нескольких контейнеров.
- Kube-proxy — совокупность балансировщика нагрузки и прокси-сервера, которые позволяют маршрутизировать входящий трафик для конкретных контейнеров пода.
- Kubelet — транслирует статус подов на узле и следит за корректностью работы конкретного контейнера, образа и других компонентов.
Kubernetes можно установить с помощью готового инструмента или самостоятельно, добавляя каждый компонент архитектуры вручную. Мы расскажем, как установить полный функционал Kubernetes на Ubuntu вторым способом.
Для настройки Kubernetes:
- измените имена хостов,
- установите Kubernetes,
- включите модули ядра,
- настройте sysctl,
- установите Containerd,
- разверните Kubernetes.
В инструкции мы расскажем, как установить и настроить Kubernetes для мастер-ноды и для одной рабочей ноды. Мастер-ноду назовем kube-master, а рабочую ноду — kube-worker.
Подготовка к установке
-
1
На каждой ноде откройте файл hosts с помощью команды:
sudo nano /etc/hosts
-
2
В файле удалите строку, в которой указан IP вашего сервера. Добавьте записи:
IP_ADDRESS kube-master IP_ADDRESS kube-worker
Где
IP_ADDRESS
— IP-адрес каждого узла. - 3 Сохраните и закройте файл. Для этого нажмите Ctrl+X, затем Y и Enter.
-
4
Зайдите в мастер-ноду и измените имя хоста:
sudo hostnamectl set-hostname kube-master
-
5
Войдите в рабочую ноду и введите команду:
sudo hostnamectl set-hostname kube-worker
- 6 Перезайдите на каждый из серверов.
Как установить Kubernetes
-
1
Войдите в мастер-ноду и запустите обновление с помощью команд:
sudo apt update
sudo apt upgrade -y
-
2
После завершения обновления введите команду:
sudo apt-get install -y apt-transport-https ca-certificates curl gpg
-
3
Создайте директорию /etc/apt/keyrings с помощью команды:
mkdir /etc/apt/keyrings
-
4
Затем добавьте GPG-ключ командой:
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.29/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
-
5
Добавьте репозиторий Kubernetes:
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.29/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
-
6
Введите команду:
sudo apt-get update
При выполнении команды возникла ошибка 403При выполнении команды
sudo apt-get update
может возникнуть ошибка 403:E: Failed to fetch https://apt.kubernetes.io/dists/kubernetes-xenial/InRelease 403 Forbidden [IP: 2600:1901:0:26f3:: 443] E: The repository 'https://apt.kubernetes.io kubernetes-xenial InRelease' is not signed.
Ошибка возникает из-за того, что к серверам происходит подключение по IPv6. Для решения этой проблемы можно отключить использование IPv6.
Для временного отключения IPv6 (до перезагрузки) введите команды:
sysctl -w net.ipv6.conf.all.disable_ipv6=1 sysctl -w net.ipv6.conf.default.disable_ipv6=1 sysctl -w net.ipv6.conf.lo.disable_ipv6=1
Для включения IPv6 используйте команды:
sysctl -w net.ipv6.conf.all.disable_ipv6=0 sysctl -w net.ipv6.conf.default.disable_ipv6=0 sysctl -w net.ipv6.conf.lo.disable_ipv6=0
Для постоянного отключения IPv6 откройте файл /etc/sysctl.conf с помощью команды:
nano /etc/sysctl.conf
Затем добавьте туда следующие параметры:
net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
Сохраните и закройте файл. Для этого нажмите Ctrl+X, затем Y и Enter.
-
7
Установите необходимое программное обеспечение:
sudo apt-get install -y kubelet kubeadm kubectl vim git curl wget
-
8
Отключите автоматическое обновление kubelet, kubeadm и kubectl:
sudo apt-mark hold kubelet kubeadm kubectl
-
9
Включите службу kubelet:
sudo systemctl enable --now kubelet
-
10
Проверьте установленную версию kubeadm:
kubeadm version
Kubernetes: установка
-
11
Отключите подкачку памяти:
sudo swapoff -a
Повторите проделанные шаги на kube-worker.
Как включить модули ядра и изменить настройки в sysctl
На всех узлах внесите следующие настройки:
-
1
Включите модули overlay и br_netfliter:
sudo modprobe overlay
sudo modprobe br_netfilter
-
2
Теперь измените настройки sysctl. Откройте файл kubernetes.conf:
sudo nano /etc/sysctl.d/kubernetes.conf
-
3
Вставьте в него следующие строки:
net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1
- 4 Сохраните и закройте файл. Для этого нажмите Ctrl+X, затем Y и Enter.
-
5
Перезагрузите sysctl командной:
sudo sysctl --system
Как установить Containerd
Теперь на каждой машине нужно установить среду для запуска контейнеров — Containerd.
-
1
Настройте постоянную загрузку модулей Containerd с помощью команды (нужно скопировать и вставить сразу все 4 строки):
cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF
-
2
Перезагрузите sysctl командной:
sudo sysctl --system
-
3
Установите необходимые пакеты:
sudo apt install curl gnupg2 software-properties-common apt-transport-https ca-certificates -y
-
4
Добавьте GPG-ключ:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
-
5
Добавьте необходимый репозиторий при помощи команды:
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
-
6
Установите Сontainerd:
sudo apt update
sudo apt install containerd.io -y
-
7
Зайдите под пользователем root:
sudo su -
-
8
Создайте новый каталог для Сontainerd:
mkdir -p /etc/containerd
-
9
Создайте файл конфигурации:
containerd config default>/etc/containerd/config.toml
-
10
Откройте конфигурационный файл с помощью команды:
nano /etc/containerd/config.toml
-
11
В конфигурационном файле найдите параметр SystemdCgroup и замените его значение на true:
SystemdCgroup = true
Затем сохраните и закройте файл. Для этого нажмите Ctrl+X, затем Y и Enter.
-
12
Выйдите из-под пользователя root:
exit
-
13
Перезапустите Containerd:
sudo systemctl restart containerd
-
14
Включите автоматический запуск службы Containerd:
sudo systemctl enable containerd
Как развернуть Kubernetes
-
1
Перейдите в kube-master и извлеките необходимые образы контейнеров:
sudo kubeadm config images pull
-
2
Инициализируйте кластер при помощи команды:
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
-
3
В консоли появится информация о команде kubeadm join. Скопируйте и сохраните вывод этой команды.
Подключение к кластеру
Введите эту команду на ноде kube-worker, чтобы присоединить ее к кластеру.
Если не сохранили команду добавления в кластер, получите ее повторно:
sudo kubeadm token create --print-join-command
-
4
Создайте директорию для кластера на мастер-ноде с помощью следующих команд:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
-
5
Теперь разверните сеть подов — она используется для коммуникации между несколькими нодами в кластере. Чтобы развернуть виртуальную сеть Flannel pod network, введите:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
-
6
После установки проверьте, что сеть развернута:
kubectl get pods --all-namespaces
Kubernetes: настройка
-
7
Присвойте узлу kube-worker роль worker при помощи команды (команду нужно вводить в мастер-ноде):
sudo kubectl label node kube-worker node-role.kubernetes.io/worker=worker
-
8
После завершения настроек выполните команду в kube-master:
kubectl get nodes
Kubernetes в действии
Вы должны увидеть в списке мастер-ноду и рабочую ноду.
Готово, вы развернули Kubernetes. Теперь вы можете начать работу с платформой.
Преимущества Kubernetes
Переход к контейнеризации и использование Kubernetes приносит значительные выгоды компаниям, стремящимся улучшить управление своими приложениями и инфраструктурой. Рассмотрим ключевые преимущества Kubernetes:
- 1. Автоматизация управления контейнерами. Kubernetes значительно упрощает процессы развертывания, мониторинга и управления контейнерами. Он автоматически размещает контейнеры на доступных узлах, следит за их состоянием и перезапускает их в случае сбоя. Это позволяет разработчикам сосредоточиться на создании приложений, а не на операционных задачах.
- 2. Масштабируемость. Kubernetes позволяет масштабировать приложения как вертикально (увеличивая ресурсы для конкретного контейнера), так и горизонтально (добавляя больше экземпляров подов). Это особенно полезно для компаний, которые сталкиваются с постоянно меняющимися нагрузками на свои системы.
- 3. Балансировка нагрузки. Kubernetes автоматически распределяет трафик между подами, что способствует высокой доступности приложений. Это особенно важно для приложений с большим количеством пользователей или в условиях высокой нагрузки, когда требуется равномерно распределять запросы и не допускать перегрузки отдельных компонентов.
- 4. Безопасность. Kubernetes обеспечивает высокий уровень безопасности за счет изоляции приложений на уровне контейнеров. Это позволяет создавать независимые и безопасные рабочие среды для каждого компонента приложения. Также K8s изолирует приложения от слоя управления кластером, защищая их от вмешательства или сбоев в управлении инфраструктурой.
- 5. Независимость от платформы. Kubernetes обеспечивает возможность работы с контейнерами на любых платформах: в облаке, на собственных серверах или в гибридной среде. Это делает его гибким инструментом, позволяющим разворачивать приложения в любой инфраструктуре.
- 6. Экономия ресурсов. Kubernetes управляет легковесными контейнерами, что позволяет оптимально использовать вычислительные мощности и снизить затраты на инфраструктуру.
- 7. Автоматизация развертывания и управления. Kubernetes предоставляет набор API и механик работы отдельных ресурсов, позволяющих построить инструменты для автоматизированного развертывания, обновления и отката приложений. Это упрощает интеграцию процессов CI/CD, обеспечивая быстрое и надежное обновление приложений без простоев. Такой подход снижает риски ошибок при ручном развертывании и позволяет командам быстрее выводить новые функции на рынок.
- 8. Поддержка микросервисной архитектуры. Kubernetes идеально подходит для микросервисной архитектуры, где приложения состоят из небольших, независимо разрабатываемых и развертываемых сервисов. Это упрощает управление сложными системами, дает возможность легко масштабировать отдельные компоненты, обновлять код и выполнять откат изменений при необходимости. Микросервисный подход в сочетании с Kubernetes значительно ускоряет процессы разработки и вывода новых продуктов на рынок.
Итак, в руководстве мы объяснили, зачем нужен Kubernetes, дали описание основ функционирования архитектуры и показали, как установить Kubernetes на Ubuntu.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊