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.
wiki-terraform-provider-decort/4.5.2/07.01.06-Resource_decort_k8...

32 KiB

Функция доступна в провайдере версии 2.0 и выше.

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

Изменения в 4.4.0

  • добавлено поле extnet_only
  • добавлено поле oidc_cert
  • добавлено поле cloud_init
  • добавлено поле ha_mode
  • добавлено поле cluster_config

Изменения в 4.0.2

  • Добавлена возможность создавать/удалять воркер-группы напрямую из ресурса k8s
  • Исправлены возможные ошибки состояния при модификации воркер-групп

Изменения в 3.4.0

  • В аргументы добавлено опциональное поле labels.
  • В аргументы добавлено опциональное поле taints.
  • В аргументы добавлено опциональное поле annotations.
  • В аргументы добавлено опциональное поле sep_id в блоке masters.
  • В аргументы добавлено опциональное поле sep_pool в блоке masters.
  • В аргументы добавлено опциональное поле sep_id в блоке workers.
  • В аргументы добавлено опциональное поле sep_pool в блоке workers.

Изменения в 3.3.0

  • Добавлен id виртуальной сети, которая используется с кластером k8s.
  • Добавлены описания IP адресов для группы воркеров.
  • Добавлены описания IP адресов для группы мастеров.
  • Добавлены описания IP адресов виртуальной сети, которая присоеденена к группе воркеров.

Работа с 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 в ресурсе decort_k8s:
resource "decort_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 в ресурсе decort_k8s
resource "decort_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 в ресурсе decort_k8s:
resource "decort_k8s" "cluster1" {
   # ...

   cloud_init = file("initconfig.tftpl")

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

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

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

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

Аргументы

Resource функция decort_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.
Если не задано,
то сеть будет выбрана платформой.
cloud_init string Используется на этапе создания вм.
Параметры для утилиты cloud_init, которая используется в платформе DECORT для первичного конфигурирования виртуальной машины после её создания.
cluster_config string используется для определения глобальных настроек и конфигураций для всего кластера. Она включает в себя такие параметры, как имя кластера, настройки DNS, методы аутентификации и другие конфигурации в масштабах кластера. вставьте допустимую строку JSON со всеми уровнями вложенности.
oidc_cert string ssl-сертификат в формате x509 pem
extnet_only bool Использовать только extnet для работы кластера
ha_mode bool Режим высокой доступностью балансировщика нагрузки
start bool Старт/Стоп кластера

Описание блока 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 функция decort_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 функции decort_k8s:

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

    #размер диска в Гбайтах
    #обязательный параметр
    #тип - число
    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"]
  }

  #...Далее можно создавать произвольное кол-во дополнительных 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"]
  }
}

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