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

Миграция кластеров

Специализированная консольная утилита предназначена для выполнения следующих задач:

  • Миграция: Перенос кластеров с версии Nova Universe v2.1.x на v3.1.x, а также между различными инсталляциями Nova Universe v3.1.x.

  • Синхронизация: Отображение в интерфейсе Cluster Manager тех кластеров, которые были созданы вручную через nova-ctl в Nova Universe v3.1.x.

Перед началом работы убедитесь, что соблюдены следующие требования:

  • Перенос поддерживается только для инсталляций, развернутых в оффлайн-режиме.

  • Версия мигрируемого кластера должна быть 7.4.0 или выше.

  • Утилита миграции включена в состав Nova Universe, начиная с версии 3.1.0

  • Проверьте сетевые правила для целевой инсталляции Nova Universe v3.1.x

  • Выполните дополнительную настройку сетевых правил для АРМ (Автоматического Рабочего Места) пользователя.

    Сетевые правила для АРМ пользователя при выполнении миграции:

    Источник

    Адресат

    Тип трафика

    Порт/Протокол

    Описание

    АРМ пользователя платформы

    Nova Universe

    Входящий

    443/tcp

    Nova-management-api

1. Как проходит процесс миграции

Процесс миграции автоматизирован и состоит из трех ключевых этапов:

  1. Ручной сбор параметров кластеров: необходимо подготовить файлы для работы утилиты и разместить их в структурированном виде в директории import. Это позволяет утилите получить первичный доступ к инфраструктуре.

  2. Экспорт данных: утилита подключается к исходным кластерам, собирает необходимые конфигурации и формирует файл данных clusters.json в директории import.

  3. Импорт данных (Миграция): на основе полученного файла утилита создает задачи на миграцию в целевой среде Nova Universe.

После завершения процесса мигрированный кластер полностью переходит на использование ресурсов (артефактов) новой инсталляции Nova Universe v3.1.x.

