# Установка Нам потребуется виртуальная машина для административных задач - jump host. C нее будем выполнять все операции по администрированию кластера. Пользователь, под которым будет проводится настройка должен иметь привилегии администратора и разрешения для запуска sudo. ## Настройка узла администрирования (jump host) ### Установка необходимых пакетов На jump хост необходимо установить следующие пакеты: ```bash sudo apt-get install mc htop sudo apt-get install -y kubectl sudo apt-mark hold kubectl sudo apt install nfs-common ``` ```{tip} Версия kubectl должна соответствовать версии в платформе kubernetes или быть новее ``` ### Настройка работы с docker образами Если требуется работа с образами из docker регистра ```bash sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin sudo usermod -aG docker $USER ``` #### Insecure Docker Registry Если кластер запускается в закрытой сети, docker регистр может не использовать SSL (Insecure Docker Registry). Запуск Insecure Docker Registry для хранения своих docker-образов не самый лучший вариант с точки зрения безопасности, но порой это самое простое и разумное решение в закрытых сетях. Для настройки нужно изменить (или создать, если такового нет) конфигурационный файл /etc/docker/daemon.json, добавив в него следующие строки: ```json { "insecure-registries" : ["myregistry.example.local:1234"] } ``` , где myregistry.example.local:1234 - адрес и порт локального докер регистра скрипт для создания файла: ```bash cat < Debian GNU/Linux 11 (bullseye) 5.10.0-27-amd64 containerd://1.6.27 k8s-worker01 Ready 46d v1.29.1 0.0.0.0 Debian GNU/Linux 11 (bullseye) 5.10.0-27-amd64 containerd://1.6.27 k8s-worker02 Ready 46d v1.29.1 0.0.0.0 Debian GNU/Linux 11 (bullseye) 5.10.0-27-amd64 containerd://1.6.27 k8s-worker03 Ready 46d v1.29.1 0.0.0.0 Debian GNU/Linux 11 (bullseye) 5.10.0-27-amd64 containerd://1.6.27 ``` ### Установка утилиты Nscli `Nscli` автоматизирует работу по развертыванию кластера Global. Установка: ```bash #Скачиваем из репозитория cd ~ wget --backups=1 --user=<пользователь> --ask-password "https://repo.global-system.ru/artifactory/general/ru/bitec/gs-ctk-nscli/SNAPSHOT/gs-ctk-nscli-SNAPSHOT.zip" unzip -o gs-ctk-nscli-SNAPSHOT.zip -d nscli ``` где <пользователь> - учетная запись, полученная через контактное лицо технической поддержки. ```{tip} В закрытой среде требуется установить все пакеты, указанные в скрипте ~/nscli/bin/installpkg.sh вручную ``` Перейдите в каталог с утилитой и выполняем первичную установку ```bash cd ~/nscli # выполняем скрипты установки ./bin/install.sh ``` Jump хост готов к работе. ## Настройка рабочего пространства в kubernetes Для настройки подключаемся по ssh к jump хосту Перейдите в каталог с утилитой ```bash cd ~/nscli ``` Запустите мастер создания манифеста рабочего пространства ```bash ./namespace.sh create_install_scripts ``` В режиме диалога введите параметры рабочего пространства: - Имя рабочего пространства - имя воркспейса, который будет создан в kubernetes - Адрес докер регистра - адрес ресурса с хранилищем образов (Публичный докер регистр Global: dockerhub.global-system.ru) - Имя файла для хранения мастер ключа - полный путь с именем файла, в котором будет храниться мастер ключ для шифрования паролей - Пользователь для авторизации докера - имя пользователя для авторизации, при анонимном доступе поле можно оставить пустым. - Пароль для авторизации докера - пароль для авторизации в регистре (вводится два раза) - Тип репозитория - тип репозитория, по умолчанию nfs - Имя сервера nfs - указываем ip адрес или доменное имя заранее настроенного NFS сервеа - Путь - путь для подключения тома Пример работы мастера создания манифеста: ```text k8sadmin@k8s-terminal02:~/nscli$ ./namespace.sh create_install_scripts Введите имя рабочего пространства:gs-cluster-k8s Введите адрес докер регистра:dockerhub.global-system.ru Для безопасного хранения паролей необходимо сгенерировать приватный ключ. Укажите имя файла для хранения мастер ключа:/home/k8sadmin/.gs-ctk.priv Введите пользователя для авторизации докера:userk8s Введите пароль для авторизации докера:********** Введите пароль для авторизации докера:********** Выберите тип репозитория:nfs Необходимо задать параметры для Network File System Введите имя сервера:0.0.0.0 Введите путь:/mnt/nfs/gs-cluster-k8s k8sadmin@k8s-terminal02:~/nscli$ ``` Разрешите запуск скрипта установки рабочего пространства ```bash chmod +x ~/nscli/workspace/install_scripts/gs-cluster-k8s/install.sh ``` Создайте рабочее пространство ```bash ~/nscli/workspace/install_scripts/gs-cluster-k8s/install.sh ``` После выполнения скрипта будет создано рабочее пространство и будет запущен под управления кластером `nsctl` ```text namespace/gs-cluster-k8s created secret/docker-registry-secret created configmap/values created role.rbac.authorization.k8s.io/worker created rolebinding.rbac.authorization.k8s.io/worker-pods created deployment.apps/nsctl created ``` ## Подготовка комплекта приложений appkit Комплект приложений определяет перечень артефактов, необходимых для разворачивания кластера системы Global ERP: - Дистрибутив сервера приложений `globalserver.zip` - Образ прикладного решения `applib.zip` - Конфигурация сервера приложений - Конфигурация менеджера заданий - Конфигурация балансировщика haproxy Для создания комплекта приложений используйте каталог `~/nscli/workspace/appkit/v1` ```bash mkdir -p ~/nscli/workspace/appkit/v1/ ``` Подготовте и загрузите в каталог дистрибутивы и конфигурационные файлы. Подготовте комплект приложений для работы ```bash ./appkit.sh push --namespace gs-cluster-k8s --source workspace/appkit/v1 --destination appkits/v1 ``` Утилита автоматически упакует комплект приложений и создаст контрольные суммы ```text Загружен файл:globalserver.zip Загружен файл:profile.zip Загружен файл:applib.zip ``` ## Работа с постоянными томами Данные в кластере Kubernetes могут храниться несколькими способами: непосредственно в контейнере или на томах (volumes). При хранении данных в контейнере возникают проблемы: - При сбое или остановке контейнера данные теряются. - Данные контейнера недоступны для других контейнеров, даже если все контейнеры находятся в одном поде. Чтобы решить эти проблемы, используются тома Kubernetes. Тома имеют разный жизненный цикл в зависимости от сценария использования: - У временных томов (ephemeral volume, EV) жизненный цикл совпадает с жизненным циклом пода. Когда под, использующий такой том, прекращает свое существование, том тоже удаляется. Временные тома могут использоваться только одним подом, поэтому объявление томов происходит непосредственно в манифесте пода. - У постоянных томов (persistent volume, PV) свой жизненный цикл, не зависящий от жизненного цикла пода. Благодаря разделению жизненных циклов такие тома можно переиспользовать позднее с другими подами. Для работы с постоянными томами поды и другие рабочие нагрузки используют Persistent Volume Claim (PVC). Кластеру Глобал ERP потребуется постоянный том для хранения метрик. Kubernetes поддерживает разные типы хранилищ, ниже представлен пример хранилища на основе локального каталога. ```yaml apiVersion: v1 kind: PersistentVolume metadata: name: local-pv-50 spec: capacity: storage: 50Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Delete storageClassName: local-storage local: path: /mnt/disks/disk1 nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - k8s-worker01 ``` ```bash cat < и \ на корректные ```yaml apiVersion: v1 kind: Secret metadata: name: db-user-secret namespace: gs-cluster-k8s type: kubernetes.io/basic-auth stringData: username: password: ``` ```bash cat < password: EOF ``` ```bash kubectl apply -f ~/nscli/workspace/db-user-secret.yaml ``` - Создайте секрет с токеном планировщика, заменив значение шаблона \ на корректное ```yaml apiVersion: v1 kind: Secret metadata: name: scheduler-token-secret namespace: gs-cluster-k8s data: private.key: ``` ```bash cat < EOF ``` ```bash kubectl apply -f ~/nscli/workspace/scheduler-token-secret.yaml ``` ## Сервис аккаунт для получения метрик cAdvisor - Создайте сервис аккаунт ```yaml apiVersion: v1 kind: ServiceAccount metadata: name: prometheus-cadvisor namespace: gs-cluster-k8s ``` ```bash cat <