Установка K8s совместно с Rancher

Данный пост не претендует на полноту предоставленной информации.
Все действия выполняете на свой страх и риск.
Для понимания поста требуются минимальные знания в администрировании Linux.

Сегодня мы рассмотрим наполнение локального Docker Registry, установку кластера Kubernetes и установку Rancher для K8s. Установка Kubernetes будет производится с помощью утилиты Rancher Kubernetes Engine (RKE).

Погнали!

Данная инструкция написана для такой схемы:

Установка K8s совместно с Rancher

Состав компонентов: Сервер установки обновлений (далее СУО) – 1 шт., Мастер нода – 3 шт., Воркер нода – 3 шт.

Начнём настройку хостов, тут все просто. На все хосты установим Docker и отключим swap:

apt install docker docker.io

# или

yum install docker docker.io

swapoff -a

nano /etc/fstab

#/swap.img none swap sw 0 0

Затем добавляем вашего текущего пользователя в группу Docker:

sudo usermod -aG docker <Имя_Вашего_пользователя>

В моём примере Docker не будет использовать авторизацию, поэтому на всех хостах создаем файл daemon.json:

nano /etc/docker/daemon.json

Со следующим содержимым:

{

"data-root": "/opt/docker-data", # В моем случае /opt это примонтированный диск

"insecure-registries" : ["<FQDN_СЕРВЕРА_УСТАНОВКИ_ОБНОВЛЕНИЙ>:5000"]

}

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

systemctl enable docker

systemctl start docker

Теперь необходимо на хостах кубера создать учетную запись rke (для удобства), добавить её в группу docker и настроить доступ с СУО до хостов кубера по SSH ключу.

Теперь загружаем в локальный Docker Registry необходимые образы. Для пакетной загрузки образов можно использовать скрипт из статьи Сохранение и загрузка нескольких Docker образов.

Список образов (так же они будут использоваться в будущих статьях):

Продолжаем настройку СУО. Установим необходимые утилиты, а именно: kubectl, rke и helm. Версии из статьи этих утилит можно взять в репозитории GitHub, папка bin.

Копируем файлы в папку /tmp на СУО и выполняем следующие команды:

cd /tmp

# Установка RKE

cp /tmp/rke_linux-amd64 /usr/local/bin/rke

chmod +x /usr/local/bin/rke

# HELM

tar -zxvf helm-v3.8.2-linux-amd64.tar.gz

mv linux-amd64/helm /usr/local/bin/helm

# KUBECTL

cp /tmp/kubectl /usr/local/bin/

chmod +x /usr/local/bin/kubectl

На СУО создаем папку /opt/rke и в ней создаем файл cluster.yml со следующим содержимым:

nodes:

- address: <FQDN_кубер_мастер_1>

user: rke

role: ['controlplane', 'etcd']

- address: <FQDN_кубер_мастер_2>

user: rke

role: ['controlplane', 'etcd']

- address: <FQDN_кубер_мастер_3>

user: rke

role: ['controlplane', 'etcd']

- address: <FQDN_кубер_воркер_1>

user: rke

role: ['worker']

- address: <FQDN_кубер_воркер_2>

user: rke

role: ['worker']

- address: <FQDN_кубер_воркер_3>

user: rke

role: ['worker']

private_registries:

- url: <АДРЕС_ЛОКАЛЬНОГО_REGISTRY:ПОРТ>

is_default: true

Теперь все готово для установки k8s кластера. Выполняем следующие команды:

cd /opt/rke

rke up

После выполнения rke up в папке /opt/rke появятся два файла (cluster.rkestate и kube_config_cluster.yml). Эти файлы важны и они потребуются для дальнейшей работы с кластером. Теперь давайте проверим статус кластера:

export KUBECONFIG=/opt/rke/kube_config_cluster.yml

# получения статуса нод

kubectl get nodes

На этом установка кластера Kubernetes закончена. Теперь давайте установим Rancher.

Для установки Rancher необходимо доменное имя и SSL сертификат для данного доменного имени. Сертификат должен быть в виде двух файлов .crt и .key. Они понадобятся позже.

На СУО создаем временную папку /tmp/rancher. В эту папку копируем файл rancher-2.6.5.tgz (доступен в папке bin в GitHub). Далее выполняем следующие команды:

cd /tmp/rancher/

helm template rancher ./rancher-2.6.5.tgz --output-dir . \

--no-hooks \

--namespace cattle-system \

--set hostname=<ДОМЕННОЕ_ИМЯ_RANCHER> \

--set rancherImage=<АДРЕС_ЛОКАЛЬНОГО_REGISTRY:ПОРТ>/rancher/rancher \

--set ingress.tls.source=secret \

--set systemDefaultRegistry=<АДРЕС_ЛОКАЛЬНОГО_REGISTRY:ПОРТ> \

--set useBundledSystemChart=true

export KUBECONFIG=/opt/rke/kube_config_cluster.yml

kubectl create namespace cattle-system

kubectl -n cattle-system create secret tls tls-rancher-ingress \

--cert=tls.crt \

--key=tls.key

kubectl -n cattle-system apply -R -f ./rancher

Терминал не закрываем.

Теперь через браузер заходим по адресу https://<ДОМЕННОЕ_ИМЯ_RANCHER>

При первом входе будет выведено сообщение, что нужно ввести пароль для дальнейшей настройки. Там же будет команда которую надо выполнить на СУО (для этого мы и не закрывали терминал). Результатом выполнения команды будет временный пароль. Этот пароль и нужно ввести в веб интерфейсе.

Теперь можно задать свой пароль для учётной записи admin.

На этом настройка Rancher закончена.

Обсудить эту заметку можно в нашем Телеграм канале: https://t.me/devops_spb_ru (@devops_spb_ru)