You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
terraform-provider-dynamix/wiki/1.2.1/07.01.06-Resource_dynamix_k...

29 KiB

Resource функция dynamix_k8s служит для управления кластером.

Работа с cluster_config

Для использования cluster_config конфигурации, следует:

  1. Создать файл с расширением .json в рабочей директории.
  2. Описать в созданном файле конфигурацию cluster_config в формате JSON:

cluster_config.json

{
  "apiServer": {
    "extraArgs": {
      "oidc-issuer-url": "https://dex.decs.local/",
      "oidc-client-id": "dex",
      "oidc-username-claim": "email",
      "oidc-groups-claim": "groups",
      "oidc-ca-file": "/etc/kubernetes/ssl/kc-ca.pem"
    }
  }
}
  1. Указать путь до файла cluster_config.json в качестве значения параметра cluster_config в ресурсе dynamix_k8s:
resource "dynamix_k8s" "cluster1" {
   # ...

   cluster_config = file("cluster_config.json")

   # ...
}
  1. Выполнить terraform apply

Работа с oidc__cert

Для работы с oidc_cert следует:

  1. Создать файл с ssl-сертификатом в формате x509 pem c названием ca.crt в рабочей директории

ca.crt

Пример содержания файла ca.crt

-----BEGIN CERTIFICATE-----
MIIDzTCCArWgAwIBAgIUUW9bFlExT8f/gVX4OrYXegInXi0wDQYJKoZIhvcNAQEL
BQAwdjELMAkGA1UEBhMCUlUxDzANBgNVBAgMBk1vc2NvdzEPMA0GA1UEBwwGTW9z
Y293MQwwCgYDVQQKDANBQkMxDDAKBgNVBAsMA0FCQzEMMAoGA1UEAwwDQUJDMRsw
GQYJKoZIhvcNAQkBFgxBQkNAbWFpbC5jb20wHhcNMjMwOTI2MTQ0MzM2WhcNMjQw
OTI1MTQ0MzM2WjB2MQswCQYDVQQGEwJSVTEPMA0GA1UECAwGTW9zY293MQ8wDQYD
VQQHDAZNb3Njb3cxDDAKBgNVBAoMA0FCQzEMMAoGA1UECwwDQUJDMQwwCgYDVQQD
DANBQkMxGzAZBgkqhkiG9w0BCQEWDEFCQ0BtYWlsLmNvbTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBAOUGj6B7sBrAYBuAQ4I0f6plcrLG33cNGzcktZrS
SZRWOMwXzBCUNNOBKXZHnapUAoZW23BllpZ/y50Y01JAggdBPbODw864ZROJMt3P
xlZZJQghraFUF8H/ANsmRzfh3nD98fBSr4YUg2VGEwg+Qvzh2peiNBRer4tD6QuV
BqiJZyUNrz0JUKmFZF/uTM4rNRhmF7y95A49GDZeIzwFFARSMkQPtIjMj8h75fs3
PD41wEkQyV5SSM3YMGQeqp/7ay10ec31s6cn/PBB8bF8PTVYc+hJOfNuVrkm8CqG
w1kzKg+7ztgcCMOEL2yftgckg5PSFMQ+5RPgBieEOj3IDHsCAwEAAaNTMFEwHQYD
VR0OBBYEFPLv18WpzpwIGhqlM2EAHl7TXgNnMB8GA1UdIwQYMBaAFPLv18WpzpwI
GhqlM2EAHl7TXgNnMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEB
ADbH2Y4ExwEllkKrQ+VcyajjPXV9vcG5Ag+/9DUM0aFCO4H0ZzdBKHVCGMwIx5sS
gLSLx2zoT2F3oTHaJ4T9iVx+sBleKZZbpApO51dLaVSiy69cfkZy/GOMiWuEEZPU
UdGTMAAoM1+gqx8n0EsGf96zJZ+PtjHi6RdNmPBnuRRvRRPXQKNLJF1kYDgYlFdH
KxLl/lm/Y0zhV/VNd7OXsV0LAsyrRiNpuyCaniCOTR1ZRkD4UfWkc/bbNgbLjAfb
8Y0SjvSiYpFPE0DQv0ksSrhySJtyCy71UTGzSHI+tRB9LwhnDiijAoT7LnxQgNq8
5IdaZNyYvyGubkczwBrFddU=
-----END CERTIFICATE-----
  1. Указать путь до файла ca.crt в качестве значениея параметра oidc_cert в ресурсе dynamix_k8s
