Бесплатная миграция IT-инфраструктуры в облако

Кластер Kubernetes: установка, настройка и управление

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
21 июля 2022 г.
3415
8 минут чтения
Средний рейтинг статьи: 5

Kubernetes или K8s — это программная платформа с открытым исходным кодом для оркестрации контейнеров, созданная Google. Основная концепция работы Kubernetes заключается в следующем: пользователь устанавливает его на сервер или, что более вероятно, кластер и развертывает на нем различные рабочие нагрузки. Kubernetes решает проблемы, связанные с созданием контейнеров, их масштабированием, пространствами имен, правами доступа и т.п. В основном взаимодействие с кластером осуществляется с помощью YAML-файлов — файлов с конфигурацией. В этой статье вы узнаете, как создать кластер Kubernetes и как развернуть кластер Kubernetes локально.

k8s

Создание виртуальных машин

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

Для создания виртуальных машин будем использовать VirtualBox от Oracle. Скачать его можно по этой ссылке. После установки переходим к созданию виртуальных машин.

В качестве операционной системы для ВМ выберем Ubuntu Server. Дистрибутив находится здесь. Загружаем его и открываем VirtualBox.

Image3

Для создания ВМ нажимаем на кнопку «Создать»:

Image2

Теперь Virtual Box предложит вам выбрать параметры ВМ. В нашем случае оставляем всё стандартным, но для мастер-ноды, которая отвечает за управление Kubernetes-кластером, выделяем 3 ГБ оперативной памяти и 2 CPU, а для рабочей 2 ГБ. Технические требования к кластеру Kubernetes подразумевают, что мастер-ноде нужно как минимум 2 CPU. Создаём таким образом 2 виртуальные машины.

После создания ВМ нужно создать образ с дистрибутивом Ubuntu Server. Переходим в «Носители» и нажимаем «Выбрать/создать образ диска»:

Image1

В открывшемся окне нажмите «Добавить» и выберите дистрибутив Ubuntu Server. После этого запускаем обе машины и устанавливаем операционную систему, выбрав для этого пункт «Try or Install Ubuntu». Во время установки создаем пользователей для каждой системы и выбираем стандартные настройки. 

После установки необходимо выключить обе виртуальные машины и перейти в их настройки. Переходим в раздел «Сеть» и меняем тип подключения на «Сетевой мост» для каждой системы, чтобы виртуальные машины были доступны между собой по сети:

Image4

Подготовка систем

Настройка сети

Зададим имена узлам кластера. В мастер ноде выполним эту команду:

sudo hostnamectl set-hostname master.local

А в рабочей эту:

sudo hostnamectl set-hostname worker.local

Если рабочих нод несколько, то выполните для каждой из них команду с новым именем: worker1.local, worker2.local и т.д.

Чтобы узлы были доступны по именам, изменим файл hosts на каждом из узлов. В нашем случае необходимо добавить в него такие строки:

192.168.43.80     master.local master
192.168.43.77     worker.local worker

192.168.43.80 и 192.168.43.77 — это IP-адреса каждого из узлов. Чтобы узнать IP-адрес, используем команду ip addr:

ip addr

Вывод:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:c3:51:48 brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.80/24 brd 192.168.43.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fec3:5148/64 scope link dadfailed tentative
       valid_lft forever preferred_lft forever

IP-адрес находится рядом с inet. Откроем файл hosts и внесем правки:

sudo nano /etc/hosts

Чтобы убедиться, что ВМ могут обращаться друг к другу, пропингуем их:

ping 192.168.43.80 

Если все хорошо, то вы получите вывод, подобный этому:

PING 192.168.43.80 (192.168.43.80) 56(84) bytes of data.
64 bytes from 192.168.43.80: icmp_seq=1 ttl=64 time=0.054 ms
64 bytes from 192.168.43.80: icmp_seq=2 ttl=64 time=0.026 ms
64 bytes from 192.168.43.80: icmp_seq=4 ttl=64 time=0.025 ms
--- 192.168.43.80 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3082ms
rtt min/avg/max/mdev = 0.025/0.032/0.054/0.012 ms

Обновление пакетов и установки дополнительных утилит

После этого перейдем к установке необходимых утилит и пакетов на каждом из узлов. Указанные действия применяем для каждого узла, если не указано обратное. Для начала обновим список пакетов и сами системы:

sudo apt-get update && apt-get upgrade -y

Теперь установим пакеты: 

sudo apt-get install curl apt-transport-https git iptables-persistent -y

Файл подкачки

Kubernetes не запустится с файлом подкачки, его нужно отключить: 

sudo swapoff -a

Чтобы он не включился после перезагрузки, необходимо изменить файл fstab:

