VK Data Platform logo
Помощь
Обновлена 10 августа 2026 г. в 10:57

Развертывание кластера Kubernetes из дистрибутива Base Infra

Подготовка кластера Kubernetes с базовой инфраструктурой, необходимой для установки VK Data Platform в версиях Standalone и Standalone в составе VK Private Cloud, выполняется с помощью дистрибутива Base Infra.

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

Распаковка архивов

  1. Подключитесь к деплой-ноде.

  2. Экспортируйте переменную RELEASE_VERSION со значением 55416-baseinfra-26-1:

    $ export RELEASE_VERSION=55416-baseinfra-26-1
  3. Распакуйте архив с артефактами Base Infra:

    $ tar -xvf nexus-${RELEASE_VERSION}.tar && \tar -xf repos_mcs_distr_*.tar.gz
  4. Перейдите в директорию nexus-${RELEASE_VERSION} и распакуйте архив с набором RPM-пакетов:

    $ cd nexus-${RELEASE_VERSION} && \tar xf docker-rpms.tar.gz
  5. Установите Docker:

    $ sudo dnf install -y ./docker-ce/*.rpm$ sudo systemctl enable --now docker$ sudo systemctl status docker$ sudo usermod -aG docker $USER
  6. Выйдите из текущей SSH-сессии и повторно авторизуйтесь в системе.

Установка Nexus

  1. Экспортируйте переменную RELEASE_VERSION со значением 55416-baseinfra-26-1:

    $ export RELEASE_VERSION=55416-baseinfra-26-1
  2. Перейдите в директорию nexus-${RELEASE_VERSION}:

    $ cd nexus-${RELEASE_VERSION}
  3. Задайте объем оперативной памяти, выделенной для работы Nexus:

    $ sed -i 's/--memory="2800m"//g' run_nexus.sh
  4. Получите root-права:

    $ sudo su
  5. Запустите скрипт развертывания Nexus run_nexus.sh:

    # ./run_nexus.sh ${RELEASE_NAME} | tee ~/run_nexus.out

    Если сервер развернут в CorpCloud, скрипт run_nexus.sh завершится с ошибкой. После этого выполните команды:

    # sudo dnf install ansible-2.9.27-202510061155.git0cfcfde6a1.cmpt.el7 createrepo -y# exit

    Если во время работы скрипта возникли ошибки, перед его перезапуском удалите под и том Nexus.

  6. Выйдите из root-сессии:

    # exit
  7. После завершения работы скрипта run_nexus.sh подождите несколько минут, затем проверьте, что Nexus запущен и возвращает список репозиториев:

    $ sudo docker ps$ curl -s localhost:8081/service/rest/v1/repositories$ curl localhost:5553/v2/_catalog

Добавление файла конфигурации репозитория

Выполните следующие шаги на каждом узле, предназначенном для кластера.

  1. Получите root-права:

    $ sudo su
  2. Установите переменную с IP-адресом Nexus:

    # export NEXUS_IP="<IP_ДЕПЛОЙ_НОДЫ>"

    Здесь <IP_ДЕПЛОЙ_НОДЫ> — IP-адрес деплой-ноды с установленным Nexus. Пример: 100.70.18.42.

    Если сервер развернут в CorpCloud, выполните команду alias yum=dnf.

  3. Удалите все существующие файлы репозиториев:

    # find /etc/yum.repos.d/ -name "*.repo" | xargs -i rm -f {}
  4. Создайте файл vkcloud.repo в директории /etc/yum.repos.d/ со следующим содержимым:

Создание файла hosts.yml

Создайте файл hosts.yml и укажите в нем список узлов и их роли. Выберите конфигурацию: один master-узел или три master-узла. Для мультизонального режима раскомментируйте строки с параметрами labels под каждым IP-адресом узла.

Пример содержимого файла:

---all:   children:      standalone_kube:         vars:            etcd_listen_address: "{{ ansible_facts['default_ipv4']['address'] }}"         children:            standalone_corp_kube:               children:                  standalone_corp_kube_etcd:                     hosts:                        <IP-АДРЕС_УЗЛА_1>:                  standalone_kube_master:                     vars:                        kube_components_log:                           dest: "syslog"                     hosts:                        <IP-АДРЕС_УЗЛА_1>:                  standalone_kube_node:                     hosts:                        <IP-АДРЕС_УЗЛА_1>:vars:   ansible_user: <ПОЛЬЗОВАТЕЛЬ>   ansible_ssh_private_key_file: <ПУТЬ_К_КЛЮЧУ>

Здесь:

  • <IP-АДРЕС_УЗЛА_1>, <IP-АДРЕС_УЗЛА_2>, <IP-АДРЕС_УЗЛА_3> — IP-адреса узлов, которые войдут в кластер.
  • <ПОЛЬЗОВАТЕЛЬ> — имя пользователя, от лица которого будет выполняться установка (должен иметь права sudo на всех узлах).
  • <ПУТЬ_К_КЛЮЧУ> — путь к приватному SSH-ключу для подключения к узлам.
  • <ЗОНА> — имя зоны для развертывания в мультизональном режиме.

Подготовка файла vars.yml

  1. Создайте файл vars.yml со следующим содержимым:

  2. Отредактируйте значения в зависимости от конфигурации кластера Kubernetes:

    • <IP-адрес_NEXUS> — IP-адрес сервера Nexus. Пример: 10.20.0.5.
    • <ПОДСЕТЬ_СЕРВИСОВ> — подсеть для сервисов (ClusterIP). Пример: 10.32.0.0/24.
    • <ПОДСЕТЬ_ПОДОВ> — подсеть для IP-адресов подов. Пример: 10.200.0.0/16.
    • <СЕТЕВОЙ_ИНТЕРФЕЙС> — имя сетевого интерфейса для SNAT и kubelet. Пример: ens3.
  3. Если сервер развернут в CorpCloud, в файле vars.yml укажите параметры:

  • kube_etcd_deploy_type: redos.
  • calico_nat_outgoing: true.
  • calico_ipip: Always.
  • <СЕТЕВОЙ_ИНТЕРФЕЙС>: укажите имя сетевого интерфейса для SNAT и kubelet. Чтобы узнать его, выполните команду ip addr. Пример: ens3.
  • <ПОДСЕТЬ_СЕРВИСОВ>: 10.32.0.0/24.
  • <ПОДСЕТЬ_ПОДОВ>: 10.200.0.0/16.

Создание группы томов lvmvg

Для работы с дисками на узлах кластера создайте группу томов lvmvg на каждом узле. Для этого выполните следующие шаги на каждом узле кластера, используя отдельный свободный диск. Пример диска: /dev/vdb:

  1. Инициализируйте физический том:

    $ sudo pvcreate /dev/vdb
  2. Создайте группу томов с именем lvmvg:

    $ sudo vgcreate lvmvg /dev/vdb
  3. Проверьте, что группа томов создана:

    $ sudo vgs$ sudo lvs

Правки Ansible-шаблонов для настройки DNS

Перед развертыванием кластера Kubernetes внесите изменения в шаблоны и плейбуки для корректной работы сервисов с дополнительными DNS-именами и настройками DNS-кеша.

  1. Перейдите в директорию с дистрибутивом:

    $ cd repos_mcs_distr_${RELEASE_VERSION}
  2. Внесите изменения в файлы:

    1. Откройте файлы:

      • ansible-openstack/roles/kube/cluster/defaults/main.yml,
      • ansible-openstack/roles/kube/preflight/defaults/main.yml.
    2. В параметре kube_apiserver_san_default каждого файла добавьте запись:

      - "DNS:kubernetes.default.svc.cluster.local"
    3. Проверьте, что запись появилась в зависимых файлах:

      • ansible-openstack/playbooks/roles/kube/cluster/defaults/main.yml,
      • ansible-openstack/playbooks/roles/kube/preflight/defaults/main.yml.
  3. Внесите изменения в шаблоны и задачи Ansible с помощью следующих команд:

    $ sed -i "s|'DNS:localhost',|'DNS:localhost', 'DNS:kubernetes.default.svc.cluster.local', 'DNS:ciam.local',|" ansible-openstack/roles/kube/cluster/tasks/preinstall.yml $ sed -i "s|'DNS:localhost',|'DNS:localhost', 'DNS:kubernetes.default.svc.cluster.local', 'DNS:ciam.local',|" ansible-openstack/roles/kube/preflight/tasks/preinstall.yml $ sed -i '/^[[:space:]]*kubernetes {{ kube_cluster_name }}/i\      rewrite name exact ciam.local ciam-ingress-nginx-controller.paas-standalone.svc.cluster.local' ansible-openstack/roles/kube/cluster/templates/coredns-manifest.yaml.j2 $ sed -i '/Corefile: |/a\\    local:53 {\\        errors\\        {% if kube_core_dns_nodelocal_dns_query_logs | bool %}\\        log\\        {% endif %}\\        cache {\\            success 9984 30\\            denial 9984 5\\        }\\        reload\\        loop\\        bind {{ kube_pod_dns_addr }}\\        forward . {{ kube_core_dns_floating_ip | join(" ") if kube_core_dns_nodelocal_floating | bool else kube_core_dns_svc_ip }} {\\            force_tcp\\        }\\        prometheus :9253\\        health {{ kube_pod_dns_addr }}:8080\\    }\' ansible-openstack/roles/kube/cluster/templates/node-local-cache.yaml.j2
  4. Перед запуском установки Kubernetes разверните Calico CRDs.

    Шаблоны calico-manifest.yaml.j2 и calicoctl.j2 расположены в дистрибутиве по пути ansible-openstack/roles/kube/cluster/templates/calico/3.30.2/.

    1. Создайте директорию:

      $ export ANSIBLE_DIR="$HOME/ansible-openstack"$ mkdir -p "${ANSIBLE_DIR}/overrides/calico/3.30.2"
    2. Скопируйте файл calico-crds.yaml, полученный от администратора VK Private Cloud, в директорию ${ANSIBLE_DIR}/overrides/calico/3.30.2/.

    3. Проверьте, что копирование прошло успешно:

      $ ls -l "${ANSIBLE_DIR}/overrides/calico/3.30.2/calico-crds.yaml"
    4. Чтобы скопировать файл calico-crds.yaml в директорию шаблонов дистрибутива и добавить в файл cni.yml задачу для развертывания Calico CRDs, выполните скрипт:

    5. Вернитесь в исходную директорию:

      $ cd ..

Развертывание кластера Kubernetes

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

$ ansible-playbook -i <ПУТЬ_К_HOSTS> -e @<ПУТЬ_К_VARS> repos_mcs_distr_${RELEASE_VERSION}/ansible-openstack/playbooks/kube.yml -e env=standalone -l standalone_corp_kube -D

Чтобы передать параметры, обязательно используйте в команде символ @ перед путем к файлу vars.

Здесь:

  • <ПУТЬ_К_HOSTS> — путь к файлу hosts.yml.
  • <ПУТЬ_К_VARS> — путь к файлу vars.yml.

Создание пользователя кластера Kubernetes

  1. Подключитесь по SSH к любому из узлов кластера.

  2. Укажите и выполните скрипт для создания пользователя:

    В результате выполнения скрипта будут созданы пользователь adm с ролью cluster-admin и файл adm-kubeconfig.json для подключения к кластеру от имени этого пользователя.

  3. Скопируйте содержимое файла adm-kubeconfig.json с узла кластера на деплой-ноду в файл ~/.kube/config.

Настройка прохождения трафика между портами в CorpCloud

Настройте прохождение трафика между портами одним из способов:

Получите идентификатор порта каждого узла кластера и добавьте разрешенные адреса:

$ openstack port set --allowed-address ip-address=10.20.0.252/32 <ID_ПОРТА_УЗЛА>$ openstack port set --allowed-address ip-address=10.20.0.253/32 <ID_ПОРТА_УЗЛА>$ openstack port set --allowed-address ip-address=10.20.0.254/32 <ID_ПОРТА_УЗЛА>

Здесь:

  • <ID_ПОРТА_УЗЛА> — идентификатор порта узла кластера. Получите его с помощью команды openstack port list --server <ИМЯ_УЗЛА>.
  • <ИМЯ_УЗЛА_1>, <ИМЯ_УЗЛА_2>, <ИМЯ_УЗЛА_3> — имена или IP-адреса узлов кластера.
  • <ПОДСЕТЬ_УЗЛОВ> — подсеть, в которой находятся узлы кластера. Пример: 10.20.0.0/24.