resource "dynamix_k8s" "cluster1" {
   # ...

   oidc_cert = file("ca.crt")

   # ...
}
  1. Выполнить terraform apply

Работа с cloud_init

Cloud Init позволяет запустить ВМ с предустановленными настройками пользователя, группами и доступами. Подробнее про настройку cloud_init можно прочесть по ссылке.

Пароли, указанные в cloud_init не сохраняются на платформе и не отображаются в API!

Для использования cloud_init конфигурации, следует:

  1. Создать файл с расширением .tftpl в рабочей директории.
  2. Описать в созданном файле конфигурацию cloud_init в формате YAML:

initconfig.tftpl

---
users:
- groups: users, wheel
  name: user
  plain_text_passwd: examplePassword
  primary_group: user
  ssh_authorized_keys:
  - ssh-rsa EXAMPLE%id_rsa.pub
  sudo: ALL=(ALL) NOPASSWD:ALL

  1. Указать путь до файла initconfig.tftpl в качестве значения параметра cloud_init в ресурсе dynamix_k8s:
resource "dynamix_k8s" "cluster1" {
   # ...

   cloud_init = file("initconfig.tftpl")

   # ...
}
  1. Выполнить terraform apply

Конфигурация cloud_init применяется только при создании кластера, во всех остальных случаях - игнорируется

Работа в параллельном режиме

Рекомендуется создавать одновременно не более одного экземпляра ресурса. В случае необходимости создания нескольких ресурсов одновременно, необходимо запускать terraform apply/plan в режиме -parallelism=1.

Аргументы

Resource функция dynamix_k8s для создания кластера принимает следующие аргументы:

Аргумент Тип Обязательный Описание
name string ✔️ Наименование кластера,
при изменении - изменяет наименование кластера
rg_id int ✔️ ID ресурсной группы
k8sci_id int ✔️ ID catalogue item
wg_name string ✔️ Имя для первой worker group,
созданной в кластере
network_plugin string ✔️ Плагин сети для кластера. Допустимые значения: flannel, calico, weavenet
labels []string Список меток для дефолтной worker-группы k8s
taints []string Список taints для дефолтной worker-группы k8s
annotations []string Список аннотаций дефолтной worker-группы k8s
masters Struct{} см. ниже Настройка мастер-группы
workers Struct{} см. ниже Настройка worker-групп
extnet_id int ID внешней сети для соединения workers.
Если не задано,
то сеть будет выбрана платформой.
vins_id int ID виртуальной сети для соединения workers.
Если не задано,
то сеть будет выбрана платформой.
cloud_init string Используется на этапе создания вм.
Параметры для утилиты cloud_init, которая используется в платформе DYNAMIX для первичного конфигурирования виртуальной машины после её создания
init_config string Используется для определения настроек и действий, которые должны быть выполнены перед запуском любого другого компонента в кластере, это позволяет вам настраивать такие вещи, как регистрация node, настройка network и другие задачи инициализации
kubelet_config string Используется для настройки поведения и параметров Kubelet, который является агентом primary node, запускаемым на каждом node кластера он включает в себя такие параметры, как IP-адрес node, распределение ресурсов, политики удаления модулей и другие конфигурации, специфичные для Kubelet
kube_proxy_config string Используется для настройки поведения и параметров присоединения node к кластеру, он включает в себя такие параметры, как режим прокси-сервера, диапазоны IP-адресов кластера и другие конфигурации, специфичные для Kube-proxy
cluster_config string Используется для определения глобальных настроек и конфигураций для всего кластера. Она включает в себя такие параметры, как имя кластера, настройки DNS, методы аутентификации и другие конфигурации в масштабах кластера. вставьте допустимую строку JSON со всеми уровнями вложенности
join_config string Используется для настройки поведения и параметров присоединения node к кластеру, он включает в себя такие параметры, как cluster's control plane endpoint, токен и ключ сертификата
oidc_cert string ssl-сертификат в формате x509 pem
with_lb bool Создать кластер с балансировщиком нагрузки
additional_sans []string Дополнительные SAN (Subject Alternative Names) для использования в процессе автоматического выписывания сертификата Кластера Kubernetes, возможность взаимодействовать с кластером по FQDN параметр получает список строк IP-адреса и/или DNS (по формату RFC 1123 c поддержкой wildcard)
lb_sysctl_params []map[string]interface{} Пользовательские значения sysctl для балансировщика нагрузки
extnet_only bool Использовать только extnet для работы кластера
desc string Описание кластера
oidc_cert string ssl-сертификат в формате x509 pem
ha_mode bool Режим высокой доступностью балансировщика нагрузки
start bool Старт/Стоп кластера
permanently bool Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды terraform destroy, то есть только при удалении ресурса

