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

Как настроить кластер Kubernetes с Kubeadm в Ubuntu 22.04


На этой странице

  1. Предпосылки
  2. Настройка систем
  3. Настройка файла /etc/hosts
  4. Настройка брандмауэра UFW
  5. Включить модули ядра и отключить SWAP
  6. Установка среды выполнения контейнера: Containerd
  7. Установка пакета Kubernetes
  8. Установка подключаемого модуля CNI (контейнерного сетевого интерфейса): Flannel
  9. Инициализация плоскости управления Kubernetes
  10. Добавление рабочих узлов в Kubernetes
  11. Заключение

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

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

В этом руководстве вы настроите кластер Kubernetes, выполнив следующие действия:

  1. Настройка систем, в том числе настройка файла /etc/hosts, включение модулей ядра и отключение SWAP.
  2. Настройка брандмауэра UFW путем добавления некоторых портов, необходимых для Kubernetes.
  3. Установка containerd в качестве среды выполнения контейнера для Kubernetes.
  4. Установка пакетов Kubernetes, таких как kubelet, kubeadm и kubectl.
  5. Установка сетевого подключаемого модуля Flannel для модулей Kubernetes.
  6. Инициализация одного узла плоскости управления и добавление двух рабочих узлов.

Предпосылки

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

  • Три или более серверов Ubuntu 22.04.
  • Пользователь без полномочий root с правами root/администратора.

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

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

  • Настройте правильный файл /etc/hosts: каждое имя хоста сервера должно быть преобразовано в правильный IP-адрес. Это можно сделать несколькими способами, но самый простой и удобный — использовать файл /etc/hosts на всех серверах.
  • Настройка брандмауэра UFW. В производственной среде всегда рекомендуется включать брандмауэр как на уровне управления, так и на рабочих узлах.
  • Включить модули ядра. Kubernetes требовал включения некоторых модулей ядра в системе Linux. Модуль ядра \overlay\ и \br_netfilter\ требуется, чтобы позволить iptables видеть трафик моста.
  • Отключить SWAP: это обязательно, вы должны отключить SWAP на всех узлах Kubernetes, как на уровне управления, так и на рабочих узлах. В противном случае служба kubelet будет работать с проблемами.

Настройка файла /etc/hosts

На этом первом шаге вы настроите системное имя хоста и файл /etc/hosts на всех ваших серверах. Для этой демонстрации мы будем использовать следующие серверы.

Hostname    IP Address        Used as
--------------------------------------------
cplane1     192.168.5.10      control-plane
worker1     192.168.5.25      worker node
worker2     192.168.5.26      worker node

Запустите следующую команду hostnamectl ниже, чтобы настроить системное имя хоста на каждом сервере.

Для узла плоскости управления выполните следующую команду, чтобы установить системное имя хоста \cplane1\.

sudo hostnamectl set-hostname cplane1

Для рабочих узлов Kubernetes выполните следующую команду hostnamectl.

# setup hostname worker1
sudo hostnamectl set-hostname worker1

# setup hostname worker2
sudo hostnamectl set-hostname worker2

Затем измените файл /etc/hosts на всех серверах с помощью следующей команды.

sudo nano /etc/hosts

Добавьте следующую конфигурацию в файл. Убедитесь, что каждое имя хоста указывает на правильный IP-адрес.

192.168.5.10 cplane1
192.168.5.25 worker1
192.168.5.26 worker2

Сохраните и закройте файл, когда закончите.

Наконец, если вы запустите команду ping для каждого имени хоста, вам будет указан правильный IP-адрес, указанный в файле /etc/hosts.

ping cplane1 -c3
ping worker1 -c3
ping worker2 -c3

Настройка брандмауэра UFW

Kubernetes требует, чтобы некоторые порты были открыты во всех ваших системах. В системе Ubuntu по умолчанию в качестве брандмауэра по умолчанию используется брандмауэр UFW. Вы добавите несколько портов в брандмауэр UFW для развертывания Kubernetes.

Для плоскости управления Kubernetes вам необходимо открыть следующие порты:

Protocol  Direction Port Range  Purpose Used By
-----------------------------------------------
TCP       Inbound   6443        Kubernetes API server All
TCP       Inbound   2379-2380   etcd server client API  kube-apiserver, etcd
TCP       Inbound   10250       Kubelet API Self, Control plane
TCP       Inbound   10259       kube-scheduler  Self
TCP       Inbound   10257       kube-controller-manager Self

