В этой статье:
Схема архитектуры развёртывания
Подготовка узлов для развёртывания кластера
Добавление OSD-узлов в кластере Ceph
Подготовка к установке и инициализация кластера Kubernetes (k8s)
Кластеры используются для распределения трафика, поддержки баз данных, хранения файлов и бизнес-приложений в сети. Для обеспечения горизонтального масштабирования всех компонентов системы реализован новый подход к развертыванию кластера.
Преимущества нового подхода:
использование новых средств развертывания и обслуживания компонентов кластера без простоя системы для регламентных работ;
использование бесплатного программного обеспечения с возможностью платной поддержки;
поддержка современной системы файлового распределенного хранилища CEPH;
быстрая установка и удобные механизмы обслуживания продукта «Форсайт. Мобильная платформа»;
удобный графический интерфейс Rancher для диагностики текущего состояния программного обеспечения.

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

Для создания минимальной конфигурации отказоустойчивого кластера требуется пять виртуальных или аппаратных узлов:
три узла являются главными и используются исключительно для управления кластером. К главным узлам предъявляются следующие системные требования:
конфигурация: 2-х ядерный процессор, 8 ГБ оперативной памяти, 50 ГБ жесткий диск;
ОС: Linux Ubuntu 16.04;
два узла являются рабочими и несут основную нагрузку. К рабочим узлам предъявляются следующие системные требования:
конфигурация: 4-х ядерный процессор, 8 ГБ оперативной памяти, 500 ГБ жесткий диск;
ОС: Linux Ubuntu 16.04.
Примечание. В дальнейшем описании для главных узлов используются названия kn0, kn1, kn2, для рабочих узлов - kn3, kn4.
Для подготовки узлов:
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
Отключите SWAP-раздел на всех узлах, так как kubeadm не поддерживает работу со SWAP:
% sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
% swapoff –all
Важно.
Если все узлы кластера это виртуальные машины под управлением VMware,
то на каждый узел установите пакет vmware-tools:
%
sudo apt-get install -y open-vm-tools
Установите базовые пакеты и среду 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
Добавьте пользователя fmpadmin в группу docker:
sudo usermod -aG docker fmpadmin
Выполните настройку файла /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
Сгенерируйте SSH-ключ для пользователя fmpadmin на узле kn0:
От имени пользователя 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-ключ.
Создайте конфигурационный файл для 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
Сохраните изменения и выйдите из редактора.
Измените разрешения на файл:
chmod 644 ~/.ssh/config
Добавьте созданный 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.
Настройте 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
В результате будет выполнена подготовка узлов.
Для распределения трафика между тремя главными узлами Kubernetes выполните настройку балансировщика нагрузки HAProxy. В результате будет получено три HAProxy-сервера с одним общим виртуальным IP-адресом. Отказоустойчивость обеспечивается с помощью пакета Heartbeat.
Примечание. Настройка выполняется на главных узлах kn0, kn1 и kn2.
Для установки и настройки HAProxy с Heartbeat:
Установите и настройте 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
Сохраните исходную конфигурацию и создайте новую:
kn1# mv /etc/haproxy/haproxy.cfg{,.back}
kn1# vi /etc/haproxy/haproxy.cfg
Добавьте параметры конфигурации для 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-серверами.
Для разрешения привязки системных служб к нелокальному IP-адресу:
Включите параметр net.ipv4.ip_nonlocal_bind в файл /etc/sysctl.conf:
kn1# vi /etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
Выполните команду:
sysctl -p
Запустите 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
Установите Heartbeat и настройте виртуальный IP-адрес:
kn1# apt-get -y install heartbeat && systemctl enable heartbeat
Аналогично выполните установку для узлов kn0 и kn1.
Создайте файлы конфигурации для Heartbeat:
Создайте файл /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
Создайте файл /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
Создайте файл /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>
Запустите службы 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
Проверьте работу HAProxy:
# nc -v <main cluster ip> 6443
Connection to x.x.x.x 6443 port [tcp/*] succeeded!
Должно быть превышено время ожидания, поскольку Kubernetes API пока не прослушивается на серверной части. Это означает, что HAProxy и Heartbeat настроены правильно.
Для установки и настройки Ceph:
Установите python:
apt-get update
apt-get install -y python python-pip
Выполните команды:
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
Разверните 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 замените на адрес вашей сети.
Установите пакеты сeph сразу на всех узлах:
ceph-deploy install kn0 kn1 kn2 kn3 kn4
Данная операция займёт продолжительное время.
Настройте мониторинг узла kn1:
# вместо create-initial можно указать узел
ceph-deploy mon create-initial
Данная команда создаст ключ роли мониторинга. Для получения ключа выполните команду:
ceph-deploy gatherkeys kn1
После установки Ceph добавьте OSD-узлы в кластер. Для хранения данных и журнала они будут использовать раздел /dev/sdb на диске.
Проверьте на всех узлах, доступен ли раздел диска /dev/sdb:
ceph-deploy disk list kn2 kn3 kn4
Удалите таблицы разделов на всех узлах:
ceph-deploy disk zap kn2 /dev/sdb
ceph-deploy disk zap kn3 /dev/sdb
ceph-deploy disk zap kn4 /dev/sdb
Данная команда удалить все данные из раздела /dev/sdb OSD-узлов.
Подготовьте и активируете все 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
Отправьте admin keys и конфигурацию на все узлы:
ceph-deploy admin kn0 kn1 kn2 kn3 kn4
Измените права на key file. Выполните на всех узлах команду:
sudo chmod 644 /etc/ceph/ceph.client.admin.keyring
В результате будет создан кластер Ceph.
Добавьте Ceph Manager Service:
На узле kn0 выполните команду:
ceph auth get-or-create mgr.kn1 mon 'allow profile mgr' osd 'allow *' mds 'allow *'
Команда вернёт значение mgr keyring. Скопируйте его и переходите к следующему шагу.
Выполните команду:
ssh kn1 (mon node)
sudo –i
mkdir /var/lib/ceph/mgr/ceph-kn1
Затем отредактируйте файл vi /var/lib/ceph/mgr/ceph-kn1/keyring. Вставьте в него значение mgr keyring из предыдущего шага.
Выполните команду:
chmod 600 /var/lib/ceph/mgr/ceph-kn1/keyring
chown ceph-ceph –R /var/lib/ceph/mgr/
Проверьте статус кластера 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-deploy mgr create kn2 kn3
Выполните следующие команды для проверки работы Ceph:
получение состояние кластера Ceph:
ceph -s
просмотр всех существующих пулов;
ceph df
вывод CRUSH-дерева с хостами для OSD-узлов:
ceph osd tree
Создайте отдельный пул kube для кластера Kubernetes (k8s):
ceph osd pool create kube 30 30
>> pool 'kube' created
Свяжите созданный пул с rbd-приложенем для его использования в качестве устройства RADOS:
sudo ceph osd pool application enable kube rbd
>>enabled application 'rbd' on pool 'kube'
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 работает правильно и может предоставлять хранилище - это создание и использование нового тома RADOS Block Device (RBD) с узла администратора. Для этого:
$ 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.
Создайте том RBD:
sudo rbd create --size 1G kube/testvol01 --image-feature
layering
rbd create testvol02 --size 1G --pool kube --image-feature layering
### успешно создали testvol2
Убедитесь, что том RBD существует:
sudo rbd ls kube
Получите информацию о томе RBD:
sudo rbd info kube/testvol01
Сопоставьте созданный том 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
Создайте временную папку для подключения тома 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
Проверьте, что всё работает:
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'
Удалите том RBD:
$ sudo umount /dev/rbd0
$ sudo rbd unmap kube/testvol02
$ sudo rbd remove kube/testvol02
$ sudo rmdir /testkubefs
Все команды на главных узлах Kubernetes выполняйте от имени пользователя root.
На каждом узле выполните:
От имени пользователя 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
Добавьте в систему официальный Kubernetes GPG ключ:
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
Добавьте Kubernetes репозиторий:
cat <<EOF > /etc/apt/sources.list.d/kubernetes.list
deb https://apt.kubernetes.io/kubernetes-xenial main
EOF
Установите значение /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
На узле kn0 инициализируйте кластер kubernetes:
На узле kn0 от имени пользователя root инициализируете кластер Kubernetes:
Перейдите в домашнюю директорию пользователя fmpadmin: /home/fmpadmin). Распакуйте архив, содержащий скрипты и yaml-файлы:
% tar –xvzf ./fmp_k8s_v<номер версии>.tar
Перейдите в директорию с распакованными скриптами:
% cd ./ fmp_k8s_v<номер версии>/
Перейдите в поддиректорию rke:
% cd ./rke
Выполните команду:
% 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
Переместите или скопируйте файлы rke, tiller, helm в директорию /usr/local/bin/:
% mv ./rke /usr/local/bin/
% mv ./helm /usr/loca/bin/
% mv ./tiller /usr/local/bin/
Разверните и проинициализируйте кластер:
% rke up --config fmpclust.yml
Операция занимает значительное количество времени и сопровождается подробным выводом в консоль всех этапов развёртывания кластера.
Если всё сделано правильно, то развёртывание кластера пройдет успешно и в консоль будет выведена строка:
INFO[0103] Finished building Kubernetes cluster successfully
После инициализации кластера в текущей директории рядом с файлом 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. Проверьте его работу:
Проверьте версию сервера и клиента k8s:
% kubectl version - -short
В консоль будет выведено:
Client Version: v1.14.0
Server Version: v1.13.4
Проверьте статус компонентов 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 - это программное обеспечения для удобного управления кластером k8s.
Для установки и настройки Rancher:
Создайте на узле kn4 папку для хранения информации Rancher:
% sudo mkdir –p /opt/rancher
Запустите Rancher c монтированием на хост:
% sudo docker run -d --restart=unless-stopped -p 8180:80 -p 8446:443 -v /opt/rancher:/var/lib/rancher rancher/rancher:stable
Откройте браузер и перейдите по адресу https://ip-address-of-kn0:8446, где ip-address-of-kn0 - это IP-адрес узла kn0. Установите пароль для роли администратора Rancher в веб-интерфейсе:

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

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


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

Общий вид команды:
% 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:

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

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

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

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

Настройка через графический веб-интерфейс завершена. Перейдите к консоли узлов.
Откройте консоль одного из главных узлов Kubernetes от имени пользователя fmpadmin. В домашнюю директорию пользователя был загружен архив с образами контейнеров нашего приложения, а также архив с набором скриптов и yaml-файлов для запуска нашего приложения в среде Kubernetes.
Загрузите образы контейнеров в систему:
docker load -i fmp_v<номер версии>.tgz
Примечание. Данный архив распакуйте на всех узлах кластера.
После успешного импорта удалите архив.
На одном управляющем узле распакуйте архив, содержащий скрипты и yaml-файлы:
% tar –xvzf ./fmp_k8s_v<номер версии>.tar
Перейдите в директорию с распакованными скриптами:
% cd ./ fmp_k8s_v<номер версии>
Отредактируйте содержимое 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 указывает на имена узлов с установленной ролью мониторинга.
Добавьте secret-keys нашего распределённого файлового хранилища Ceph в Kubernetes:
Получите ключ администратора ceph:
% sudo ceph --cluster
ceph auth get-key client.admin
>> AQCvBnVciE8pERAAJoIDoxgtkfYKZnoBS9R6uA==
Скопируйте его в буфер обмена.
Добавьте полученный ключ в секреты Kubernetes явно указав его в команде:
% kubectl create secret
generic ceph-secret --type="kubernetes.io/rbd" \
--from-literal=key='AQCvBnVciE8pERAAJoIDoxgtkfYKZnoBS9R6uA==' --namespace=kube-system
Результат выполнения команды:
secret/ceph-secret created
Создайте отдельный пул для узлов Kubernetes в кластере Ceph. Созданный пул будет использоваться в RBD на узлах:
% sudo ceph --cluster ceph osd pool create kube 1024 1024
Создайте клиентский ключ. В кластере Ceph включена аутентификация cephx:
% sudo ceph --cluster ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube'
Получите ключ client.kube:
% sudo ceph --cluster ceph auth get-key client.kube
% kubectl create secret
generic ceph-secret-kube --type="kubernetes.io/rbd"
\
--from-literal=key='AQC6DX1cAJD3LRAAUC2YpA9VSBzTsAAeH30ZrQ==' --namespace=fmpns
Выполним скрипты в следующем порядке:
fmp_k8s_storage_inst.sh. Выполняем при использовании распределённого файлового хранилища Ceph. Ранее в инструкции было показано, как настроить Ceph-кластер.
fmp_k8s_volumes_inst.sh. Создает и подготавливает тома для использования приложением fmp.
fmp_k8s_configmap_inst.sh. Создает карту переменных.
fmp_k8s_services_inst.sh. Настраивает сервисы для взаимодействия компонентов приложения между собой.
fmp_k8s_statefulsets_inst.sh. Настраивает условия для работы баз данных внутри приложения fmp.
fmp_k8s_deployments_inst.sh. Настраивает условия для запуска компонентов приложения fmp.
Вернитесь к веб-интерфейсу и убедитесь, что все необходимые объекты созданы, а контейнеры приложения запущены без ошибок:
Проверьте наличие подключённого хранилища. Перейдите в раздел «Storage > Storage Classes»:

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

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

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

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

Service Discovery:

Load Balancing успешно перешёл в состояние Active:

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