Создание пользовательского образа узла

Пользовательские образы создаются с помощью HashiCorp Packer версии 1.7.2 или выше и плагина с открытым исходным кодом. Упростить и ускорить создание образа можно с помощью шаблона «cce-image-builder».

Внимание

  • В работе с CCE рекомендуется использовать стандартные образы узлов, которые поддерживаются сервисом по умолчанию. Они тестируются и своевременно обновляются. Это дает лучшую совместимость, стабильность и безопасность.

  • Если нужно создать собственный образ, используйте стандартные образы CCE.

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

  • Будьте внимательны при изменении параметров ядра, так как любое неправильное изменение приведет к снижению эффективности системы.

    Параметры, изменение которых повлияет на производительность:

    • tcp_keepalive_time

    • tcp_max_tw_buckets

    • somaxconn

    • max_user_instances

    • max_user_watches

    • netdev_max_backlog

    • net.core.wmem_max

    • net.core.rmem_max

    При изменении параметров ядра протестируйте модификацию в тестовой среде.

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

Перед началом работы

Перед созданием образа:

  • Создайте виртуальную машину, с помощью которой будет создан образ. Рекомендуется выбрать CentOS 7 и привязать EIP. Внешний IP-адрес нужен для того, чтобы была возможность подключиться к серверу и установить Packer.

  • Получите Access Key и Secret Key.

  • Убедитесь, что в группе безопасности открыт порт 22.

  • Следуйте инструкциям в этом разделе, чтобы избежать непредвиденных ошибок.

  • У вас должны быть привилегии суперпользователя для подключения к виртуальным машинам, созданным из стандартного образа.

Получение Image ID

  1. В консоли CCE нажмите на название кластера.

  2. В меню слева перейдите в раздел Nodes.

  3. В правом верхнем углу нажмите Create Node Pool.

  4. В блоке OS выберите Private Image.

  5. Нажмите View CCE base image information.

  6. Скопируйте Image ID нужного образа.