Для рабочих узлов Kubernetes необходимо открыть следующие порты:

Protocol  Direction Port Range  Purpose Used By
--------------------------------------------------
TCP       Inbound   10250       Kubelet API Self, Control plane
TCP       Inbound   30000-32767 NodePort Services†  All

Перед добавлением правил UFW обязательно добавьте приложение OpenSSH в свой брандмауэр с помощью приведенной ниже команды. Затем включите брандмауэр UFW. При запросе подтверждения введите \y\, чтобы включить и запустить брандмауэр UFW.

sudo ufw allow "OpenSSH"
sudo ufw enable

На узле плоскости управления \cplane1\ выполните следующую команду ufw, чтобы открыть порты.

sudo ufw allow 6443/tcp
sudo ufw allow 2379:2380/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 10259/tcp
sudo ufw allow 10257/tcp

sudo ufw status

На рабочих узлах \worker1\ и \worker2\ выполните следующую команду ufw, чтобы открыть некоторые порты.

sudo ufw allow 10250/tcp
sudo ufw allow 30000:32767/tcp

sudo ufw status

Включить модули ядра и отключить SWAP

Kubernetes требовал, чтобы модули ядра \overlay\ и \br_netfilter\ были включены на всех серверах. Это позволит iptbales видеть мостовой трафик. Также вам нужно будет включить переадресацию портов и отключить SWAP.

Запустите следующую команду, чтобы включить модули ядра \overlay\ и \br_netfilter\.

sudo modprobe overlay
sudo modprobe br_netfilter

Чтобы сделать его постоянным, создайте файл конфигурации в \/etc/modules-load.d/k8s.conf\. Это позволит системам Linux включать модули ядра во время загрузки системы.

cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF

Затем создайте необходимые параметры systemctl с помощью следующей команды.

cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF

Чтобы применить новую конфигурацию sysctl без перезагрузки, используйте следующую команду. Вы должны получить список параметров sysctl по умолчанию в вашей системе и убедиться, что вы получили параметры sysctl, которые вы только что добавили в файл \k8s.conf\.

sudo sysctl --system

Чтобы отключить SWAP, вам нужно будет прокомментировать конфигурацию SWAP в файле \/etc/fstab\. Это можно сделать с помощью одной команды через sed (редактор потока) или вручную отредактировав файл /etc/fstab.

sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

или

sudo nano /etc/fstab

Теперь отключите SWAP в текущем сеансе с помощью приведенной ниже команды. Затем убедитесь, что SWAP отключен с помощью команды \free -m\. Вы должны увидеть, что SWAP имеет значения «0», что означает, что теперь он отключен.

sudo swapoff -a
free -m

Установка среды выполнения контейнера: Containerd

Чтобы настроить кластер Kubernetes, необходимо установить среду выполнения контейнера на всех серверах, чтобы могли работать поды. Для развертываний Kubernetes можно использовать несколько сред выполнения контейнеров, таких как containerd, CRI-O, Mirantis Container Runtime и Docker Engine (через cri-dockerd).

В этой демонстрации мы будем использовать «containerd» в качестве контейнера для нашего развертывания Kubernetes. Итак, вы установите containerd на все серверы, панель управления и рабочие узлы.

Есть несколько способов установить containerd, самый простой из них — использовать готовые бинарные пакеты, предоставленные репозиторием Docker.

Теперь выполните следующую команду, чтобы добавить репозиторий Docker и ключ GPG.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Обновите и обновите индекс пакета в вашей системе Ubuntu, используя приведенную ниже команду.

sudo apt update

Теперь установите пакет containerd с помощью приведенной ниже команды apt. И начнется установка.

sudo apt install containerd.io

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

sudo systemctl stop containerd

Создайте резервную копию конфигурации containerd по умолчанию и создайте новую, используя следующую команду.

sudo mv /etc/containerd/config.toml /etc/containerd/config.toml.orig
sudo containerd config default > /etc/containerd/config.toml

Теперь измените файл конфигурации containerd \/etc/containerd/config.toml\, используя следующую команду.

sudo nano /etc/containerd/config.toml

Измените значение драйвера cgroup \SystemdCgroup=false\ на \SystemdCgroup=true\. Это включит драйвер systemd cgroup для среды выполнения контейнера containerd.

