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

Как установить кластер Kubernetes на CentOS 8


Процесс установки Kubernetes Cluster в CentOS 8 почти аналогичен процессу в CentOS 7 (который вы можете пройти здесь), но процесс здесь имеет несколько изменений. Эти изменения в основном касаются установки Docker.

Начиная с CentOS 8 (и расширения RHEL 8), docker теперь изначально заменен на podman и buildah — инструменты от Redhat. Фактически, пакет Docker теперь удален из репозитория пакетов по умолчанию.

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

В этой статье мы рассмотрим процесс установки Kubernetes на платформе CentOS 8, работающей на Docker-CE (Сообщество издание). В следующей статье мы также проведем аналогичную установку, используя podman для наших контейнеров.

Предварительные условия

  1. Три сервера под управлением CentOS 8 — 1 главный узел и 2 рабочих узла.
  2. Рекомендуется, чтобы ваши узлы имели как минимум 2 процессора с 2 ГБ ОЗУ или более на каждом компьютере. Это не строгое требование, но оно во многом обусловлено потребностями приложения, которое вы собираетесь запустить.
  3. Подключение к Интернету на всех ваших узлах. Мы будем получать пакеты Kubernetes и docker из репозитория. Точно так же вам необходимо убедиться, что менеджер пакетов DNF установлен по умолчанию и может получать пакеты удаленно.
  4. Все ваши узлы также должны иметь возможность подключаться друг к другу либо в частной, либо в общедоступной сети, в зависимости от того, какая из них доступна.
  5. Вам также понадобится доступ к учетной записи с правами sudo или root. В этом уроке я буду использовать свою учетную запись root.

Меры предосторожности

Большинство узлов обычно имеют уникальные MAC адреса, однако в некоторых уникальных случаях некоторые виртуальные машины могут иметь одинаковые MAC-адреса. Поэтому рекомендуется убедиться, что Product_UUID и MAC адрес не идентичны ни на одном из узлов.

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

Проверить MAC-адрес сетевого интерфейса и сравнить его.

ip link

Чтобы проверить product_uuid и сравнить, выполните следующую команду.

cat /sys/class/dmi/id/product_uuid 

Логическая архитектура

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

Главный узел. Этот компьютер обычно действует как плоскость управления и запускает базу данных кластера и сервер API (с которым взаимодействует интерфейс командной строки kubectl).

Наш трехузловой Кластер Kubernetes будет выглядеть примерно так:

Установка кластера Kubernetes на мастер-ноде

Чтобы Kubernetes работал, вам понадобится механизм контейнеризации. Как уже упоминалось, мы будем использовать Docker-CE.

Следующие учреждения будут выполняться на мастер-узле CentOS 8.

Шаг 1. Подготовьте имя хоста, брандмауэр и SELinux.

На своем главном узле CentOS 8 задайте имя хоста системы и обновите DNS в файле /etc/hosts.

hostnamectl set-hostname master-node
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

Затем проверьте связь с worker-node-1 и worker-node-2, чтобы проверить, правильно ли работает обновленный файл хоста, с помощью команды ping.

ping 192.168.0.48
ping 192.168.0.49

Затем отключите Selinux, поскольку это необходимо, чтобы разрешить контейнерам доступ к файловой системе хоста, что необходимо для сетей модулей и других служб.

setenforce 0

Установка для setenforce значения 0 фактически устанавливает для SELinux разрешающий режим, что фактически отключает SELinux до следующей перезагрузки. Чтобы полностью отключить его, используйте команду ниже и перезагрузитесь.

sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
reboot

Kubernetes использует различные порты для связи и доступа, и эти порты должны быть доступны для Kubernetes и не ограничены брандмауэром.

Настройте правила брандмауэра для портов.

firewall-cmd --permanent --add-port=6443/tcp
firewall-cmd --permanent --add-port=2379-2380/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10251/tcp
firewall-cmd --permanent --add-port=10252/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --reload
modprobe br_netfilter
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Шаг 2. Установите Docker-CE на CentOS 8.

Сначала вам нужно будет добавить репозиторий Docker, поскольку его больше нет в списке пакетов по умолчанию, с помощью следующей команды dnf config-manager.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Также установите пакет containerd.io, который доступен в виде демона, который управляет полным жизненным циклом контейнера своей хост-системы: от передачи и хранения изображений до выполнения и контроля контейнера, низкоуровневого хранилища до сетевых подключений и т. д. .

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Теперь установите последнюю версию пакета docker-ce.

dnf install docker-ce

Теперь вы можете включить и запустить службу Docker.

systemctl enable docker
systemctl start docker

Шаг 3. Установите Kubernetes (Kubeadm) на CentOS 8.

Далее вам нужно будет добавить репозитории Kubernetes вручную, поскольку они не устанавливаются по умолчанию в CentOS 8.

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

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

Kubeadm также поддерживает другие функции жизненного цикла кластера, такие как обновления, понижение версии и управление токенами начальной загрузки. Kubeadm также удобен для интеграции с другими инструментами оркестрации, такими как Ansible и Terraform.

Теперь, когда репозиторий пакетов готов, вы можете установить пакет kubeadm.

dnf install kubeadm -y 