Создание образа узла

  1. Создайте виртуальную машину с ОС CentOS 7. Она будет использоваться для создания образа.

  2. Подключитесь к созданной виртуальной машине.

  3. Установите Packer.

  4. Проверьте корректность установки Packer с помощью команды проверки версии:

    packer -v
    

    Если установка выполнена верно, на экране появится версия Packer.

  5. Скачайте архив с шаблоном:

    wget https://cce-custom-image.obs.ru-moscow-1.hc.sbercloud.ru/cce-image-builder.zip
    
  6. Распакуйте архив:

    unzip cce-image-builder.zip
    
  7. Перейдите в созданный в результате распаковки каталог:

    cd cce-image-builder
    

    Каталог cce-image-builder содержит:

    • turbo-node.pkr.hcl — шаблон конфигурационного файла для создания образа.

    • scripts/* — скрипты для создания образа с помощью шаблона. Изменения в файлах могут привести к недоступности образа.

    • user-scripts/* — пользовательские скрипты. При создании образа они будут загружены на временный сервер и будут выполнены. В каталоге есть пример файла — example.sh.

    • user-packages/* — каталог с пользовательскими пакетами, который задан в шаблоне. При создании пользовательского образа, он автоматически загружается на временный сервер в каталог /tmp/example.package.

  8. Задайте в шаблоне нужные параметры для создания образа. Конфигурационный файл cce-image-builder/turbo-node.pkr.hcl содержит данные, нужные для создания образа. Подробнее в официальной документации.

    Описание файла turbo-node.pkr.hcl:

    • variables, variable

      turbo-node.pkr.hcl определяет параметры, нужные для создания образа. Вы можете настроить параметры отталкиваясь от реального окружения.

    • packer

      required_plugins определяет зависимости плагинов Packer, включая источник плагина и диапазон версий. При выполнении packer init плагин автоматически загружается и инициализируется:

      packer {
          required_plugins {
             huaweicloud = {
                version = "= 0.4.0"
                source  = "github.com/huaweicloud/huaweicloud"
             }
          }
      }
      
    • source

      Ранее заданные переменные используются для автоматической конфигурации параметров, необходимых для создания ECS.

    • build

      Скрипты выполняются сверху вниз. Поддерживаются такие модули, как модуль загрузки файлов и модуль оболочки выполнения скриптов. Скрипты и файлы хранятся в каталогах cce-image-builder/user-scripts и cce-image-builder/user-packages.

      Пример:

      build {
          sources = ["source.huaweicloud-ecs.builder"]
      
        # Example:
          provisioner "file" {
             source      = "<source file path>"
             destination = "<destination file path>"
          }
      
          provisioner "shell" {
             scripts = [
                "<source script file: step1.sh>",
                "<source script file: step2.sh>"
             ]
          }
      
          provisioner "shell" {
             inline = ["echo foo"]
          }
      }
      
  9. Настройте переменные окружения:

    export REGION_NAME=xxx
    export IAM_ACCESS_KEY=xxx
    export IAM_SECRET_KEY=xxx
    export ECS_VPC_ID=xxx
    export ECS_NETWORK_ID=xxx
    export ECS_SECGRP_ID=xxx
    export CCE_SOURCE_IMAGE_ID=xxx
    

    Переменные

    Описание

    REGION_NAME

    Регион, к которому принадлежит проект. В облаке Cloud.ru Advanced один регион — ru-moscow-1.

    IAM_ACCESS_KEY и IAM_SECRET_KEY

    Access Key и Secret Access Key. Создайте пару ключей AK/SK и удалите их, когда образ будет создан.

    ECS_VPC_ID

    VPC ID — идентификатор VPC. Используется временной виртуальной машиной ECS. Укажите идентификатор того VPC, в котором находится сервер-исполнитель.

    Где найти в консоли

    Чтобы скопировать VPC ID:

    1. В списке всех сервисов нажмите на Virtual Private Cloud.

    2. Выберите VPC, в котором находится сервер-исполнитель.

    3. В блоке VPC Information в поле ID скопируйте идентификатор.

    ECS_NETWORK_ID

    Network ID — идентификатор сети.

    Где найти в консоли

    Чтобы скопировать Network ID:

    1. В списке всех сервисов нажмите Elastic Cloud Server.

    2. В списке виртуальных машин нажмите на название сервера, который вы создали ранее.

    3. Перейдите на вкладку Network Interfaces.

    4. В поле Network ID скопируйте идентификатор сети.

    ECS_SECGRP_ID

    Security Group ID — идентификатор группы безопасности. Используется временной виртуальной машиной. В правилах группы безопасности, которая используется сервером-исполнителем, должен быть разрешен входящий трафик по 22 порту, чтобы сервер-исполнитель смог подключиться к временному серверу.

    Где найти в консоли

    Чтобы скопировать Security Group ID:

    1. В списке всех сервисов нажмите Virtual Private Cloud.

    2. В меню слева перейдите в раздел Access Control → Security Groups.

    3. Нажмите на название группы безопасности сервера-исполнителя.

    4. В поле ID скопируйте идентификатор.

    CCE_SOURCE_IMAGE_ID

    CCE node image ID — актуальный идентификатор стандартного образа, используемого сервисом CCE. Получение Image ID.

    Примечание

    Сохраните значения по умолчанию для остальных параметров. Чтобы изменить значения, воспользуйтесь описанием переменных в файле turbo-node.pkr.hcl и задайте значения с помощью переменных окружения.

    Например, если не указать AZ, зона доступности будет выбрана случайным образом. Если вам нужна конкретная зона доступности, настройте переменную окружения. Это применимо и для других параметров.

    # export PKR_VAR_<variable name>=<variable value>
    export PKR_VAR_ecs_az=xxx
    
    • AZ1 — ru-moscow-1a

    • AZ2 — ru-moscow-1b

    • AZ3 — ru-moscow-1c

    • AZ5 — ru-moscow-1e

  10. Настройте скрипты и файлы.

    Скомпилируйте скрипты и файлы, ссылаясь на файл и модули оболочки, заданные в поле build в файле pkr.hcl. Сохраните скрипты и файлы в каталогах user-scripts и user-packages в cce-image-builder.

    Примечание

    Будьте внимательны при изменении параметров ядра, так как любое неправильное изменение приведет к снижению эффективности системы.

    Параметры, изменение которых повлияет на производительность:

    • tcp_keepalive_time

    • tcp_max_tw_buckets

    • somaxconn

    • max_user_instances

    • max_user_watches

    • netdev_max_backlog

    • net.core.wmem_max

    • net.core.rmem_max

    При изменении параметров ядра протестируйте модификацию в тестовой среде.

  11. Создайте кастомный образ узла. Создание займет 3–5 минут.

    make image
    

    В скрипте packer.sh:

    • Автоматический доступ к hashicorp.com с помощью Packer отключен по умолчанию в целях защиты конфиденциальности и безопасности:

      export CHECKPOINT_DISABLE=false
      
    • Детализированные логи включены по умолчанию. Локальные логи сборки packer_{timestamp}.log указываются для того, чтобы логи могли быть упакованы в каталог var/log во время сборки. Если туда попадает конфиденциальная информация, отключите эту опцию.

      export PACKER_LOG=1
      export PACKER_BUILD_TIMESTAMP=$(date +%Y%m%d%H%M%S)
      export PACKER_LOG_PATH="packer_$PACKER_BUILD_TIMESTAMP.log"
      

      Подробнее о настройке Packer.

    Когда образ будет создан, на экране появится сообщение «Builds finished».

  12. Очистите файлы сборки на виртуальной машине, с помощью которой создавался образ. Особое внимание обратите на данные аутентификации в файле turbo-node.pkr.hcl:

    • Если данные для аутентификации временные, удалите виртуальную машину, на которой создавался образ.

    • Если данные для аутентификации собираются автоматически, настройте их автоматическое удаление.

Запустили Evolution free tier
для Dev & Test
Получить