Подготовка и развёртывание отказоустойчивого кластера

В этой статье:

Схема архитектуры развёртывания

Подготовка узлов для развёртывания кластера

Настройка HAProxy и Heartbeat

Установка и настройка Ceph

Добавление OSD-узлов в кластере Ceph

Создание сервера метаданных

Развертывание Ceph-менеджеров

Тестирование хранилища Ceph

Подготовка к установке и инициализация кластера Kubernetes (k8s)

Установка и настройка Rancher

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

Преимущества нового подхода:

Схема архитектуры развёртывания

Схема обеспечения отказоустойчивости управляющей части кластера:

Подготовка узлов для развёртывания кластера

Для создания минимальной конфигурации отказоустойчивого кластера требуется пять виртуальных или аппаратных узлов:

Примечание. В дальнейшем описании для главных узлов используются названия kn0, kn1, kn2, для рабочих узлов - kn3, kn4.

Для подготовки узлов:

  1. На всех узлах создайте пользователя fmpadmin, от имени которого будет происходить установка и управление будущим кластером:

sudo useradd -m -d /home/fmpadmin -s /bin/bash fmpadmin
# Задание пароля пользователю fmpadmin
sudo passwd fmpadmin

Добавьте пользователя fmpadmin в sudo users, для того чтобы всякий раз при использовании команды sudo не приходилось вводить пароль:

echo "fmpadmin ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/fmpadmin
chmod 0440 /etc/sudoers.d/fmpadmin

  1. Отключите SWAP-раздел на всех узлах, так как kubeadm не поддерживает работу со SWAP:

% sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
% swapoff –all

Важно. Если все узлы кластера это виртуальные машины под управлением VMware, то на каждый узел установите пакет vmware-tools:
  % sudo apt-get install -y open-vm-tools

  1. Установите базовые пакеты и среду Docker Community Edition:

sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update

Для просмотра списка доступных к установке версий Docker Community Edition используйте команду:

sudo apt-cache madison docker-ce

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

###On each of your machines, install Docker. Version 18.06.2 is recommended, but 1.11, 1.12, 1.13, 17.03 and 18.09 are known to work as well.
### Latest validated Docker version: 18.06
## Install docker ce.

apt-get update && apt-get install docker-ce=18.06.3~ce~3-0~ubuntu

  1. Добавьте пользователя fmpadmin в группу docker:

sudo usermod -aG docker fmpadmin

  1. Выполните настройку файла /etc/hosts одинаково на всех узлах:

127.0.0.1      localhost
<host-ip-address>    kn0.our.cluster kn0
<host-ip-address>    kn1.our.cluster kn1
<host-ip-address>    kn2.our.cluster kn2
<host-ip-address>    kn3.our.cluster kn3
<host-ip-address>    kn4.our.cluster kn4

# The following lines are desirable for IPv6 capable hosts

#::1     localhost ip6-localhost ip6-loopback
#ff02::1 ip6-allnodes
#ff02::2 ip6-allrouters

  1. Сгенерируйте SSH-ключ для пользователя fmpadmin на узле kn0:

    1. От имени пользователя fmpadmin выполните команду:

ssh-keygen

В консоль будет выведен диалог, например:

Enter file in which to save the key (/home/user/.ssh/id_rsa):

Нажмите клавишу ENTER. Далее система предложит ввести кодовую фразу для дополнительной защиты SSH-подключения:

Enter passphrase (empty for no passphrase):

Пропустите этот и следующий шаги. Для этого нажимайте клавишу ENTER. В результате будет создан SSH-ключ.

    1. Создайте конфигурационный файл для SSH:

vim ~/.ssh/config

Содержимое конфигурационного файла:

Host kn0
       Hostname kn0
       User fmpadmin
Host kn1
       Hostname kn1
       User fmpadmin
Host kn2
       Hostname kn2
       User fmpadmin
Host kn3
       Hostname kn3
       User fmpadmin
