Создание пользовательского образа узла
Пользовательские образы создаются с помощью 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.
-
Убедитесь, что в группе безопасности открыт порт 22.
-
Следуйте инструкциям в этом разделе, чтобы избежать непредвиденных ошибок.
-
У вас должны быть привилегии суперпользователя для подключения к виртуальным машинам, созданным из стандартного образа.
Получение Image ID
-
В консоли CCE нажмите на название кластера.
-
В меню слева перейдите в раздел Nodes.
-
В правом верхнем углу нажмите Create Node Pool.
-
В блоке OS выберите Private Image.
-
Нажмите View CCE base image information.
-
Скопируйте Image ID нужного образа.
Создание образа узла
-
Создайте виртуальную машину с ОС CentOS 7. Она будет использоваться для создания образа.
-
Проверьте корректность установки Packer с помощью команды проверки версии:
packer -vЕсли установка выполнена верно, на экране появится версия Packer.
-
Скачайте архив с шаблоном:
wget https://cce-custom-image.obs.ru-moscow-1.hc.sbercloud.ru/cce-image-builder.zip -
Распакуйте архив:
unzip cce-image-builder.zip -
Перейдите в созданный в результате распаковки каталог:
cd cce-image-builderКаталог cce-image-builder содержит:
-
turbo-node.pkr.hcl — шаблон конфигурационного файла для создания образа.
-
scripts/* — скрипты для создания образа с помощью шаблона. Изменения в файлах могут привести к недоступности образа.
-
user-scripts/* — пользовательские скрипты. При создании образа они будут загружены на временный сервер и будут выполнены. В каталоге есть пример файла — example.sh.
-
user-packages/* — каталог с пользовательскими пакетами, который задан в шаблоне. При создании пользовательского образа, он автоматически загружается на временный сервер в каталог /tmp/example.package.
-
-
Задайте в шаблоне нужные параметры для создания образа. Конфигурационный файл 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"]}}
-
-
Настройте переменные окружения:
export REGION_NAME=xxxexport IAM_ACCESS_KEY=xxxexport IAM_SECRET_KEY=xxxexport ECS_VPC_ID=xxxexport ECS_NETWORK_ID=xxxexport ECS_SECGRP_ID=xxxexport 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, в котором находится сервер-исполнитель.
Где найти в консолиECS_NETWORK_ID
Network ID — идентификатор сети.
Где найти в консолиECS_SECGRP_ID
Security Group ID — идентификатор группы безопасности. Используется временной виртуальной машиной. В правилах группы безопасности, которая используется сервером-исполнителем, должен быть разрешен входящий трафик по 22 порту, чтобы сервер-исполнитель смог подключиться к временному серверу.
Где найти в консоли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
-
-
Настройте скрипты и файлы.
Скомпилируйте скрипты и файлы, ссылаясь на файл и модули оболочки, заданные в поле 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
При изменении параметров ядра протестируйте модификацию в тестовой среде.
-
-
Создайте кастомный образ узла. Создание займет 3–5 минут.
make imageВ скрипте packer.sh:
-
Автоматический доступ к hashicorp.com с помощью Packer отключен по умолчанию в целях защиты конфиденциальности и безопасности:
export CHECKPOINT_DISABLE=false -
Детализированные логи включены по умолчанию. Локальные логи сборки packer_{timestamp}.log указываются для того, чтобы логи могли быть упакованы в каталог var/log во время сборки. Если туда попадает конфиденциальная информация, отключите эту опцию.
export PACKER_LOG=1export PACKER_BUILD_TIMESTAMP=$(date +%Y%m%d%H%M%S)export PACKER_LOG_PATH="packer_$PACKER_BUILD_TIMESTAMP.log"
Когда образ будет создан, на экране появится сообщение «Builds finished».
-
-
Очистите файлы сборки на виртуальной машине, с помощью которой создавался образ. Особое внимание обратите на данные аутентификации в файле turbo-node.pkr.hcl:
-
Если данные для аутентификации временные, удалите виртуальную машину, на которой создавался образ.
-
Если данные для аутентификации собираются автоматически, настройте их автоматическое удаление.
-
- Перед началом работы
- Получение Image ID
- Создание образа узла