Описание структуры masters

Аргумент Тип Обязательный Описание
num int ✔️ Количество nodes
cpu int ✔️ Количество cpu
ram int ✔️ Количество RAM в Mбайтах
disk int ✔️ Объем boot диска в ГБ
sep_id int Идентификатор SEP
sep_pool string Название SEP pool'а

Описание структуры workers

Аргумент Тип Обязательный Описание
name string ✔️ Наименование воркер-группы
num int ✔️ Количество nodes
cpu int ✔️ Количество cpu
ram int ✔️ Количество RAM в Mбайтах
disk int ✔️ Объем boot диска в ГБ
sep_id int Идентификатор SEP
sep_pool string Название SEP pool'а
labels []string Список labels
annotations []string Список annotations
taints []string Список taints

Возвращаемые значения

В случае успешного выполнения resource функция dynamix_k8s возвращает в указанную при вызове переменную следующие значения:

Параметр Тип Описание
acl Struct{} см. ниже acl
account_id int ID аккаунта
account_name string Имя аккаунта
bservice_id int ID bservice
k8sci_id int ID образа кластера
created_by string Кем был создан ресурс
created_time int Время создания ресурса
deleted_by string Кем был удален ресурс
deleted_time int Время удаления ресурса
extnet_id int ID внешней сети
k8s_ci_name string Имя образа кластера
masters []Struct{} см. ниже Структура компьютов мастеров
workers []Struct{} см. ниже Структура компьютов воркеров
lb_id int ID балансировщика нагрзуки
lb_ip string IP балансировщика нагрзуки
name string Имя ресурса
network_plugin string Сетевой плагин
rg_id int ID ресурсной группы
rg_name string Имя ресурсной группы
status string Статус ресурса
tech_status string Технический статус ресурса
updated_by string Кем был обновлен ресурс
updated_time int Время последнего обновления ресурса
kubeconfig string Конфиг
vins_id int ID виртуальной сети

Описание структуры acl

Параметр Тип Описание
account_acl []Struct{} см. ниже account_acl
k8s_acl []Struct{} см. ниже k8s_acl
rg_acl []Struct{} см. ниже rg_acl

Описание структуры списка acl

Параметр Тип Описание
explicit bool explicit
guid string ID ресурса
right string right
status string Статус ресурса
type string Тип ресурса
user_group_id string ID группы

Описание структуры masters

Параметр Тип Описание
cpu int Кол-во cpu на компьютах master
detailed_info []Struct{} см. ниже Детальная информация masters
disk int ID диска
master_id int ID группы master
name string Имя группы master
num int Кол-во компьютов в группе master
ram int Кол-во Ram на компьютах группы master

Описание структуры workers

Параметр Тип Описание
annotations []string Аннотации группы workers
cpu int Кол-во cpu на компьютах workers
detailed_info []Struct{} см. ниже Детальная информация masters
disk int ID диска
guid string ID ресурса
id int ID группы workers
labels []string Лейблы группы workers
name string Имя ресурса
num int Кол-во компьютов в группе workers
ram int Кол-во Ram на компьютах группы workers
taints []string огранечители группы workers

Описание структуры списка detailed_info

Параметр Тип Описание
compute_id int ID компьюта в составе группы
name string Имя компьюта в составе группы
status string Статус компьюта в составе группы
tech_status string Статус компьюта в составе группы
interfaces []Struct{} см. ниже Список интерфейсов группы
natable_vins_ip string IP NAT
natable_vins_network string IP виртуальной сети

Описание структуры списка interfaces

Параметр Тип Описание
def_gw string Шлюз по умолчанию
ip_address string IP интерфейса

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

Пример вызова resource функции dynamix_k8s:

resource "dynamix_k8s" "cluster" {
  #имя кластера
  #обязательный параметр
  #при изменении - обновляет имя кластера
  #тип - строка
  name = "tftest"

  #id resource group
  #обязательный параметр
  #тип - целое число
  rg_id = 776

  #id catalogue item 
  #обязательный параметр
  #тип - целое число
  k8sci_id = 9

  #сетевой плагин
  #обязательный параметр
  #тип - строка
  network_plugin = "flannel"

  #имя для первой worker group, созданной в кластере
  #обязательный параметр
  #тип - строка
  wg_name = "workers"

  # список labels для дефолтной worker группы
  # опциональный параметр
  # тип - массив строк 
  labels = ["key1=val1", "key2=val2"]

  # список annotations для дефолтной worker группы
  # опциональный параметр
  # В скором времени параметры labels, annotations, taints будут полностью перенесены в структуру workers
  # тип - массив строк 
  annotations = ["key1=val1", "key2=val2"]

  # список taints для дефолтной worker группы
  # опциональный параметр
  # В скором времени параметры labels, annotations, taints будут полностью перенесены в структуру workers
  # тип - массив строк 
  taints = ["key1=value1:NoSchedule", "key2=value2:NoExecute"]

  #настройка мастер node или nodes
  #опциональный параметр
  #максимальное кол-во элементов - 1
  #тип - список нод
  masters {
    #кол-во node (1, 3 или 5)
    #обязательный параметр
    #тип - целое число
    num = 1

    #кол-во cpu
    #обязательный параметр
    #тип - целое число
    cpu = 2

    #кол-во RAM в Мбайтах
    #обязательный параметр
    #тип - целое число
    ram = 2048

    #размер диска в Гбайтах
    #обязательный параметр
    #тип - целое число
    disk = 10

    #идентификатор SEP для создания загрузочных дисков для master узлов
    #опциональный параметр
    #тип - целое число
    sep_id = 3

    #наименование MasterSEPPool используется если установлен master sepId, также может быть пустым
    #опциональный параметр
    #тип - строка
    sep_pool = "data_01"
  }

  #настройка worker группы
  #опциональный параметр
  #Первая указанная воркер-группа должна соответствовать изначально созданной вместе с кластером.
  #labels, annotations, taints для дефолтной worker группы указываются в корне ресурса при создании кластера.
  workers {
    #имя группы
    #обязательный параметр
    #тип - строка
    name = "test"

    #кол-во node
    #обязательный параметр
    #тип - целое число
    num = 1

    #кол-во cpu
    #обязательный параметр
    #тип - целое число
    cpu = 2

    #кол-во RAM в Мбайтах
    #обязательный параметр
    #тип - целое число
    ram = 2048

    #размер диска в Гбайтах
    #обязательный параметр
    #тип - целое число
    disk = 10

    #Идентификатор SEP
    #опциональный параметр
    #тип - целое число
    sep_id = 1010

    #Имя SEP pool'a
    #опциональный параметр
    #тип - строка
    sep_pool = "data01"
  }

  #...Далее можно создавать произвольное кол-во дополнительных worker групп
  #labels, annotations и taints для последующих групп указываются непосредственно в структуре workers
  workers {
    #наименование worker группы
    #обязательный параметр
    #тип - строка
    name = "additional_wg"

    #кол-во node
    #обязательный параметр
    #тип - целое число
    num = 2

    #кол-во cpu
    #обязательный параметр
    #тип - целое число
    cpu = 2

    #кол-во RAM в Мбайтах
    #обязательный параметр
    #тип - целое число
    ram = 4096

    #размер диска в Гбайтах
    #обязательный параметр
    #тип - целое число
    disk = 10

    #идентификатор SEP
    #опциональный параметр
    #тип - целое число
    sep_id = 1010

    #имя SEP pool'a
    #опциональный параметр
    #тип - строка
    sep_pool = "data01"

    #список лейблов
    #опциональный параметр
    #тип - массив строк
    labels = ["label1=value1", "label2=value2"]

    #список аннотаций
    #опциональный параметр
    #тип - массив строк
    annotations = ["key1=value1", "key2=value2"]

    #список taints
    #опциональный параметр
    #тип - массив строк
    taints = ["key1=value1:NoSchedule", "key2=value2:NoExecute"]
  }

  #id extnet
  #опциональный параметр
  #тип - целое число
  extnet_id = 0

  #id vins
  #опциональный параметр
  #тип - целое число
  vins_id = 1234

  #создать Kubernetes cluster с masters nodes с подключенным LB
  #опциональный параметр
  #тип - булев 
  with_lb = true

  #пользовательские значения sysctl для LB
  #опциональный параметр
  #тип - список мап
  lb_sysctl_params = [{ text = "1", text = "some" }]

  #позволяет создать схему отказоустройчивой LB
  #опциональный параметр
  #тип - булев
  ha_mode = true

  #дополнительные SAN (Subject Alternative Names) для использования в процессе автоматического выписывания сертификата Кластера Kubernetes;
  #возможность взаимодействовать с кластером по FQDN
  #параметр получает список строк  IP-адреса и/или DNS (по формату RFC 1123 c поддержкой wildcard)
  #опциональный параметр
  #тип - массив строк
  additional_sans = ["192.168.201.0", "192.168.201.1"]

  #используется для определения настроек и действий, которые должны быть выполнены перед запуском любого другого компонента в кластере
  #это позволяет вам настраивать такие вещи, как регистрация node, настройка network и другие задачи инициализации
  #опциональный параметр
  #тип - строка
  init_config = "{JSON string}"

  #используется для определения глобальных настроек и конфигураций для всего кластера
  #он включает в себя такие параметры, как имя кластера, настройки DNS, методы аутентификации и другие конфигурации в масштабах кластера
  #опциональный параметр
  #тип - строка
  cluster_config = "{JSON string}"

  #используется для настройки поведения и параметров Kubelet, который является агентом primary node, запускаемым на каждом node кластера
  #он включает в себя такие параметры, как IP-адрес node, распределение ресурсов, политики удаления модулей и другие конфигурации, специфичные для Kubelet
  #опциональный параметр
  #тип - строка
  kubelet_config = "{JSON string}"

  #используется для настройки поведения и параметров присоединения node к кластеру
  #он включает в себя такие параметры, как режим прокси-сервера, диапазоны IP-адресов кластера и другие конфигурации, специфичные для Kube-proxy
  #опциональный параметр
  #тип - строка
  kube_proxy_config = "{JSON string}"

  #используется для настройки поведения и параметров присоединения node к кластеру
  #он включает в себя такие параметры, как cluster's control plane endpoint, токен и ключ сертификата
  #опциональный параметр
  #тип - строка
  join_config = "{JSON string}"

  #описание кластера
  #опциональный параметр
  #тип - строка
  desc = "description"

  #перечень аргументов для cloud-init создаваемым группам узлов Worker
  #необязательный параметр
  #тип - файл с форматом в виде yaml
  cloud_init = file("initconfig.tftpl")

  #при создании кластре использовать подключение только к сети ExtNet
  #опциональный параметр
  #тип - булев
  extnet_only = true

  #добавить ssl-сертификат в формате x509 pem
  #необязательный параметр
  #тип - файл с форматом в виде x509 pem
  oidc_cert = file("ca.crt")

  #запуск,остановка кластера
  #опциональный параметр
  #тип - булев
  start = true

  #команда destroy удаляет кластер без возможности восстановления
  #опциональный параметр
  #тип - булев
  permanently = true

}

После успешного завершения такого вызова dynamix_k8s в переменной dynamix_k8s.cluster будут сохранены возвращаемые значения.