2. Инструкция по переносу кластера с помощью консольной утилиты

  1. Скачайте консольную утилиту на локальную машину.

    Перед запуском убедитесь, что с данной локальной машины имеется прямой сетевой доступ до всех мигрируемых кластеров.

    • Выберите файл, соответствующий вашей ОС:

      ОС

      Имя файла

      Linux

      nova-backup-amd64-linux-v0.0.1

      Windows

      nova-backup-amd64-win-v0.0.1

      macOS

      nova-backup-arm64-macos-v0.0.1

      macOS

      nova-backup-amd64-macos-v0.0.1

    • Выполните команду для скачивания утилиты:

      $ wget https://repo.universe.mycompany.local/packages/universe/utils/nova-backup/nova-backup-amd64-linux-v0.0.1 -O nova-backup

      Где:

      • universe.mycompany.local - DNS домен установленного Nova Universe v3

      • nova-backup-amd64-linux-v0.0.1 - название файла для нужной ОС

  2. Сохраните данные по кластерам в директорию import, которые необходимо мигрировать в новый Nova Universe. Структура директории import имеет вид:

    import/
    	clusters/
    		{cluster_name}/             // Произвольное имя или идентификатор кластера, который необходимо мигрировать. 1 папка должна содержать данные одного мигрируемого кластера.
    			cluster.json            // Дополнительные данные о кластере
    			kubeadmin.conf          // Параметры для подключения к кластеру, полученные из nova-ctl при создании кластера.
    			ssh.json                // Опционально. Задает параметры подключения по ssh для этого кластера. Если не указан, будут использованы данные из ssh/ssh.json
    		...
    	ssh/
    		{Имя приватного ключа}      // Приватный ключ без кодирования. Может быть несколько файлов, если для конкретных кластеров будут указаны уникальные данные SSH.
    		ssh.json                    // Параметры SSH для подключения по умолчанию.

    Структура файлов:

    • cluster.json - файл, содержащий дополнительные данные о кластере: токены Starvault, учетные данные для подключения к кластеру, параметры для подключения к K2Cloud (если используется данный провайдер). Структура имеет следующий вид:

      {
          "vaultRootToken": "s.RqB1ccBoahllhe9NbvAZnVwe",           // Корневой токен Starvault, содержится в файле starvault-tokens.txt, полученном при установке кластра
          "vaultUnsealToken":[
              "NnvySyTB2E2kFtlPIlty8+hY7wstgEAn11CgHLpgRlKE",       // Токены для расшифровки хранилища StarVault, содержатся в файле starvault-tokens.txt, полученном при установке кластра
              "PJBn7s2SCw5vhNNpqBwLnnNkJwZUlRm4MNkl5OKOeViB",
              "UmIVGouri4cklCKW18YVld+X42w0uQ76BxJ5q2BJ3zFe",
              "/bd/v829eCeyC+Uwtv/sGP5OOJkZ0uRPlM0g4ieHBCv8",
              "EjZDrB2EQcZhO+OFsSTB6TR57l563hlKj/tvbPF4pRHF"
          ],
      	"clusterAdminCredentials": {                               // Данные учетной записи администратора кластера для авторизации, содержится в файле oauth-credentials.txt, полученном при
      																  установке кластра
              "username": "kubeadmin",
              "password": "1NjTv2WH1@RcQ1@g"
          },
          "k2CloudCredentials": {                                    // Параметры для подключения к K2Cloud через Terraform
              "awsRegion": "en-us",
              "awsAccessKeyId": "ID",
              "awsSecretAccessKey": "accesskey"
          }
      }
    • kubeadmin.conf - файл, содержащий параметры для подключения к кластеру, полученные из nova-ctl при создании кластера из одноименного файла.

    • ssh.json - файл, в котором указаны параметры SSH для подключения:

      • в import/ssh/ssh.json - параметры SSH по умолчанию.

      • в import/clusters/{cluster_name}/ssh.json - опциональный файл для указания параметров подключения конкретно к указанному кластеру. Если файл не указан, будут использованы параметры из import/ssh/ssh.json. Структура имеет следующий вид:

        {
        	"privateSshKey": "nova-packer",                   // Имя файла приватного ключа. Файл с самим ключом должен лежать в папке import/ssh с тем же именем.
        	"privateSshKeyPassword": null,                    // Пароль приватного ключа. null - не задан
        	"sshUser": "nova-user"                            // Имя пользователя для подключения по ssh
        }
  3. Выполните команду в консоли на локальной машине:

    nova-backup --basedomain universe.mycompany.local -d ./import --password password --username admin -v --debug

    Где:

    • --basedomain - домен Nova Universe, в который необходимо перенести кластер

    • --password - пароль Cluster Manager (по умолчанию - password)

    • --username - имя пользователя Cluster Manager (admin)

    • -d - путь к папке, в которую были сохранены данные о кластерах (import/)

    • -v - подробный режим вывода

    • --debug - запуск миграции в режиме отладки

  4. После успешного выполнения 1 этапа будет сформирован файл cluster.json в корне директории import, который содержит всю информацию о мигрируемом кластере. Этот файл нужен для выполнения следующего этапа работы утилиты - непосредственной миграции кластера.

  5. После запуска процедуры миграции будет отображено:

    Importing clusters
    	db471c35-5810-4534-bf1b-eb8cef3e27f4 => task 1 https://cluster-manager.universe.mycompany.local/tasks/1
        ac3dce39-e3b3-44a8-a2f4-607456916504 => task 2 https://cluster-manager.universe.mycompany.local/tasks/2

    Где:

    • db471c35-5810-4534-bf1b-eb8cef3e27f4 - идентификатор мигрируемого кластера

    • task 1 - номер задачи в Cluster Manager, в рамках которого происходит миграция

    • https://cluster-manager.universe.mycompany.local/tasks/1 - HTTP URL для просмотра статуса задачи в Cluster Manager

  6. Перейдите в веб-интерфейс Cluster Manager, чтобы отслеживать процесс миграции.

  7. После успешного выполнения задачи перейдите в консоль мастер-узла и выполните следующие операции:

    • Выполните обновление kube-proxy:

      kubeadm init phase addon kube-proxy --config /etc/kubernetes/kubeadm_init_config.yaml
    • Выполните обновление control-plane:

      TMP_CONFIG=/tmp/kubeadm.yaml
      
      cat >"$TMP_CONFIG" <<EOF
      $(kubectl get cm -n kube-system kubeadm-config \
        -o jsonpath='{.data.ClusterConfiguration}')
      ---
      apiVersion: kubeadm.k8s.io/v1beta3
      kind: InitConfiguration
      patches:
        directory: /etc/kubernetes/patches/
      EOF
      
      kubeadm init phase control-plane all --config "$TMP_CONFIG"
      
      rm -rf "$TMP_CONFIG"
  8. По завершении миграции всех кластеров вы можете удалить исходный Nova Universe.