
Изд. № 29
.pdf
управления ВМ) в виртуальной машине в режиме высокой доступности посредством технологии Self-Hosted Engine;
терминальный сервер. Предназначен для развертывания в составе АС терминального сервера – инфраструктурная ВМ, обеспечивающая выдачу терминальным клиентам IP-адресов по протоколу DHCP, а также загрузку образа ОС на терминальные клиенты с использованием PXE по локальной сети.
Схема типовой технической архитектуры на основе ПК «СинтезМ-Сервер» представлена на рисунке 15.
Рисунок 15 - Виртуализация в защищенном ЦОД
Типовая схема обеспечения высокой доступности за счет применения ПК «СинтезМ-Сервер» в составе серверной группировки АС представлена на рисунке 16.
60

Рисунок 16 - Подсистемы виртуализации в защищенном ЦОД
Структура территориально-распределенных защищенных ЦОД, созданных на базе цифровой программной платформы «СинтезМ» представлена на рисунке 17.
Рисунок 17 - Структура территориально-распределенных защищенных ЦОД, созданных на базе цифровой платформы «СинтезМ»
61
Контрольные вопросы к разделу 4
1.Укажите основные компоненты цифровой программной платформы «СинтезМ» и их назначение.
2.Какие программные комплексы включает в себя ЗОС «СинтезМ»? Кратко охарактеризуйте их.
3.Каково назначение «СинтезМ-Сервер»?
4.Каково назначение «СинтезМ-Клиент»?
5.Что обеспечивает КП «ПСЗИ «СинтезМ»?
6.Укажите программные компоненты, входящие в состав КП «ПСЗИ «СинтезМ».
7.Какой комплекс программных средств в составе «СинтезМ» предназначен для создания АСЗИ в части обеспечения функционирования серверных группировок и автоматизированных рабочих мест пользователей?
8.Укажите программные компоненты, входящие в состав комплекса программных средств (КПС) «Функциональные сервисы».
9.Какие средства в составе КП «ПСЗИ «СинтезМ» обеспечивают резервное копирование?
62

5.Упражнения. Практическое развёртывание решений на базе технологии контейнеризации с помощью ПО Kubernetes
5.1. Общие положения
Задача Kubernetes заключается в координации кластера компьютеров, работающего как одно целое. Абстрактные объекты в Kubernetes позволяют развертывать контейнеризированные приложения в кластер, не привязывая их к отдельным компьютерам. Для использования этой новой модели развертывания приложения должны быть подготовлены так, чтобы они не зависели от конкретных хостов, т.е. они должны быть упакованы в контейнеры.
Приложения в контейнерах более гибки и доступны, чем в предыдущих моделях развертывания, когда приложения устанавливались непосредственно на выделенные компьютеры в виде пакетов, тесно связанных с хостом. Kubernetes автоматизирует распределение и выполнение контейнеров приложений для запуска в кластере более эффективным образом. Kubernetes
— платформа с открытым исходным кодом промышленного уровня, которая управляет размещением (планированием) и запуском контейнеров приложений в пределах компьютерных кластеров и между ними [4].
Кластер Kubernetes состоит из двух типов ресурса (рисунок 18):
Мастер – (ведущий узел) управляет кластером.
Рабочие узлы – компьютеры, на которых выполняются приложения.
Рисунок 18 - Схема кластера
Мастер отвечает за управление кластером. Мастер координирует все процессы в кластере, такие как планирование выполнения приложений, сохранение требуемого состояния приложений, а также их масштабирование и обновление [4].
63
Узел — это виртуальная машина или физический компьютер, который выполняет роль рабочего узла в кластере Kubernetes. У каждого узла есть Kubelet — агент, управляющий узлом и взаимодействующий с ведущим узлом Kubernetes. Узел также имеет инструменты для выполнения контейнерных операций, например, Docker или rkt. Кластер Kubernetes в промышленном окружении должен состоять как минимум из трёх узлов [4].
Ведущие узлы управляют кластером и узлами, которые используются для запуска приложений.
При развертывании приложений в Kubernetes вы сообщаете ведущему узлу запускать контейнеры приложений. Ведущий узел планирует выполнение контейнеров на узлах кластера. Узлы взаимодействуют с ведущим узлом посредством API Kubernetes, который предлагает ведущий узел. Кроме этого, конечные пользователи могут напрямую использовать API Kubernetes для работы с кластером [4].
5.2.Создание кластера Kubernetes (практическая работа № 1)
Вданной практической работе вы узнаете о компонентах системы Kubernetes и абстракциях, которые Kubernetes использует для представления кластера. Также вы получите понимание того, как работает Kubernetes. Вы научитесь работать со своим собственным кластером Kubernetes, используя панель мониторинга Kubernetes и «Терминал» [3].
Цель
Изучение структуры Kubernetes, исследование ее абстракции в представлении кластера и получение более глубокое понимания технологии управления контейнерами.
Задание
1.Перейти на сайт и выполнить регистрацию https://kubecampus.io/.
2.Выбрать первый курс (Build Your First Kubernetes Cluster | Course 1)
иначать выполнение https://kubecampus.io/kubernetes/courses/first-kubernetes- cluster/lessons/kubernetes-concepts-and-building-your-first-cluster/.
3.Пройти тестирование.
4.Выполнить практическую работу.
5.Ответить на контрольные вопросы.
64