[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
  ...
  [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
    SystemdCgroup = true

Когда вы закончите, сохраните и закройте файл.

Затем выполните следующую команду systemctl, чтобы запустить службу containerd.

sudo systemctl start containerd

Наконец, проверьте и подтвердите службу containerd, используя приведенную ниже команду. Вы должны увидеть, что containerd включен и будет запускаться автоматически при загрузке системы. И текущий статус службы containerd работает.

sudo systemctl is-enabled containerd
sudo systemctl status containerd

Установка пакета Kubernetes

Вы установили среду выполнения контейнера containerd. Теперь вы установите пакеты Kubernetes на все свои системы Ubuntu. Сюда входят kubeadm для начальной загрузки кластера Kubernetes, kubelet — основной компонент кластера Kubernetes и kubectl — утилита командной строки для управления кластером Kubernetes.

В этом примере мы будем устанавливать пакеты Kubernetes, используя репозиторий, предоставленный Kubernetes. Итак, вы добавите репозиторий Kubernetes во все свои системы Ubuntu.

Запустите следующую команду apt, чтобы установить некоторые зависимости пакета.

sudo apt install apt-transport-https ca-certificates curl -y

Теперь добавьте репозиторий Kubernetes и ключ GPG, используя следующую команду.

sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list

Обновите и обновите репозиторий Ubuntu и индекс пакетов.

sudo apt update

Когда обновление будет завершено, установите пакеты Kubernetes с помощью следующей команды apt. Введите Y, чтобы подтвердить установку, и нажмите ENTER, чтобы продолжить, и установка начнется.

sudo apt install kubelet kubeadm kubectl

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

sudo apt-mark hold kubelet kubeadm kubectl

Установка подключаемого модуля CNI (контейнерный сетевой интерфейс): Flannel

Kubernetes поддерживает различные подключаемые модули Container Network, такие как AWS VPC для Kubernetes, Azure CNI, Cilium, Calico, Flannel и многие другие. В этом примере мы будем использовать Flannel в качестве подключаемого модуля CNI для развертывания Kubernetes. А для этого вам нужно было установить бинарный файл Flannel на узлы Kubernetes.

Выполните приведенную ниже команду, чтобы создать новый каталог \/opt/bin\. Затем загрузите в него бинарный файл Flannel.

mkdir -p /opt/bin/
sudo curl -fsSLo /opt/bin/flanneld https://github.com/flannel-io/flannel/releases/download/v0.19.0/flanneld-amd64

Теперь сделайте двоичный файл flanneld исполняемым, изменив разрешение файла с помощью приведенной ниже команды. Этот двоичный файл flanneld будет выполняться автоматически, когда вы настраиваете сетевое дополнение Pod.

sudo chmod +x /opt/bin/flanneld

Инициализация плоскости управления Kubernetes

Вы выполнили все зависимости и требования для развертывания кластера Kubernetes. Теперь вы запустите кластер Kubernetes, впервые инициализировав узел Control Plane. В этом примере плоскость управления Kubernetes будет установлена на сервере \cplane1\ с IP-адресом \192.168.5.10\.

Перед инициализацией узла Control Plane выполните следующую команду, чтобы проверить, включены ли модули ядра br_netfilter. Если вы получите вывод команды, это означает, что модуль br_netfilter включен.

lsmod | grep br_netfilter

Затем выполните следующую команду, чтобы загрузить образы, необходимые для кластера Kubernetes. Эта команда загрузит все образы контейнеров, необходимые для создания кластера Kubernetes, такие как coredns, сервер kube-api и т. д., kube-controller, kube-proxy и образ контейнера pause.

sudo kubeadm config images pull

После завершения загрузки выполните следующую команду \kubeadm init\, чтобы инициализировать кластер Kubernetes на сервере \cplane1\. Этот узел \cplane1\ будет автоматически выбран в качестве плоскости управления Kubernetes, поскольку это первая инициализация кластера.

  • Кроме того, в этом примере мы указываем в качестве сети для модулей значение \10.244.0.0/16\, которое является диапазоном сети по умолчанию для подключаемого модуля Flannel CNI.
  • --apiserver-advertise-address\ определяет, на каком IP-адресе будет работать сервер API Kubernetes. В этом примере используется внутренний IP-адрес 192.168.5.10\.
  • Для параметра \--cri-socket\ здесь мы указываем сокет CRI для сокета среды выполнения контейнера, который доступен на \/run/containerd/containerd.sock\ . Если вы используете другую среду выполнения контейнера, вы должны изменить путь к файлу сокета или можете просто удалить эту опцию \--cri-socket\, потому что kubeadm автоматически обнаружит сокет среды выполнения контейнера.

sudo kubeadm init --pod-network-cidr=10.244.0.0/16 \
--apiserver-advertise-address=192.168.5.10 \
--cri-socket=unix:///run/containerd/containerd.sock

Ниже приведен результат инициализации кластера Kubernetes на сервере \cplane1\.

Когда инициализация завершена, вы можете увидеть сообщение, такое как «Ваша плоскость управления Kubernetes успешно инициализирована!» с некоторыми важными выходными сообщениями для настройки учетных данных Kubernetes и развертывания сетевой надстройки Pod, как добавить рабочий узел в свой кластер Kubernetes.

Прежде чем вы начнете использовать кластер Kubernetes, вам необходимо настроить учетные данные Kubernetes. Выполните следующую команду, чтобы настроить учетные данные Kubernetes.

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

Теперь вы можете использовать команду \kubectl\ для взаимодействия с вашим кластером Kubernetes. Выполните следующую команду \kubectl\, чтобы проверить информацию о кластере Kubernetes. И вы должны увидеть плоскость управления Kubernetes и работающие ядра.

kubectl cluster-info

Чтобы получить полную информацию о вашем Kubernetes, вы можете использовать опцию дампа — так \kubectl cluster-info dump\.

После запуска плоскости управления Kubernetes выполните следующую команду, чтобы установить сетевой подключаемый модуль Flannel Pod. Эта команда автоматически запустит бинарный файл \flanneld\ и запустит некоторые фланелевые стручки.

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

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

kubectl get pods --all-namespaces

Добавление рабочих узлов в Kubernetes

После инициализации плоскости управления Kubernetes на сервере cplane1 вы добавите рабочие узлы worker1 и worker2 в кластер Kubernetes.

Перейдите на сервер «worker1» и выполните приведенную ниже команду «kubeadm join», чтобы добавить «worker1» в кластер Kubernetes. У вас могут быть другие токен и ca-cert-hash, вы можете увидеть подробную информацию об этой информации в выходном сообщении при инициализации узла Control Plane.

kubeadm join 192.168.5.10:6443 --token po3sb1.oux4z76nwb0veuna \
--discovery-token-ca-cert-hash sha256:f5068150fabaf85f3d04e19a395c60d19298ba441e2d9391e20df3267ea6cd28

В следующем выводе видно, что к серверу worker1 присоединяется кластер Kubernetes.

Затем перейдите на сервер «worker2» и запустите команду «kubeadm join», чтобы добавить «worker2» в кластер Kubernetes.

kubeadm join 192.168.5.10:6443 --token po3sb1.oux4z76nwb0veuna \
--discovery-token-ca-cert-hash sha256:f5068150fabaf85f3d04e19a395c60d19298ba441e2d9391e20df3267ea6cd28

Вы увидите такое же выходное сообщение, когда процесс завершится.

Теперь вернитесь к серверу Control Plane cplane1\ и выполните следующую команду, чтобы проверить все запущенные модули в кластере Kubernetes. Вы должны увидеть дополнительные модули на каждом компоненте Kubernetes.

kubectl get pods --all-namespaces

Наконец, проверьте и подтвердите все доступные узлы в кластере Kubernetes с помощью приведенной ниже команды kubectl\. Вы должны увидеть, что сервер cplane1\ работает в качестве плоскости управления Kubernetes, а сервер \worker1\ и серверы worker2 работают как рабочий узел.

kubectl get nodes -o wide

Заключение

В рамках этого руководства вы завершили развертывание кластера Kubernetes с тремя узлами серверов Ubuntu 22.04. Кластер Kubernetes работает с одной плоскостью управления и двумя рабочими узлами. Он работает с containerd в качестве среды выполнения контейнера для вашего кластера Kubernetes и с сетевым плагином Flannel для сетевого подключения модулей в вашем кластере. Вы полностью настроили кластер Kubernetes, вы можете начать развертывание своих приложений в кластере Kubernetes или попробовать установить панель управления Kubernetes, чтобы узнать больше о вашей среде Kubernetes.