sudo nano /etc/fstab

Закомментируем эту строку с помощью # :

# /swap.img      none    swap    sw      0       0

Ядро

Загрузим дополнительные модули ядра:

sudo nano /etc/modules-load.d/k8s.conf

В k8s.conf добавим 2 строки:

br_netfilter
overlay

Теперь добавим модули в ядро:

sudo modprobe br_netfilter
sudo modprobe overlay

Проверим успешность действий:

sudo lsmod | egrep "br_netfilter|overlay"

Должен быть примерно такой вывод:

overlay               147456  0
br_netfilter           28672  0
bridge                299008  1 br_netfilter

Создадим конфигурационный файл для обработки трафика через bridge в netfilter:

sudo nano /etc/sysctl.d/k8s.conf

В файл вносим 2 строки:

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

Применим настройки:

sudo sysctl --system

Установка Docker

Прописываем в консоли:

sudo apt-get install docker docker.io -y

Подронее о том, как установить Docker на Ubuntu, читайте здесь

После установки включаем автозапуск и перезапускаем Docker:

sudo systemctl enable docker
sudo systemctl restart docker

Установка Kubernetes

Добавим GPG-ключ:

sudo curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

Теперь создадим файл с настройкой репозитория:

sudo nano /etc/apt/sources.list.d/kubernetes.list

И добавим в него такую запись:

deb https://apt.kubernetes.io/ kubernetes-xenial main

Используем последнюю версию репозитория для Ubuntu: Kubernetes-xenial. Это версия для Ubuntu 16.04, возможно в скором времени появится версия для Ubuntu 22.04 — jammy.

Обновим список пакетов apt-get:

sudo apt-get update

Установим пакеты:

sudo apt-get install kubelet kubeadm kubectl

Установка завершена. Можем проверить версию клиента Kubernetes:

sudo kubectl version --client 

Вывод:

Client Version: version.Info{Major:"1", Minor:"24", GitVersion:"v1.24.2", GitCommit:"f66044f4361b9f1f96f0053dd46cb7dce5e990a8", GitTreeState:"clean", BuildDate:"2022-06-15T14:22:29Z", GoVersion:"go1.18.3", Compiler:"gc", Platform:"linux/amd64"}

Настройка и создание кластера 

Мастер-нода

Выполняем команду для начальной настройки и подготовки узла:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

Ключ --pod-network-cidr задает адрес внутренней подсети. 10.244.0.0/16 — значение по умолчанию.

Процесс займет несколько минут. По его завершению в консоли появится такая запись:

Then you can join any number of worker nodes by running the following on each as root:
kubeadm join 192.168.43.80:6443 --token f7sihu.wmgzwxkvbr8500al \
    --discovery-token-ca-cert-hash sha256:6746f66b2197ef496192c9e240b31275747734cf74057e04409c33b1ad280321

Данную команду сохраняем для подключения рабочих нод к мастер-ноде.

Создадим переменную окружения KUBECONFIG:

export KUBECONFIG=/etc/kubernetes/admin.conf

Также выполним установку CNI (сетевой интерфейс контейнеров):

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

Рабочая нода

На рабочей ноде выполняем команду kubeadm join, полученную при настройке мастер-ноды. После этого введем на мастер-ноде:

sudo kubectl get nodes

Вывод:

NAME                 STATUS      ROLES                        AGE    VERSION
master.local         Ready      control-plane,master   10m    v1.24.2
worker.local         Ready      <none>                        79s    v1.24.2

Теперь кластер развернут и готов к работе.

Подготовили для вас выгодные тарифы на облако

Заключение

Мы рассмотрели, как создать кластер Kubernetes и развернуть кластер Kubernetes локально. А если вы хотите быстро получить уже настроенный и полностью готовый к работе кластер, воспользуйтесь управляемым сервисом Kubernetes от Timeweb Cloud.

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
21 июля 2022 г.
3415
8 минут чтения
Средний рейтинг статьи: 5
Комментарии 2
aleksandrvolk
aleksandrvolk
10.11.2023, 00:17

Чтобы продавать ноды клиентам, достаточно развернуть на железном сервер и можно продавать? Или есть нюансы?

Команда Timeweb Cloud
Команда Timeweb Cloud
10.11.2023, 05:55

В статье мы разворачиваем Кубернетес для тестовых/учебных целей, всего с двумя узлами. Если вы хотите предоставлять K8s как сервис клиентам, потребуется не только установленный кластер — для таких целей пишутся большие комплексные системы управления доступа, автоматизация развёртывания кластеров и так далее. Так что нюансы будут точно :)

Погружение можно начать с документации Kubernetes, а дальше искать дополнительную информацию в сети.