12.8к
0
0
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
Назад

Как установить кластер Kubernetes с CRI-O в качестве Container Engine

Время чтения 13 минут
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники
12.8к
0
0
Нет времени читать?
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники

Привет! Меня зовут Александр, я работаю в интеграторе решений для обеспечения информационной безопасности. Раньше я уже писал об импортозамещении и аудите безопасности, а сегодня покажу, как установить кластер на движке, который заменил Docker.

Как установить кластер Kubernetes с CRI-O в качестве Container Engine

Начиная с версии 1.20 разработчики Kubernetes объявили, что в будущих релизах не будут поддерживать контейнерный движок Docker. А с версии 1.24 вообще удалили его из списка поддерживаемых движков. К счастью, его отлично заменил CRI-O — легковесная исполняемая среда для контейнеров в Kubernetes.

Технические характеристики для узлов кластера Kubernetes

Я использую ванильный (оригинальный) трехнодовый кластер Kubernetes с версией 1.27.3. Он состоит из одной мастер-ноды и двух рабочих (worker) нод. Технические характеристики серверов:

Настройка ОС

В первую очередь нужно подготовить ОС. Шаги, описанные ниже, выполняйте на всех узлах кластера.

  1. Обновите список пакетов и установите обновления:

    sudo apt update && sudo apt -y upgrade

  2. Выключите SWAP. Kubernetes не поддерживает работу с этим механизмом, поэтому отключить его нужно на постоянной основе. Для этого откройте для редактирования файл fstab:

    sudo nano /etc/fstab

    Добавьте символ # в самое начало строки, которая содержит слово swap.


    Сохраните изменения в файле и закройте из него. После этого перезагрузите сервер:

    sudo reboot
  3. Загрузите сетевые модули overlay и br_netfilter из ядра операционной системы:

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


    И активируйте их:

    sudo modprobe overlay
    sudo modprobe br_netfilter

  4. Примените сетевые настройки:

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


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

    sudo sysctl --system

  5. Для удобства выключите firewall. В ОС семейства Ubuntu по умолчанию используется UFW, поэтому выключите и удалите UFW из автозагрузки:

    sudo systemctl stop ufw && sudo systemctl disable ufw

Теперь ОС готова к установке движка.

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

Пакеты CRI-O отсутствуют в официальных репозиториях ОС Ubuntu, поэтому воспользуйтесь репозиторием от разработчиков ОС openSUSE.

  1. Задайте две переменные:
    a) имя и версию используемого дистрибутива;
    b) версию CRI-O.Напомню, что я использую дистрибутив Ubuntu с версией 22.04:

    OS=xUbuntu_22.04


    Далее задайте версию CRI-O:

    VERSION=1.23

  2. Добавьте репозиторий от разработчиков ОС OpenSUSE:

    echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
  3. Далее добавьте репозиторий, в котором хранятся пакеты с CRI-O:

    echo "deb
    http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable:
    cri-o:/$VERSION/$OS/ /" | sudo tee
    /etc/apt/sources.list.d/devel:kubic:libcontainers:stable:cri-o:$VERSION.list
  4. Скачайте и добавьте официальный GnuPG-ключ от репозитория OpenSUSE:

    curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/$OS/Release.key | sudo apt-key add -
  5. После этого обновите списки пакетов, установите CRI-O и необходимые пакеты:

    sudo apt update && sudo apt install cri-o cri-o-runc cri-tools -y

  6. Добавьте CRI-O в автозагрузку и запустите:

    sudo systemctl enable crio.service && sudo systemctl start crio.service
  7. Проверьте статус службы CRI-O:

    sudo systemctl status crio.service

На скриншоте выше видно, что unit crio.service успешно запустился. Движок CRI-O готов к работе.

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

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

  1. Скачайте и добавьте официальный GnuPG-ключ от официального репозитория Kubernetes:

    curl -fsSL https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-archive-keyring.gpg
  2. Добавьте официальный репозиторий Kubernetes в систему:

    echo "deb [signed-by=/etc/apt/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
  3. Обновите список пакетов, установите утилиты kubelet, kubeadm, kubectl:

    sudo apt update && sudo apt -y install kubelet kubeadm kubectl

  4. После установки всех пакетов добавьте сервис kubelet в автозагрузку:

    sudo systemctl enable kubelet

Теперь у вас есть все пакеты для Kubernetes, и можно запускать мастер-ноду.

Запуск мастер-ноды Kubernetes

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

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

В зависимости от скорости интернет-соединения инициализация кластера может занимать от 2–3 до 10 минут.

После того как команда выполнится, вы увидите в командной строке фразу: Your Kubernetes control-plane has initialized successfully! Это означает, что мастер-нода успешно запущена и кластер инициализирован.

Чтобы начать использовать кластер, нужно скопировать конфигурационный файл с именем config в домашнюю директорию текущего пользователя. Для этого выполните шаги, которые указаны в выводе команды:

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

Убедитесь, что мастер-нода успешно запущена:

kubectl get nodes


В статусе указано Ready — это значит, что нода готова к работе.

Добавление рабочих нод

Чтобы присоединить рабочие ноды, выполните команду, которая была сгенерирована в конце инициализации мастер-ноды. В моем примере команда выглядит следующим образом:

kubeadm join 192.168.199.130:6443 --token sgnjx8.6i227i7ueb9deiyf --discovery-token-ca-cert-hash sha256:3b820a853c9955647e0c44976a4a7efb2c037955691eff75fdd41c603623aac2

Установка плагина flannel в кластер

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

Для установки воспользуйтесь командой:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

Убедитесь, что flannel успешно создан и запущен:

kubectl get po -n kube-flannel


На выходе вы получите полностью рабочий кластер Kubernetes, который использует движок CRI-O и состоит из одной мастер-ноды и двух рабочих нод. Готовый кластер можно использовать для публикации контейнерных приложений.

Комментарии0
Тоже интересно
Комментировать
Поделиться
Скопировать ссылку
Telegram
WhatsApp
Vkontakte
Одноклассники