Установка и настройка кластера Kubernetes в Ubuntu Linux 22.04

Давайте освежим как развернуть кластер Kubernetes в Ubuntu Linux 22.04 и у меня как раз появилось две небольшие (а главное дешевые) VPS в Adman.

Шаг 1. Подготовка

1.1. Убедитесь, что у вас есть доступ к компьютеру с операционной системой Ubuntu Linux.

~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.5 LTS
Release:        22.04
Codename:       jammy

1.2. Подготовьте необходимое оборудование: минимум один компьютер для мастера и один для узла (можно использовать виртуальные машины).

Установка базовых пакетов:

# apt-get install aptitude curl mc

Установите имя хоста в файлах:

  • /etc/hostname
  • /etc/hosts

Минимальные требования 2 ядра и 2 гигабайта оперативной памяти. Так-же обязательно отключите своп в /etc/fstab и выгрузите его содержимое в оперативную память.

# swapoff -a

1.3. Подготовка системы и сетевых параметров.

В файл /etc/modules-load.d/containerd.conf добавляем загрузку двух модулей:

overlay
br_netfilter

В файле /etc/sysctl.conf добавляем или изменяем параметры:

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

Шаг 2. Обновление системы

2.1. Откройте терминал и выполните команду для обновления списка пакетов и обновите установленные пакеты до последних версий:

# apt-get update && apt-get upgrade

Шаг 3. Установка Docker

Обратите внимание, что современные версии Kubernetes не поддерживают стандартный Docker-engine и вам лучше использовать CRI-O.

Установка CRI-O

3.1. Экспортируем требуемую версию Kubernetes и CRI-O:

# KUBERNETES_VERSION=v1.32
# CRIO_VERSION=v1.32

3.2. Подключаем репозиторий:

# curl -fsSL https://download.opensuse.org/repositories/isv:/cri-o:/stable:/$CRIO_VERSION/deb/Release.key | gpg --dearmor -o /etc/apt/keyrings/cri-o-apt-keyring.gpg
# echo "deb [signed-by=/etc/apt/keyrings/cri-o-apt-keyring.gpg] https://download.opensuse.org/repositories/isv:/cri-o:/stable:/$CRIO_VERSION/deb/ /" | tee /etc/apt/sources.list.d/cri-o.list

3.3. Устанавливаем необходимый пакет:

# apt-get update
# apt-get install -y cri-o

3.4. Запускаем сервис и проверяем, что все работает.


# systemctl start crio.service
# systemctl enable crio.service

Для работы с CRI-O используется утилита crictl и это бинарный файл который можно скачать на GitHub например по адресу https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.33.0/crictl-v1.33.0-linux-amd64.tar.gz и разместить его в каталог /usr/local/bin.

Проверяем, что служба работает:

# crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                ATTEMPT             POD ID              POD                 NAMESPACE

Установка Docker Engine

Но если вам так хочется заморачиваться с отдельным уровнем абстракции, то установим Docker-engine. Но два движка лучше не ставить!

3.1. Установите необходимые зависимости:

# apt install -y apt-transport-https ca-certificates curl software-properties-common

3.2. Добавьте ключ GPG репозитория Docker:

# curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

3.3. Добавьте репозиторий Docker в список источников:

# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Repository: 'deb [arch=amd64] https://download.docker.com/linux/ubuntu jammy stable'

3.4. Обновите список пакетов:

# apt update

3.5. Установите Docker:

# apt install -y docker-ce

Шаг 4. Установка Kubernetes

4.1. Добавьте ключ GPG репозитория Kubernetes:

# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -
# curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.30/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

4.2. Добавьте репозиторий Kubernetes в список источников:

# echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.30/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

4.3. Обновите список пакетов:

# apt-get update

4.4. Установите kubeadm, kubelet и kubectl:

# apt install -y kubeadm kubelet kubectl

Шаг 5. Инициализация кластера

5.1. Инициализируйте кластер с помощью kubeadm:

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

5.2. Следуйте инструкциям на экране для настройки kubectl для работы с кластером.

Экспортируем файл конфигурации:

# export KUBECONFIG=/etc/kubernetes/admin.conf

Проверяем доступность управляющего узла:

# kubectl get nodes

Шаг 6. Установка сети для контейнеров

6.1. Установите плагин сети для Kubernetes, например, Calico:

# kubectl apply -f https://dev.hsrn.nyu.edu/hsrn-projects/kubernetes-bare-metal/-/raw/0717ca13879fe1c2ce60759cd4ef20f05edbf5eb/k8s/calico.yml

Шаг 7. Добавление узлов в кластер

7.1. На каждом узле выполните команду, полученную при инициализации кластера, чтобы добавить узлы в кластер.

# kubeadm join 185.173.93.43:6443 --token akm4ce.xxxxxxxx --discovery-token-ca-cert-hash sha256:xxxxxxxx

Запрос токена для добавления узла в кластер

$ kubeadm token create --print-join-command

Шаг 7.1 Разрешаем сетевой доступ к кластеру

6443/TCP:Kubernetes API server. This is the primary entry point for all administrative and client interactions with the cluster.
2379-2380/TCP: etcd server client API. Used by the API server to communicate with etcd, the distributed key-value store that holds the cluster's configuration data.
10250/TCP:Kubelet API. Used by the API server and other components to communicate with the Kubelet agent running on each node.
10259/TCP:kube-scheduler. Used by the scheduler to watch for new pods and assign them to nodes.
10257/TCP:kube-controller-manager. Used by the controller manager to run various controllers that manage the cluster's state.
  • 10250/TCP: Kubelet API (read-only). Allows access to Kubelet’s read-only endpoints.
  • 30000-32767/TCP: NodePort Services. This is the default range for NodePort services, which expose services on a specific port on each worker node, making them accessible from outside the cluster.
  • 80/TCP or 443/TCP:Commonly used for exposing applications via Ingress controllers or LoadBalancer services.

Шаг 8. Проверка кластера

8.1. Проверьте состояние кластера с помощью команды:

# kubectl get nodes

8.1 Убедитесь, что все узлы находятся в состоянии Ready.

# kubectl get nodes
NAME                STATUS   ROLES           AGE   VERSION
srv-prod-adman-01   Ready    control-plane   17m   v1.30.13
srv-prod-adman-02   Ready    <none>          51s   v1.30.13

Это общая инструкция по установке и настройке кластера Kubernetes в Ubuntu Linux. В зависимости от вашей конфигурации и требований, могут потребоваться дополнительные шаги или настройки.

Обратите внимание, что для работы с Kubernetes рекомендуется использовать последнюю версию Ubuntu Linux и актуальные версии компонентов Kubernetes.

Похожие записи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Nextcloud — отличное решение для хранения файлов, но управление пользователями вручную становится головной болью при масштабировании. Keycloak позволяет централизовать аутентификацию, обеспечивая безопасность, поддержку MFA (двухфакторной аутентификации) и удобный вход через…

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Интеграция Nextcloud с Keycloak через OpenID Connect: пошаговое руководство по настройке SSO

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда