Модуль Terraform для Proxmox

от автора

Всем привет, я не блогер и не люблю писать посты и блоги, пока.

Решил найти решение для Terraform и Proxmox. После не долгих поисков нашёл провайдер под названием terraform-provider-proxmox. Так как на русском документации не было ни где решил перевести документацию о ресурсах на русский язык как мог. Думаю что кому ни будь будет полезно и избавит от дополнительного труда.

Описание LXC Resource

Этот «ресурс terraform» позволяет создавать контейнеры Proxmox LXC и управлять ими.

Примеры использования

Базовый пример

resource "proxmox_lxc" "basic" {    target_node  = "pve"    hostname     = "lxc-basic"    ostemplate   = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"    password     = "BasicLXCContainer"    unprivileged = true    // Terraform will crash without rootfs defined    rootfs {      storage = "local-zfs"      size    = "8G"    }    network {      name   = "eth0"      bridge = "vmbr0"      ip     = "dhcp"    }  }

Пример с несколькими точками монтирования

-> Указав параметр `local-lvm:12` для атрибута  `mountpoint.storage` в первом блоке `mountpoint` ниже, автоматически создаст том для контейнера. Больше ниформации о монторовании томов смотрите на [Storage Backed Mount Points](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_storage_backed_mount_points).

resource "proxmox_lxc" "multiple_mountpoints" {    target_node  = "pve"    hostname     = "lxc-multiple-mountpoints"    ostemplate   = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"    unprivileged = true    ostype       = "ubuntu"    ssh_public_keys = <<-EOT      ssh-rsa <public_key_1> user@example.com      ssh-ed25519 <public_key_2> user@example.com    EOT    // Terraform will crash without rootfs defined    rootfs {      storage = "local-zfs"      size    = "8G"    }    // Storage Backed Mount Point    mountpoint {      key     = "0"      slot    = 0      storage = "local-lvm"      mp      = "/mnt/container/storage-backed-mount-point"      size    = "12G"    }    // Bind Mount Point    mountpoint {      key     = "1"      slot    = 1      storage = "/srv/host/bind-mount-point"      // Без определения 'volume' Proxmox попытается создать том       // со значением 'storage' + : + 'size' (без завершающей буквы G) - например.      // "/srv/host/bind-mount-point:256".      // Такое поведение, похоже, вызвано ошибкой в провайдере.      volume  = "/srv/host/bind-mount-point"      mp      = "/mnt/container/bind-mount-point"      size    = "256G"    }    // Device Mount Point    mountpoint {      key     = "2"      slot    = 2      storage = "/dev/sdg"      volume  = "/dev/sdg"      mp      = "/mnt/container/device-mount-point"      size    = "32G"    }    network {      name   = "eth0"      bridge = "vmbr0"      ip     = "dhcp"      ip6    = "dhcp"    }  }

LXC с расширенными функциями

resource "proxmox_lxc" "advanced_features" {    target_node  = "pve"    hostname     = "lxc-advanced-features"    ostemplate   = "local:vztmpl/ubuntu-20.04-standard_20.04-1_amd64.tar.gz"    unprivileged = true    ssh_public_keys = <<-EOT      ssh-rsa <public_key_1> user@example.com      ssh-ed25519 <public_key_2> user@example.com    EOT    features {      fuse    = true      nesting = true      mount   = "nfs;cifs"    }    // Terraform will crash without rootfs defined    rootfs {      storage = "local-zfs"      size    = "8G"    }    // NFS share mounted on host    mountpoint {      slot    = "0"      storage = "/mnt/host/nfs"      mp      = "/mnt/container/nfs"      size    = "250G"    }    network {      name   = "eth0"      bridge = "vmbr0"      ip     = "10.0.0.2/24"      ip6    = "auto"    }  }

Пример простого клонирования

resource "proxmox_lxc" "basic" {    target_node = "pve"    hostname    = "lxc-clone"    #id of lxc container to clone    clone       = "8001"  }

Описание аргументов

Обязательные (Required)

При использовании должны быть использованы следующие аргументы:

  • `target_node` — Строка определяющая узел вертуализации.

Произвольные (Optional)

-> Хотя следующие аргументы необязательны, у некоторых есть дочерние аргументы, которые требуются при использовании родительского аргумента (например, аргумент `name` в атрибуте `network` ). Такие дочерние атрибуты помечены как «(required)«.

Следующие аргументы могут использоваться выборочно при использованиии данного ресурса:

  • `ostemplate` — [Обозначение образа](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_volumes) указывающее на шаблон ОС или файл резервной копии

  • `arch` — Устанавливает тип архитектуры ОС в контейнере. По умолчанию это `»amd64″`.

  • `bwlimit` — Число для переопределения ограничения пропускной способностиI/O указывается в KiB/s.

  • `clone` — Идентификатор клонируемого контейнера

  • `clone_storage` — Целевое хранилище для полного клонирования.

  • `cmode` — Настраивает режим консоли. `»tty»` Пытается установить соединение с одним из доступных TTY устройств. `»console»`  Пытается  подключиться `/dev/console`. `»shell»` просто вызывает оболочку внутри контейнера (без входа в систему). По умолчанию `»tty»`.

  • `console` — Определяет подключать ли консольное устройство к контейнеру. По умолчанию `true`.

  • `cores` — Определяет колличество ядер выделеных контейнеру. Контейнер может использовать все доступные ядра по умолчанию.

  • `cpulimit` Значение ограничения на использования CPU . По умолчанию не ограничено `0` .

  • `cpuunits` — Значение веса(приоритета) при использовании CPU для контейнера. По умолчанию `1024`.

  • `description` — Описание контейнера отображаемое в WEB-интерфейсе


  • `features` — Объект, позволяющий контейнеру получать доступ к расширенным функциям.

    • fuse — Логический параметр включающий монирование Документации по «HA»


      • `hagroup` — Идентификатор группы HA (требуется что бы параметр `hastate` был определён!). Смотрите  [Документацию по HA](https://pve.proxmox.com/pve-docs/chapter-ha-manager.html#ha_manager_resource_config) для получения подробной информации.

      • `hookscript` — Строка, содержащая [идентификатор тома для скрипта](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#_hookscripts_2), который будет выполняться на различных этапах в течение всего срока службы контейнера. Сценарий должен быть исполняемым файлом. 

      • `hostname` — Определяет имя узла _»HOSTNAME»_ контейнера.

      • `ignore_unpack_errors` — Логическое значение, определяющее, игнорируются ли ошибки извлечения шаблона при создании контейнера.

      • `lock` — Строка для блокировки или разблокировки виртуальной машины.

      • `memory` — Число, определяющее объем оперативной памяти, назначаемый контейнеру (в МБ).


      • `mountpoint` — Объект, определяющий том, который будет использоваться в качестве точки монтирования контейнера. Может быть задан несколько раз.

        • `mp` (required) — Путь к точке монтирования, видимый изнутри контейнера. Путь не должен содержать символических ссылок по соображениям безопасности.

        • `size` (required) — Размер (на пример `»1T»`, `»1G»`, `»1024M»`, `»1048576K»`).  Обратите внимание, что это значение доступно только для чтения.(возможно имеется в виду что тома доступны только для чтения.)

        • `slot` (required) -Строка, содержащая число, идентифицирующее точку монтирования (т.е. `n` в [`mp[n]`](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pct_mount_points)).

        • `key` (required) — Число, идентифицирующее точку монтирования (т.е. `n` в [`mp[n]`](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pct_mount_points)).

        • `storage` (required) — Строка содержащая том (volume), каталог (directory), или   устройство (device) которое должно быть подключено в контейнер (по пути определяемому `mp`). Например `local-lvm`, `local-zfs`, `local` и т.д.

        • `acl` — Логическое значение для включения поддержки ACL. По умолчанию — `false`.

        • `backup` — Параметр включающий резервное копирование для смонтированного устройства. По умолчанию — `false`.

        • `quota` -Логическое значение для включения пользовательских квот внутри контейнера.

        • По умолчанию — `false`.

        • `replicate` — Параметр определяет будет ли реплицироваться устройсво. По умолчанию —  `false`.

        • `shared` — Параметр определяющий доступность устройства на всех узлах. Default is `false`.


      • `nameserver` — IP адрес сервера имён для использования в контейнере.Если не указаны ни `nameserver`, ни `searchdomain`, то по умолчанию будут использоваться значения хоста Proxmox.

      • `network` — Объект, определяющий сетевой интерфейс для контейнера. Может быть задан несколько раз.

        • `name` (required) — Имя сетевого интерфейса, видимое изнутри контейнера (например, `»eth0″`).

        • `bridge` — Сетевой мост, к которому подключается сетевой интерфейс (например, `»vmbr0″`).

        • `firewall` — Параметр включающий Firewall на интерфейсе контейнера.

        • `gw` — IPv4 адрес шлюза сети.

        • `gw6` — IPv6 адрес шлюза сети.

        • `hwaddr` — Строка устанавливающая MAC-адрес сетевого интерфейса с неустановленным индивидуальным/групповым битом. Определяется автоматически, если не задано.

        • `ip` — IPv4-адрес сетевого интерфейса. Может быть статическим задаётся в формате `»CIDR»`, автоматически `»dhcp»`, или в ручную в ОС контейнера `»manual»`.

        • `ip6` — IPv4-адрес сетевого интерфейса.  Может быть статическим задаётся в формате `»CIDR»`, автоматически `»dhcp»`, `»auto»`, или в ручную в ОС контейнера `»manual»`.

        • `mtu` — Строковый параметр для установка MTU для сетевого интерфейса.

        • `rate` — Числовой параметр для установки ограничения трафика (Mbps).

        • `tag` — Числовой параметр устанавливает значение тега  `VLAN` для сетевого интерфейса. По умолчанию устанавливается в `0`.


      • `onboot` — Логический параметр определяющий будет ли контейнер запускаться при загрузке гипервизора. По умолчанию `false`.

      • `ostype` — Тип операционной системы, используемый LXC для установки и конфигурирования контейнера. Если не задано, определяется автоматически.

      • `password` — Строковый параметр для установки пароля пользователя *root*.

      • `pool` — Имя пула ресурса Proxmox в который необходимо включить контейнер.

      • `protection` — Логический параметр установки флага `protection` для контейнера. Запрещает удаление/обновление контейнера и его дисков. Значение по умолчанию `false`.

      • `restore` — Лигический параметр помечающий операции создания/обновления как задачи восствновления.


      • `rootfs` — Объект для конфигурации монтирования корневой файловой системы. Можно определить лишь раз.

        • `size` (required) — Размер базового тома. необходимо в конце укзать еденицу измерения T, G, M, или K (например `»1T»`, `»1G»`, `»1024M»`, `»1048576K»`). Note that this is a read only value.

        • `storage` (required) — Строковый параметр содержащий том, каталог, или устройство которое будет смонтировано в контейнер (по пути определённому `mp`). Например `local-lvm`, `local-zfs`, `local` и т.д.


      • `searchdomain` — Строковый параметр для установки поискового домена. Если не указаны ни `name server`, ни `search domain`, по умолчанию будут использоваться значения хоста Proxmox.

      • `ssh_public_keys` -Многострочный параметр предназначеный для установки публичной части SSH ключа. Для установки используется [синтаксис heredoc](https://www.terraform.io/docs/configuration/expressions/strings.html#heredoc-strings).

      • `start` — Логический параметр определяющий будет ли запущен контейнер после создания. По умолчанию `false`.

      • `startup` —  [Поведение контейнера при запуске и выключении.](https://pve.proxmox.com/pve-docs/pve-admin-guide.html#pct_startup_and_shutdown).

      • `swap` — Числовой параметр задающей объем памяти подкачки, доступной контейнеру. По умолчанию `512`.

      • `tags` — Метка контейнера. Это всего лишь информация.

      • `template` — Логический параметр, определяющий, является ли этот контейнер шаблоном.

      • `tty` — Числовой параметр определяющий количество доступных TTY для контейнера. По умолчанию `2`.

      • `unique` — Логический параметр определяющий будет ли присвоен уникальный случайный адрес ethernet.

      • `unprivileged` — Логический параметр предписывающий запускаться ли контейнеру от имени непривилегированного пользователя. По умолчанию  `false`.

      • `vmid` — Числовой параметр определяющий идентификатор контейнера VMID. Если значение установлено в `0`, то будет использоваться следующий свободный VMID. По умолчанию `0`.

      Никакие дополнительные атрибуты этим ресурсом не эксплуатируются.

      LXC я использовал и с проблемами не сталкивался всё работало отлично. Свой опыт и какие то инструкции описывать не буду, так как там и описывать нечего особенно.

      Описание по VM в следующей «статье».


ссылка на оригинал статьи https://habr.com/ru/articles/743334/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *