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

Погнали!

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

Состав компонентов: Сервер установки обновлений (далее СУО) – 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

Теперь запустим локальный Docker Registry на СУО. Об этом подробно написано в статье Настройка сервера с Docker Registry

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

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

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

  • rancher/mirrored-coreos-etcd:v3.5.3
  • rancher/rke-tools:v0.1.80
  • rancher/mirrored-k8s-dns-node-cache:1.21.1
  • rancher/mirrored-k8s-dns-dnsmasq-nanny:1.21.1
  • rancher/mirrored-k8s-dns-sidecar:1.21.1
  • rancher/mirrored-cluster-proportional-autoscaler:1.8.5
  • rancher/mirrored-coredns-coredns:1.9.0
  • rancher/hyperkube:v1.23.6-rancher1
  • rancher/mirrored-coreos-flannel:v0.15.1
  • rancher/flannel-cni:v0.3.0-rancher6
  • rancher/mirrored-calico-node:v3.22.0
  • rancher/mirrored-calico-cni:v3.22.0
  • rancher/mirrored-calico-kube-controllers:v3.22.0
  • rancher/mirrored-calico-ctl:v3.22.0
  • rancher/mirrored-calico-pod2daemon-flexvol:v3.22.0
  • rancher/mirrored-flannelcni-flannel:v0.17.0
  • weaveworks/weave-kube:2.8.1
  • weaveworks/weave-npc:2.8.1
  • rancher/mirrored-pause:3.6
  • rancher/nginx-ingress-controller:nginx-1.2.0-rancher1
  • rancher/mirrored-nginx-ingress-controller-defaultbackend:1.5-rancher1
  • rancher/mirrored-ingress-nginx-kube-webhook-certgen:v1.1.1
  • rancher/mirrored-metrics-server:v0.6.1
  • noiro/cnideploy:5.1.1.0.1ae238a
  • noiro/aci-containers-host:5.1.1.0.1ae238a
  • noiro/opflex:5.1.1.0.1ae238a
  • noiro/openvswitch:5.1.1.0.1ae238a
  • noiro/aci-containers-controller:5.1.1.0.1ae238a
  • noiro/gbp-server:5.1.1.0.1ae238a
  • noiro/opflex-server:5.1.1.0.1ae238a
  • rancher/rancher-agent:v2.6.5
  • rancher/rancher-runtime:v2.6.5
  • rancher/rancher-webhook:v0.2.5
  • rancher/rancher:v2.6.5
  • rancher/webhook-receiver:v0.2.5
  • rancher/shell:v0.1.16
  • rancher/fleet:v0.3.9
  • rancher/gitjob:v0.1.26
  • rancher/fleet-agent:v0.3.9
  • quay.io/jetstack/cert-manager-cainjector:v1.7.1
  • quay.io/jetstack/cert-manager-controller:v1.7.1
  • quay.io/jetstack/cert-manager-webhook:v1.7.1
  • quay.io/jetstack/cert-manager-ctl:v1.7.1
  • quay.io/prometheus-operator/prometheus-config-reloader:v0.57.0
  • quay.io/prometheus-operator/prometheus-operator:v0.57.0
  • quay.io/thanos/thanos:v0.25.2
  • quay.io/prometheus/prometheus:v2.36.1
  • quay.io/prometheus/node-exporter:v1.3.1
  • quay.io/prometheus/blackbox-exporter
  • quay.io/prometheuscommunity/postgres-exporter
  • registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.5.0

Продолжаем настройку СУО. Установим необходимые утилиты, а именно: 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)

От DevOps

DevOps or not...