Монтирование бакетов Yandex Object Storage к файловой системе хостов Yandex Data Processing
В сервисе Yandex Data Processing вы можете использовать для настройки хостов скрипты инициализации (initialization actions).
С их помощью можно автоматизировать установку и настройку программы GeeseFS, позволяющей хостам кластера Yandex Data Processing монтировать бакеты Yandex Object Storage через FUSE
Чтобы настроить GeeseFS:
- Подготовьте скрипт инициализации.
- Создайте кластер, использующий скрипт инициализации.
- Проверьте доступность бакета.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру:
-
Создайте сервисный аккаунт с ролями
dataproc.agent
иdataproc.provisioner
. -
Создайте бакет Object Storage.
-
Предоставьте сервисному аккаунту доступ на чтение из бакета. Для этого воспользуйтесь одним из способов:
-
Настройте ACL бакета и выдайте сервисному аккаунту разрешение
READ
.Сервисный аккаунт получит доступ на чтение только к указанному бакету.
-
Назначьте сервисному аккаунту роль
storage.viewer
.Сервисный аккаунт получит доступ на чтение ко всем бакетам в каталоге.
-
-
Создайте NAT-шлюз для подсети, в которой будет создан кластер Yandex Data Processing.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации data-processing-init-actions-geesefs.tf
.В этом файле описаны:
- сеть;
- подсеть;
- таблица маршрутизации;
- NAT-шлюз;
- группа безопасности и правила, необходимые для подключения к кластеру Yandex Data Processing;
- сервисный аккаунт с ролями, которые требуются для работы с бакетом Object Storage и кластером Yandex Data Processing;
- статический ключ сервисного аккаунта для управления бакетом Object Storage;
- бакет Object Storage;
- кластер Yandex Data Processing.
-
Укажите в файле
data-processing-init-actions-geesefs.tf
значения параметров:dp_network_name
— имя сети для кластера Yandex Data Processing;dp_subnet_name
— имя подсети для кластера Yandex Data Processing;dp_sg_name
— имя группы безопасности для кластера Yandex Data Processing;dp_sa_folder_id
— идентификатор каталога, в котором будет создана инфраструктура и кластер Yandex Data Processing;dp_sa_name
— имя сервисного аккаунта для кластера Yandex Data Processing и бакета Object Storage;dp_bucket_name
— имя бакета Object Storage;dataproc_name
— имя кластера Yandex Data Processing;ssh-path
— путь к файлу публичного SSH-ключа для кластера Yandex Data Processing.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Подготовьте скрипт инициализации
-
Создайте файл скрипта инициализации
geesefs_mount.sh
, принимающий два позиционных аргумента — имя бакета Object Storage и директорию в файловой системе хоста, куда он должен быть смонтирован.#!/bin/bash set -e BUCKET=$1 MOUNT_POINT=$2 # Загрузка GeeseFS wget https://github.com/yandex-cloud/geesefs/releases/latest/download/geesefs-linux-amd64 -O /opt/geesefs chmod a+rwx /opt/geesefs mkdir -p "${MOUNT_POINT}" # Подготовка скрипта, выполняющегося при каждой загрузке BOOT_SCRIPT="/var/lib/cloud/scripts/per-boot/80-geesefs-mount.sh" echo "#!/bin/bash" >> ${BOOT_SCRIPT} echo "/opt/geesefs -o allow_other --iam ${BUCKET} ${MOUNT_POINT}" >> ${BOOT_SCRIPT} chmod 755 ${BOOT_SCRIPT} # Запуск скрипта ${BOOT_SCRIPT}
-
Загрузите файл
geesefs_mount.sh
в созданный ранее бакет Object Storage.
Создайте кластер, использующий скрипт инициализации
Создайте кластер Yandex Data Processing со следующими параметрами:
-
В поле Версия выберите версию
2.0
. -
В поле Сервисный аккаунт выберите сервисный аккаунт, созданный ранее.
-
В поле Пользовательские скрипты нажмите кнопку Добавить и задайте параметры скрипта:
-
В поле URI укажите путь к файлу скрипта в бакете, например:
s3a://<имя_бакета>/geesefs_mount.sh
-
В поле Аргументы укажите имя созданного ранее бакета и точку монтирования
/mnt/test
. Аргументы указываются на отдельных строках:<имя_бакета> /mnt/test
-
-
В поле Имя бакета выберите бакет, созданный ранее.
-
В меню Подкластеры включите в настройках опцию Публичный доступ. Это позволит подключаться к хостам подкластеров без использования промежуточной виртуальной машины.
-
В файле
data-processing-init-actions-geesefs.tf
укажите значение переменнойcreate_cluster
=1
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Проверьте доступность бакета
-
После того, как кластер перейдет в статус Alive, подключитесь по SSH от имени пользователя
ubuntu
к любому из его хостов. -
Чтобы убедиться в успешном монтировании бакета, выполните команду:
ls /mnt/test
В результате будет выведен список объектов, хранящихся в корневом каталоге бакета. В данном случае — имя файла
geesefs_mount.sh
.
Удалите созданные ресурсы
Совет
Перед удалением инфраструктуры удалите вручную все объекты из бакета.
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Yandex Data Processing.
- Если для доступа к хостам кластера использовались статические публичные IP-адреса, освободите и удалите их.
- Удалите бакет Object Storage.
- Удалите сервисный аккаунт.
-
В терминале перейдите в рабочую директорию с конфигурационным файлом
data-processing-init-actions-geesefs.tf
. -
Удалите ресурсы с помощью команды:
terraform destroy
-
Введите слово
yes
и нажмите Enter.Все ресурсы, которые были описаны в конфигурационном файле
data-processing-init-actions-geesefs.tf
, будут удалены.