После успешного завершения установки включите и запустите службу.

systemctl enable kubelet
systemctl start kubelet

Шаг 4. Создайте мастер плоскости управления с помощью kubeadm

Главный Kubernetes, который действует как плоскость управления для кластера, запускает несколько критически важных служб, необходимых для кластера. Таким образом, в процессе инициализации будет выполнен ряд предварительных проверок, чтобы убедиться, что машина готова к запуску Kubernetes. Эти предварительные проверки выдают предупреждения и завершают работу при ошибках. Затем kubeadm init загружает и устанавливает компоненты плоскости управления кластером.

Теперь пришло время инициализировать мастер Kubernetes, но перед этим вы должны отключить подкачку, чтобы запустить команду «kubeadm init».

swapoff -a

Инициализация мастера Kubernetes — это полностью автоматизированный процесс, который управляется командой «kubeadm init», как показано ниже.

kubeadm init

Затем скопируйте следующую команду и сохраните ее где-нибудь, так как нам потребуется позже запустить эту команду на рабочих узлах.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  \ --discovery-token-ca-cert-hash ha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

Совет. Иногда приведенная выше команда может выдавать ошибки в отношении переданных аргументов, поэтому, чтобы избежать ошибок, необходимо удалить символ '\'. и ваша последняя команда будет выглядеть так.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5 –discovery token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf7

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

Чтобы использовать root, запустите:

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

Чтобы использовать пользователя с поддержкой sudo, выполните:

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

Теперь убедитесь, что команда kubectl активирована.

kubectl get nodes

В этот момент вы увидите статус мастер-ноды «Неготов». Это связано с тем, что нам еще предстоит развернуть сеть модулей в кластере.

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

Шаг 5. Настройте сеть Pod

Развертывание сетевого кластера — это очень гибкий процесс, зависящий от ваших потребностей, и существует множество доступных вариантов. Поскольку мы хотим максимально упростить установку, мы будем использовать плагин Weavenet, который не требует какой-либо настройки или дополнительного кода и предоставляет один IP-адрес для каждого модуля, что очень удобно для нас. Если вы хотите увидеть больше вариантов, пожалуйста, проверьте здесь.

Эти команды будут важны для настройки сети модуля.

export kubever=$(kubectl version | base64 | tr -d '\n')
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$kubever"

Теперь, если вы проверите статус вашего мастер-узла, он должен быть «Готов».

kubectl get nodes

Затем мы добавляем в кластер рабочие узлы.

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

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

Шаг 1. Подготовьте имя хоста, брандмауэр и SELinux.

Сначала задайте имя хоста на своих worker-node-1 и worker-node-2, а затем добавьте записи хоста в файл /etc/hosts. > файл.

hostnamectl set-hostname 'node-1'
cat <<EOF>> /etc/hosts
192.168.0.47 master-node
192.168.0.48 node-1 worker-node-1
192.168.0.49 node-2 worker-node-2
EOF

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

192.168.0.47

Затем отключите SElinux и обновите правила брандмауэра.

setenforce 0
sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
firewall-cmd --permanent --add-port=6783/tcp
firewall-cmd --permanent --add-port=10250/tcp
firewall-cmd --permanent --add-port=10255/tcp
firewall-cmd --permanent --add-port=30000-32767/tcp
firewall-cmd --reload
echo '1' > /proc/sys/net/bridge/bridge-nf-call-iptables

Шаг 2. Настройте Docker-CE и репозиторий Kubernetes.

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

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Затем добавьте пакет containerd.io.

dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

Установив эти два пакета, установите последнюю версию docker-ce.

dnf install docker-ce

Включите и запустите службу докеров.

systemctl enable docker
systemctl start docker

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

cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
EOF

Шаг 3. Установите Kubeadm на CentOS 8.

Теперь, когда репозиторий пакетов готов, вы можете установить kubeadm.

dnf install kubeadm -y 

Запустите и включите службу.

systemctl enable kubelet
systemctl start kubelet

Шаг 4. Присоедините рабочий узел к кластеру Kubernetes.

Теперь для присоединения к кластеру нам нужен токен, сгенерированный kubeadm init. Вы можете скопировать и вставить его в свои node-1 и node-2, если вы его где-то скопировали.

kubeadm join 192.168.0.47:6443 --token nu06lu.xrsux0ss0ixtnms5  --discovery-token-ca-cert-hash sha256:f996ea35r4353d342fdea2997a1cf8caeddafd6d4360d606dbc82314683478hjmf78

Как предложено в последней строке, вернитесь к своему главному узлу и проверьте, присоединились ли рабочие узел-1 и рабочий узел-2 к кластер с помощью следующей команды.

kubectl get nodes

Если все шаги выполнены успешно, вы должны увидеть node-1 и node-2 в состоянии готовности на master-node. На этом этапе вы успешно развернули кластер Kubernetes на CentOS 8.

Рекомендуется к прочтению: как развернуть Nginx в кластере Kubernetes

Некоторые ограничения

Кластер, который мы создали здесь, имеет один главный узел, поэтому в случае сбоя главного узла ваш кластер может потерять данные и, возможно, его придется воссоздать с нуля.

По этой причине я рекомендую настройку высокой доступности.