Сегодня мы рассмотрим наполнение локального 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)