Создание пользовательского образа узла
Пользовательские образы создаются с помощью 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=xxxAZ1 — 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
- Создание образа узла