Методические указания
В этом руководстве демонстрируется процесс создания кластера Kubernetes в Ubuntu 18.04 и развертывания приложения для микросервисов Weaveworks Socks Shop в качестве демонстрации того, как запускать микросервисы в Kubernetes.
Цель этого руководства - дать возможность запустить демонстрационное приложение для микросервисов в созданном кластере kubernetes.
Для развертывания необходимо следующее аппаратное обеспечение: три сервера Ubuntu 18.04 с 4 Гб оперативной памяти и включенной частной сетью.
Серверы, к которым вы можете получить доступ, нажав на вкладки в левом верхнем углу {Control Plane, kube-02, kube-03}.
Шаг 1: Настройка каждого сервер в кластере для запуска Kubernetes
На каждом из трех серверов Ubuntu 18.04 под root (администратором) надо запустить следующие команды, команды можно ввести или выделить и скопировать/вставить в окне терминала слева [3]:
Загрузить открытый ключ подписи Google Cloud:
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key —keyring /usr/share/keyrings/cloud.google.gpg add –
Добавить репозиторий Kubernetes apt:
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
Обновить индекс пакета apt с помощью нового репозитория и установить утилиты:
apt update apt install -y kubelet=1.20.0-00 kubeadm=1.20.0-00 kubectl=1.20.0-00 apt-mark hold kubelet kubeadm kubectl
Установить Docker:
export VERSION=19.03 && curl -sSL get.docker.com | sh
65