Host kn4
       Hostname kn4
       User fmpadmin

Сохраните изменения и выйдите из редактора.

    1. Измените разрешения на файл:

chmod 644 ~/.ssh/config

  1. Добавьте созданный SSH-ключ на все узлы:

ssh-keyscan kn1 kn2 kn3 kn4 >> ~/.ssh/known_hosts
ssh-copy-id kn1
ssh-copy-id kn2
ssh-copy-id kn3
ssh-copy-id kn4

Примечание. При запросе системой пароля введите пароль пользователя fmpadmin.

  1. Настройте NTP-cервер для синхронизации времени между узлами:

sudo apt-get install -y ntp ntpdate
cp /etc/ntp.conf /etc/ntp.conf.orig

На узле kn0:

cat << EOF > /etc/ntp.conf \
server 127.127.1.0 prefer \
fudge 127.127.1.0 stratum 10 \
interface ignore wildcard \
interface listen <адрес, который будет использоваться для ntp server lan ip> \
EOF
systemctl restart ntp.service

На остальных узлах:

server <адрес ntp server lan ip на узле kn0 > iburst
restrict default
interface ignore wildcard
interface listen <your ntp client lan ip>
sudo systemctl restart ntp.service

В результате будет выполнена подготовка узлов.

Настройка HAProxy и Heartbeat

Для распределения трафика между тремя главными узлами Kubernetes выполните настройку балансировщика нагрузки HAProxy. В результате будет получено три HAProxy-сервера с одним общим виртуальным IP-адресом. Отказоустойчивость обеспечивается с помощью пакета Heartbeat.

Примечание. Настройка выполняется на главных узлах kn0, kn1 и kn2.

Для установки и настройки HAProxy с Heartbeat:

  1. Установите и настройте HAProxy:

kn0#
kn1# apt-get update && apt-get upgrade && apt-get install -y haproxy
kn2# apt-get update && apt-get upgrade && apt-get install -y haproxy

  1. Сохраните исходную конфигурацию и создайте новую:

kn1# mv /etc/haproxy/haproxy.cfg{,.back}
kn1# vi /etc/haproxy/haproxy.cfg

  1. Добавьте параметры конфигурации для HAProxy:

global
   user haproxy
   group haproxy
defaults
   mode http
   log global
   retries 2
   timeout connect 3000ms
   timeout server 5000ms
   timeout client 5000ms
frontend kubernetes
   bind <main cluster ip>:6443
   option tcplog
   mode tcp
   default_backend kubernetes-master-nodes
backend kubernetes-master-nodes
   mode tcp
   balance roundrobin
   option tcp-check
   server kn0 <kn0 main ip>:6443 check fall 3 rise 2
   server kn1 <kn1 main ip>:6443 check fall 3 rise 2
   server kn2 <kn2 main ip>:6443 check fall 3 rise 2

Где <main cluster ip> - общий виртуальный IP-адрес, который будет перемещаться между тремя HAProxy-серверами.

  1. Для разрешения привязки системных служб к нелокальному IP-адресу:

    1. Включите параметр net.ipv4.ip_nonlocal_bind в файл /etc/sysctl.conf:

kn1# vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1

    1. Выполните команду:

sysctl -p

    1. Запустите HAProxy:

kn1# systemctl start haproxy

Убедитесь, что HAProxy запущены и прослушиваются по виртуальному IP-адресу на выбранных узлах:

kn1# netstat -ntlp
tcp 0 0 <main cluster ip>:6443 0.0.0.0:* LISTEN 2833/haproxy
kn2# netstat -ntlp
tcp 0 0 <main cluster ip>:6443 0.0.0.0:* LISTEN 2833/haproxy

  1. Установите Heartbeat и настройте виртуальный IP-адрес:

kn1# apt-get -y install heartbeat && systemctl enable heartbeat

Аналогично выполните установку для узлов kn0 и kn1.

  1. Создайте файлы конфигурации для Heartbeat:

    1. Создайте файл /etc/ha.d/authkeys. В этом файле Heartbeat хранит данные для взаимной аутентификации. Файл должен быть одинаковым на всех узлах:

# echo -n securepass | md5sum
bb77d0d3b3f239fa5db73bdf27b8d29a

kn0# vi /etc/ha.d/authkeys
auth 1

1 md5 bb77d0d3b3f239fa5db73bdf27b8d29a
kn1# vi /etc/ha.d/authkeys

auth 1
1 md5 bb77d0d3b3f239fa5db73bdf27b8d29a

kn2# vi /etc/ha.d/authkeys
auth 1
1 md5 bb77d0d3b3f239fa5db73bdf27b8d29a

Созданный файл должен быть доступен только пользователю root:

kn0# chmod 600 /etc/ha.d/authkeys
kn1# chmod 600 /etc/ha.d/authkeys
kn2# chmod 600 /etc/ha.d/authkeys

    1. Создайте файл /etc/ha.d/ha.cf на узлах kn1 и kn2. В этом файле Heartbeat хранит основную конфигурацию. Файл для каждого узла будет немного отличаться.

Примечание. Для получения параметров узлов для конфигурации запустите uname -n на каждом. Также используйте имя вашей сетевой карты вместо ens160.

kn1# vi /etc/ha.d/ha.cf
#       keepalive: how many seconds between heartbeats
#
keepalive 2
#
#       deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
#       What UDP port to use for udp or ppp-udp communication?
#
udpport        694
bcast  ens160
mcast ens160 225.0.0.1 694 1 0
ucast ens160 <main kn1 ip>
#       What interfaces to heartbeat over?
udp     ens160
#
#       Facility to use for syslog()/logger (alternative to log/debugfile)
#
logfacility     local0
#
#       Tell what machines are in the cluster
#       node    nodename ...    -- must match uname -n
node    kn0
node    kn1
node    kn2

kn2# vi /etc/ha.d/ha.cf
#       keepalive: how many seconds between heartbeats
#
keepalive 2
#
#       deadtime: seconds-to-declare-host-dead
#
deadtime 10
#
#       What UDP port to use for udp or ppp-udp communication?
#
udpport        694
bcast  ens160
mcast ens160 225.0.0.1 694 1 0
ucast ens160 <main kn2 ip>
#       What interfaces to heartbeat over?
udp     ens160
#
#       Facility to use for syslog()/logger (alternative to vlog/debugfile)
#
logfacility     local0
#
#       Tell what machines are in the cluster
#       node    nodename ...    -- must match uname -n
node    kn0
node    kn1
node    kn2

    1. Создайте файл /etc/ha.d/haresources. В нём указывается общий виртуальный IP-адрес и задаётся, какой узел является главным по умолчанию. Файл должен быть одинаковым на всех узлах:

kn0# vi /etc/ha.d/haresources
kn0 <main cluster ip> ### здесь и ниже kn0 = hostname главного узла по умолчанию
kn1# vi /etc/ha.d/haresources
kn0 <main cluster ip>
kn2# vi /etc/ha.d/haresources
kn0 <main cluster ip>   

  1. Запустите службы Heartbeat на всех узнал и проверьте, что на узле kn0 установлен заявленный виртуальный IP-адрес:

kn0# systemctl restart heartbeat
kn1# systemctl restart heartbeat
kn2# systemctl restart heartbeat
kn1# ip a s
ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
   inet <main kn0 ip>/24
   valid_lft forever preferred_lft forever
   inet <main cluster ip>/24

  1. Проверьте работу HAProxy:

