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.3/07.01.06-Resource_decort_k8...

33 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 Старт/Стоп кластера
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 функция 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 будут сохранены возвращаемые значения.