Kubelet
Основной агент, который запускается на узле Kubernetes и взаимодействует с Control Panel для выдачи команд этому узлу и отчета о состоянии.
Kubeadm
Инструмент, который выполняет действия, необходимые для создания кластера Kubernetes.
Kubectl
Инструмент командной строки, который позволяет управлять кластерами Kubernetes и отправлять команды api-серверу.
Docker Engine:
Контейнерный движок, используемый Kubernetes для запуска контейнеров.
Шаг 2: Повторить описанные выше действия на серверах kube-02 и kube-03
После завершения необходимо нажать на кнопку проверить, чтобы продолжить.
Далее начинается настройка демон Docker на использование systemd для управления cgroups контейнера. Скопировать следующий блок и вставить его в окно терминала каждого узла {Control Panel, kube-02, kube-03} [3]:
mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file",
"log-opts": { "max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
systemctl enable docker systemctl daemon-reload systemctl restart docker
66

Только на узле контроль панели запустить эту команду, чтобы инициализировать Control Panel Kubernetes:
kubeadm init --ignore-preflight-errors=all
Выполнение данной процедуры может занять одну - две минуты.
Перед использованием кластера необходимо настроить инструмент командной строки kubectl, который позволит управлять кластером. Для настройки kubectl находим файл с именем config в каталоге $HOME/.kube.
Создать каталог:
mkdir -p $HOME/.kub
Скопировать конфигурационный файл, сгенерированный kubeadm, в $HOME/.kube/:
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
Изменить владельца файла на текущего пользователя, вошедшего в систему:
chown $(id -u):$(id -g) $HOME/.kube/config
Шаг 3: Присоединить свои узлы к кластеру Kubernetes
Теперь можно присоединиться к любому количеству машин, выполнив команду kubeadm join на каждом узле от имени root.
Чтобы присоединить kube-02 и kube-03 в качестве рабочих узлов к кластеру, нужен токен, сгенерированный командой kubeadm init.
Запустить следующую команду на узле Control Panel:
kubeadm token create --print-join-command
Скопировать выходные данные и запустить их на обоих рабочих узлах
{kube-02, kube-03}.
Когда появится присоединение к рабочим узлам, можно обнаружить следующее сообщение:
This node has joined the cluster:
*Certificate signing request was sent to Control Plane and a response was received.
*The Kubelet was informed of the new secure connection details.
67

Удостовериться в том, что все узлы теперь подключены к Control Panel, запустить следующую команду на узле Control Panel Kubernetes:
kubectl get nodes
Успешный результат будет выглядеть следующим образом:
NAME |
STATUS |
ROLES |
AGE |
VERSION |
kube-01 |
NotReady |
control-plane,master |
2m56s |
v1.x.x |
kube-02 |
NotReady |
<none> |
95s |
v1.x.x |
kube-03 |
NotReady |
<none> |
93s |
v1.x.x |
Шаг 4: Настройка Kubernetes для работы в сети
Надстройки Kubernetes - это модули и службы, реализующие функции кластера. Модули расширяют функциональность Kubernetes. Можно установить дополнения для ряда функций кластера, включая создание сетей и визуализацию.
Установка надстройки Weave Net на Control Panel kube-01 обеспечит подключение к сети и сетевую политику, будет выполнять работу по обе стороны сетевого раздела и не требует внешней базы данных (подробнее о дополнении Weave Net смотрите в документации Weave Works).
Weave-net - это плагин CNI, который предоставляет виртуальную сеть, соединяющую контейнеры docker на нескольких хостах.
По умолчанию Kubernetes поставляется с простым сетевым плагином, который не обладает возможностями наложения сетей.
Далее происходит развертывание сети pod в кластере.
Процесс установки дополнения Weave Net осуществляется следующим образом.
На узле Control Plane необходимо запустить команду kubectl apply, которая создаст все сетевые ресурсы в кластере из предоставленного файла манифеста [3]:
kubectl apply -f https://github.com/weaveworks/weave/releases/download/v2.8.1/weave- daemonset-k8s-1.11.yaml
Результат будет выглядеть так:
serviceaccount "weave-net" created clusterrole "weave-net" created clusterrolebinding "weave-net" created role "weave-net" created
68

rolebinding "weave-net" created daemonset "weave-net" created
Прежде чем двигаться дальше, необходимо проверить готовность DNS. Через одну – две минуты можно запустить команду kubectl get, которая позволяет отобразить ресурсы и распечатать таблицу с наиболее важной информацией об указанных ресурсах:
watch kubectl get pods --all-namespaces
Ctrl-C для выхода.
Успешный результат будет выглядеть следующим образом, каждый контейнер должен быть запущен:
NAMESPACE |
NAME |
READY |
STATUS |
|
RESTARTS |
AGE |
|
|
|
kube-system |
etcd-kube-01 |
1/1 |
Running |
|
0 |
5m |
|
|
|
kube-system |
kube-apiserver-kube-01 |
1/1 |
Running |
|
0 |
6m |
|
|
|
kube-system |
kube-controller-manager-kube-01 |
1/1 |
Running |
|
0 |
5m |
|
|
|
kube-system |
kube-dns-6f4fd4bdf-whbhd |
3/3 |
Running |
|
0 |
6m |
|
|
|
kube-system |
kube-proxy-2hdhk |
1/1 |
Running |
|
0 |
6m |
|
|
|
kube-system |
kube-proxy-tvhjk |
1/1 |
Running |
|
0 |
5m |
|
|
|
kube-system |
kube-proxy-wspmv |
1/1 |
Running |
|
0 |
5m |
|
|
|
kube-system |
kube-scheduler-kube-01 |
1/1 |
Running |
|
0 |
6m |
|
|
|
kube-system |
weave-net-9ghn5 |
2/2 |
Running |
|
1 |
5m |
|
|
|
kube-system |
weave-net-lh8tq |
2/2 |
Running |
|
0 |
5m |
|
|
|
kube-system |
weave-net-qhr25 |
|
|
|
|
|
|
|
|
Необходимо проверить состояние узлов еще раз:
kubectl get nodes
Теперь кластер Kubernetes, работающий на Ubuntu 18.04, запущен и готов к развертыванию приложения для микросервисов.
69