# nc -v <main cluster ip> 6443
Connection to x.x.x.x 6443 port [tcp/*] succeeded!

Должно быть превышено время ожидания, поскольку Kubernetes API пока не прослушивается на серверной части. Это означает, что HAProxy и Heartbeat настроены правильно.

Установка и настройка Ceph

Для установки и настройки Ceph:

  1. Установите python:

apt-get update
apt-get install -y python python-pip

  1. Выполните команды:

sudo fdisk -l /dev/sdb
sudo parted -s /dev/sdb mklabel gpt mkpart primary xfs 0% 100%
sudo mkfs.xfs -f /dev/sdb
sudo fdisk -s /dev/sdb
sudo blkid -o value -s TYPE /dev/sdb

  1. Разверните Ceph сначала на узле kn0:

sudo -H pip install ceph-deploy
ceph-deploy new kn0

Отредактируйте файл ceph.conf:

# Our network address
public network = 10.30.217.0/24
osd pool default size = 2

Примечание. 10.30.217.0/24 замените на адрес вашей сети.

  1. Установите пакеты сeph сразу на всех узлах:

ceph-deploy install kn0 kn1 kn2 kn3 kn4

Данная операция займёт продолжительное время.

  1. Настройте мониторинг узла kn1:

# вместо create-initial можно указать узел
ceph-deploy mon create-initial

Данная команда создаст ключ роли мониторинга. Для получения ключа выполните команду:

ceph-deploy gatherkeys kn1

Добавление OSD-узлов в кластере Ceph

После установки Ceph добавьте OSD-узлы в кластер. Для хранения данных и журнала они будут использовать раздел /dev/sdb на диске.

  1. Проверьте на всех узлах, доступен ли раздел диска /dev/sdb:

ceph-deploy disk list kn2 kn3 kn4

  1. Удалите таблицы разделов на всех узлах:

ceph-deploy disk zap kn2 /dev/sdb
ceph-deploy disk zap kn3 /dev/sdb
ceph-deploy disk zap kn4 /dev/sdb

Данная команда удалить все данные из раздела /dev/sdb OSD-узлов.

  1. Подготовьте и активируете все OSD-узлы:

ceph-deploy osd create kn2 --data /dev/sdb
The last output line should be: Host kn2 is now ready for osd use.
ceph-deploy osd create kn3 --data /dev/sdb
The last output line should be: Host kn3 is now ready for osd use.
ceph-deploy osd create kn4 --data /dev/sdb
The last output line should be: Host kn4 is now ready for osd use.

Проверьте sdb disk на OSD-узлах:

ceph-deploy disk list kn2 kn3 kn4

  1. Отправьте admin keys и конфигурацию на все узлы:

ceph-deploy admin kn0 kn1 kn2 kn3 kn4

  1. Измените права на key file. Выполните на всех узлах команду:

sudo chmod 644 /etc/ceph/ceph.client.admin.keyring

В результате будет создан кластер Ceph.

Добавьте Ceph Manager Service:

  1. На узле kn0 выполните команду:

ceph auth get-or-create mgr.kn1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'

Команда вернёт значение mgr keyring. Скопируйте его и переходите к следующему шагу.

  1. Выполните команду:

ssh kn1 (mon node)
sudo –i
mkdir /var/lib/ceph/mgr/ceph-kn1

Затем отредактируйте файл vi /var/lib/ceph/mgr/ceph-kn1/keyring. Вставьте в него значение mgr keyring из предыдущего шага.

  1. Выполните команду:

chmod 600 /var/lib/ceph/mgr/ceph-kn1/keyring
chown ceph-ceph –R /var/lib/ceph/mgr/

  1. Проверьте статус кластера Ceph:

sudo ceph –s

cluster:
id:     a997355a-25bc-4749-8f3a-fb07df0f9105
health: HEALTH_OK

services:
mon: 1 daemons, quorum kn1
mgr: kn1(active)
osd: 3 osds: 3 up, 3 in

data:
pools:   0 pools, 0 pgs
objects: 0  objects, 0 B
usage:   3.0 GiB used, 147 GiB / 150 GiB avail
pgs:

Если кластер вернул ответ HEALTH_OK, то кластер работает.

Создание сервера метаданных

Для использования CephFS требуется как минимум один сервер метаданных. Для его создания выполните команду:

ceph-deploy mds create {ceph-node}

Развертывание Ceph-менеджеров

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

Для развертывания дополнительных Ceph-менеджеров:

  1. Выполните команду:

ceph-deploy mgr create kn2 kn3

Выполните следующие команды для проверки работы Ceph:

ceph -s

ceph df

ceph osd tree

  1. Создайте отдельный пул kube для кластера Kubernetes (k8s):

ceph osd pool create kube 30 30
>> pool 'kube' created

  1. Свяжите созданный пул с rbd-приложенем для его использования в качестве устройства RADOS:

sudo ceph osd pool application enable kube rbd
>>enabled application 'rbd' on pool 'kube'

  1. Создайте отдельного пользователя для пула и сохраните ключи, требуемы для доступа k8s к хранилищу:

sudo ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube'

[client.kube]
       key = AQC6DX1cAJD3LRAAUC2YpA9VSBzTsAAeH30ZrQ==

mkdir ./to_etc
sudo ceph auth get-key client.admin > ./to_etc/client.admin
sudo cp ./to_etc/client.admin /etc/ceph/
sudo ceph auth get-key client.kube > ./to_etc/client.kube
sudo cp ./to_etc/client.kube /etc/ceph/

Тестирование хранилища Ceph

Самый простой способ проверки того, что кластер Ceph работает правильно и может предоставлять хранилище - это создание и использование нового тома RADOS Block Device (RBD) с узла администратора. Для этого:

  1. Настройте функции RBD: отключите те функции RBD, которые недоступны на используемом ядре Linux. Для этого отредактируйте файл ceph.conf:

$ echo "rbd_default_features = 7" | sudo tee -a /etc/ceph/ceph.conf

*rbd_default_features = 7    \\  Для включения всех функций используйте: rbd default features = 3

Важно. Kubernetes использует модуль ядра RBD для сопоставления RBD с хостами. Релиз Ceph Luminous требует CRUSH_TUNABLES 5 (Jewel). Минимальная версия ядра для этих настроек - 4.5. Если ваше ядро не поддерживает эти параметры, то выполните команду:
ceph osd crush tunables hammer
Для получения более подробной информации обратитесь к документации Ceph, см. раздел Create and initialize the RBD pool.

  1. Создайте том RBD:

sudo rbd create --size 1G kube/testvol01 --image-feature layering

rbd create testvol02 --size 1G --pool kube --image-feature layering  ### успешно создали testvol2

  1. Убедитесь, что том RBD существует:

sudo rbd ls kube

  1. Получите информацию о томе RBD:

sudo rbd info kube/testvol01

  1. Сопоставьте созданный том RBD с узлом администратора:

sudo rbd map kube/testvol01
sudo rbd map kube/testvol02 ### успешно выполняется операция
cephuser@kn0:~/cluster$ sudo rbd map kube/testvol02
/dev/rbd0
ssh kn2 sudo rbd map kube/testvol02
ssh kn3 sudo rbd map kube/testvol02
ssh kn4 sudo rbd map kube/testvol02

  1. Создайте временную папку для подключения тома RBD, файловую систему тома RBD и подключите том RBD во временную папку:

sudo mkdir /testkubefs
ssh kn2 sudo mkdir /testkubefs
ssh kn3 sudo mkdir /testkubefs
ssh kn4 sudo mkdir /testkubefs

sudo mkfs.xfs /dev/rbd0   ### выполните эту команду только на узле администратора

sudo mount /dev/rbd0 /testkubefs
ssh kn2 sudo mount /dev/rbd0 /testkubefs
ssh kn3 sudo mount /dev/rbd0 /testkubefs
ssh kn4 sudo mount /dev/rbd0 /testkubefs

  1. Проверьте, что всё работает:

sudo df -vh | egrep 'Mounted on|/testkubefs'

ssh kn2 sudo df -vh | egrep 'Mounted on|testkubefs'
ssh kn3 sudo df -vh | egrep 'Mounted on|testkubefs'
ssh kn4 sudo df -vh | egrep 'Mounted on|testkubefs'

  1. Удалите том RBD:

$ sudo umount /dev/rbd0
$ sudo rbd unmap kube/testvol02
$ sudo rbd remove kube/testvol02

$ sudo rmdir /testkubefs

Подготовка к установке и инициализация кластера Kubernetes (k8s)

Все команды на главных узлах Kubernetes выполняйте от имени пользователя root.

На каждом узле выполните:

  1. От имени пользователя root внесите изменения в system для правильной работы сетей в k8s:

cat >>/etc/sysctl.d/kubernetes.conf<<EOF
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl –system

apt-get update && apt-get install -y apt-transport-https curl

  1. Добавьте в систему официальный Kubernetes GPG ключ:

curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -

  1. Добавьте Kubernetes репозиторий:

cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/kubernetes-xenial main
EOF

  1. Установите значение /proc/sys/net/bridge/bridge-nf-call-iptables равным 1 для корректной работы CNI (Container Network Interface). Для этого проверьте текущее значение:

cat /proc/sys/net/bridge/bridge-nf-call-iptables

Если оно равно 0, то выполните команду:

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

  1. На узле kn0 инициализируйте кластер kubernetes:

На узле kn0 от имени пользователя root инициализируете кластер Kubernetes:

  1. Перейдите в домашнюю директорию пользователя fmpadmin: /home/fmpadmin). Распакуйте архив, содержащий скрипты и yaml-файлы:

% tar –xvzf ./fmp_k8s_v<номер версии>.tar

  1. Перейдите в директорию с распакованными скриптами:

% cd ./ fmp_k8s_v<номер версии>/

  1. Перейдите в поддиректорию rke:

% cd ./rke

  1. Выполните команду:

% ls –lh ./

Будет отображён список файлов в текущей директории:

-rwxr-xr-x 1 root     root       388 Mar 26 20:44 fmpclust.yml
-rwxr-xr-x 1 root     root      36M Mar 28 14:55 helm
-rw-rw-r-- 1 root     root      1.3K Mar 26 20:48 ReadMe.txt
-rwxr-xr-x 1 root     root      36M Mar 28 14:54 rke
-rwxr-xr-x 1 root     root      36M Mar 28 14:55 tiller

  1. Переместите или скопируйте файлы rke, tiller, helm в директорию /usr/local/bin/:

% mv ./rke /usr/local/bin/
% mv ./helm /usr/loca/bin/
% mv ./tiller /usr/local/bin/

  1. Разверните и проинициализируйте кластер:

% rke up --config fmpclust.yml

Операция занимает значительное количество времени и сопровождается подробным выводом в консоль всех этапов развёртывания кластера.

Если всё сделано правильно, то развёртывание кластера пройдет успешно и в консоль будет выведена строка:

INFO[0103] Finished building Kubernetes cluster successfully

  1. После инициализации кластера в текущей директории рядом с файлом fmpclust.yml появится файл kube_config_fmpclust.yml. Переместите или скопируйте его в профиль пользователя. Это позволит пользователю взаимодействовать с кластером. Выполняйте данную операцию от имени пользователя fmpadmin:

% mkdir /home/fmpadmin/.kube
% cd ./ fmp_k8s_v<номер версии>/rke/
% mv ./kube_config_fmpclust.yml /home/fmpadmin/.kube/config
% sudo chown -R fmpadmin:fmpadmin /home/fmpadmin/.kube

В результате будет установлен и инициализирован кластер k8s. Проверьте его работу:

  1. Проверьте версию сервера и клиента k8s:

% kubectl version - -short

В консоль будет выведено:

Client Version: v1.14.0
Server Version: v1.13.4

  1. Проверьте статус компонентов k8s:

% kubectl get cs

В консоль будет выведено:

NAME                 STATUS    MESSAGE              ERROR
scheduler            Healthy   ok
controller-manager   Healthy   ok
etcd-0               Healthy   {"health": "true"}
etcd-1               Healthy   {"health": "true"}
etcd-2               Healthy   {"health": "true"}

Установка и настройка Rancher

Rancher - это программное обеспечения для удобного управления кластером k8s.

Для установки и настройки Rancher:

  1. Создайте на узле kn4 папку для хранения информации Rancher:

% sudo mkdir –p /opt/rancher

  1. Запустите Rancher c монтированием на хост:

% sudo docker run -d --restart=unless-stopped -p 8180:80 -p 8446:443 -v /opt/rancher:/var/lib/rancher rancher/rancher:stable

  1. Откройте браузер и перейдите по адресу https://ip-address-of-kn0:8446, где ip-address-of-kn0 - это IP-адрес узла kn0. Установите пароль для роли администратора Rancher в веб-интерфейсе:

  1. Добавьте созданный кластер в Rancher. Нажмите кнопку «Add Cluster»:

  1. Выберите тип добавления. Нажмите «Import»:

  1. Укажите название и описание для добавляемого кластера и нажмите «Create»:

  1. Скопируйте последнюю команду на странице:

Общий вид команды:

% curl --insecure -sfL https://<server ip>:8446/v3/import/dtdsrjczmb2bg79r82x9qd8g9gjc8d5fl86drc8m9zhpst2d9h6pfn.yaml | kubectl apply -f -

Где <server ip> - это IP-адрес узла.

Выполните скопированную команду в консоли узла kn0. В консоль будет выведено:

namespace/cattle-system created
serviceaccount/cattle created
clusterrolebinding.rbac.authorization.k8s.io/cattle-admin-binding created
secret/cattle-credentials-3035218 created
clusterrole.rbac.authorization.k8s.io/cattle-admin created
deployment.extensions/cattle-cluster-agent created
daemonset.extensions/cattle-node-agent created

Ожидайте запуск системы:

После окончания инициализации статус кластера изменится на Active:

Общее состояние кластеров:

  1. Перейдите в раздел Projects/Namespaces и создайте Project для нашей платформы:

  1. Нажмите «Add Project». Заполните поле «Project Name», добавьте описание в поле «Description» и нажмите «Create»:

  1. Нажмите «Add Namespace». Заполните поле «Name» и нажмите «Create»:

Настройка через графический веб-интерфейс завершена. Перейдите к консоли узлов.

  1. Откройте консоль одного из главных узлов Kubernetes от имени пользователя fmpadmin. В домашнюю директорию пользователя был загружен архив с образами контейнеров нашего приложения, а также архив с набором скриптов и yaml-файлов для запуска нашего приложения в среде Kubernetes.

  2. Загрузите образы контейнеров в систему:

docker load -i  fmp_v<номер версии>.tgz

Примечание. Данный архив распакуйте на всех узлах кластера.

После успешного импорта удалите архив.

  1. На одном управляющем узле распакуйте архив, содержащий скрипты и yaml-файлы:

% tar –xvzf ./fmp_k8s_v<номер версии>.tar

  1. Перейдите в директорию с распакованными скриптами:

% cd ./ fmp_k8s_v<номер версии>

  1. Отредактируйте содержимое yaml-файла ./storage/ceph-storage-ceph_rbd.yml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-rbd
provisioner: kubernetes.io/rbd
parameters:
monitors: 10.30.217.17:6789, 10.30.217.20:6789, 10.30.217.23:6789
adminId: admin
adminSecretName: ceph-secret
adminSecretNamespace: "kube-system"
pool: kube
userId: kube
userSecretName: ceph-secret-kube

В строке monitors укажите IP-адреса или DNS-имена узлов ceph кластера с установленной ролью мониторинга. Для просмотра на каких именно узлах установлена эта роль используйте команду:

% sudo ceph -s

Результат выполнения команды, например:

cluster:
id:     a997355a-25bc-4749-8f3a-fb07df0f9105
health: HEALTH_OK
services:
mon: 3 daemons, quorum kn1,kn0,kn3
mgr: kn3(active), standbys: kn0
osd: 4 osds: 4 up, 4 in

Строка mon в разделе services указывает на имена узлов с установленной ролью мониторинга.

  1. Добавьте secret-keys нашего распределённого файлового хранилища Ceph в Kubernetes:

    1. Получите ключ администратора ceph:

% sudo ceph --cluster ceph auth get-key client.admin
>>   AQCvBnVciE8pERAAJoIDoxgtkfYKZnoBS9R6uA==

Скопируйте его в буфер обмена.

    1. Добавьте полученный ключ в секреты Kubernetes явно указав его в команде:

% kubectl create secret generic ceph-secret --type="kubernetes.io/rbd" \
--from-literal=key='AQCvBnVciE8pERAAJoIDoxgtkfYKZnoBS9R6uA==' --namespace=kube-system

Результат выполнения команды:

secret/ceph-secret created

    1. Создайте отдельный пул для узлов Kubernetes в кластере Ceph. Созданный пул будет использоваться в RBD на узлах:

% sudo ceph --cluster ceph osd pool create kube 1024 1024

    1. Создайте клиентский ключ. В кластере Ceph включена аутентификация cephx:

% sudo ceph --cluster ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube'

    1. Получите ключ client.kube:

% sudo ceph --cluster ceph auth get-key client.kube

    1. Создайте новый секрет в пространстве имён нашего проекта:

% kubectl create secret generic ceph-secret-kube --type="kubernetes.io/rbd" \
--from-literal=key='AQC6DX1cAJD3LRAAUC2YpA9VSBzTsAAeH30ZrQ==' --namespace=fmpns

  1. Выполним скрипты в следующем порядке:

    1. fmp_k8s_storage_inst.sh. Выполняем при использовании распределённого файлового хранилища Ceph. Ранее в инструкции было показано, как настроить Ceph-кластер.

    2. fmp_k8s_volumes_inst.sh. Создает и подготавливает тома для использования приложением fmp.

    3. fmp_k8s_configmap_inst.sh. Создает карту переменных.

    4. fmp_k8s_services_inst.sh. Настраивает сервисы для взаимодействия компонентов приложения между собой.

    5. fmp_k8s_statefulsets_inst.sh. Настраивает условия для работы баз данных внутри приложения fmp.

    6. fmp_k8s_deployments_inst.sh. Настраивает условия для запуска компонентов приложения fmp.

Вернитесь к веб-интерфейсу и убедитесь, что все необходимые объекты созданы, а контейнеры приложения запущены без ошибок:

  1. Проверьте наличие подключённого хранилища. Перейдите в раздел «Storage > Storage Classes»:

  1. Проверьте наличие созданных Persistent Volumes. Перейдите в раздел «Storage > Persistent Volumes»:

Затем выберите приложение fmp перейдите в раздел «Workbooks» на вкладку «Volumes»:

  1. Проверьте наличие Config Maps  - списка загруженных переменных. Перейдите в раздел «Resources»:

  1. Перейдите в раздел «Workbooks» и убедитесь, что создались элементы на вкладках:

В результате будет подготовлен и развёрнут отказоустойчивый кластер и приложение «Форсайт. Мобильная платформа».

Откройте браузер и перейдите по IP-адресу <main cluster ip> который был указан при настройке HAProxy. Будет открыта страница авторизации в приложении «Форсайт. Мобильная платформа»:

См. также:

Установка и настройка продукта «Форсайт. Мобильная платформа»