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.21-Resource_dynamix_k...

21 KiB

Resource функция dynamix_k8s_cp служит для управления control plane кластера k8s. Функция позволяет:

  • Создать кластер
  • Удалить кластер
  • Настроить мастер-узел
  • Изменить кол-во ВМ в мастер-узле

Созданный с помощью данного ресурса кластер не имеет стандартных рабочих узлов и логики управления ими. Для управления worker-группами используется отдельный ресурс dynamix_k8s_wg.
! При удалении ресурса dynamix_k8s_cp удалится сам кластер и все зависимые ресурсы (worker-группы)
! При использовании dynamix_k8s_cp не рекомендуется параллельное использование dynamix_k8s для управления одним и тем же кластером во избежание проблем с идемпотентностью

**Данный способ управления кластерами стал предпочтительным с версии провайдера 4.2.0 - для упрощения процесса миграции обратитесь к **статье.**

Работа с 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

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

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

Аргументы

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

Аргумент Тип Обязательный Описание
name string ✔️ Наименование кластера
k8sci_id int ✔️ ID k8s CI
network_plugin string ✔️ Плагин сети ("flannel", "weavenet" или "calico")
rg_id int ✔️ ID ресурсной группы
num int Кол-во ВМ в мастер-узле
cpu int Кол-во ядер для мастер-узла
chipset string Тип эмулируемой системы
ram int Кол-во RAM (в мб) для мастер-узла
disk int Размер диска мастер-узла
sep_id int Storage Endpoint ID мастер-узла
sep_pool string SEP пул мастер-узла
with_lb bool Создать кластер с/без балансировщика нагрузки
extnet_id int ID внешний сети для подключения worker'ов
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
additional_sans []string Дополнительные SAN (Subject Alternative Names) для использования в процессе автоматического выписывания сертификата Кластера Kubernetes, возможность взаимодействовать с кластером по FQDN параметр получает список строк IP-адреса и/или DNS (по формату RFC 1123 c поддержкой wildcard)
lb_sysctl_params []map[string]interface{} Пользовательские значения sysctl для балансировщика нагрузки
desc string Описание кластера
oidc_cert string ssl-сертификат в формате x509 pem
extnet_only bool Использовать только extnet для работы кластера
ha_mode bool Режим высокой доступностью балансировщика нагрузки
start bool Старт/Стоп кластера
permanently bool Мгновенное удаление виртуальной машины, минуя корзину. Параметр считывается только при использовании команды terraform destroy, то есть только при удалении ресурса

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

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

Параметр Тип Описание
acl Struct{} см. ниже acl
account_id int ID аккаунта
account_name string Имя аккаунта
address_vip Struct{} см. ниже Адреса VIP
bservice_id int ID bservice
k8sci_id int ID образа кластера
k8s_id int ID кластера
detailed_info Struct{} см.ниже Информация о ВМ внутри мастер-узла
master_id int ID мастер-узла
master_name string Наименование мастер-узла
num int Кол-во ВМ в мастер-узле
cpu int Кол-во ядер для мастер-узла
ram int Кол-во RAM (в мб) для мастер-узла
disk int Размер диска мастер-узла
sep_id int Storage Endpoint ID мастер-узла
sep_pool string SEP пул мастер-узла
created_by string Кем был создан ресурс
created_time int Время создания ресурса
deleted_by string Кем был удален ресурс
deleted_time int Время удаления ресурса
extnet_id int ID внешней сети
k8s_ci_name string Имя образа кластера
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

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

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

Параметр Тип Описание
backend_ip string IP адрес данного узла во внутренней сети
frontend_ip string IP адрес данного узла во внешней сети

Описание структуры списка 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_cp:

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

  #K8sCI ID
  #обязательный параметр
  #тип - целое число
  k8sci_id = 55

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

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

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

  #тип эмулируемой системы
  #опциональный параметр
  #тип - строка
  chipset = "i440fx"

  #объем RAM мастер-узла
  #опциональный параметр
  #тип - целое число
  ram = 2048

  #кол-во ВМ мастер-узла (1, 3 или 5)
  #опциональный параметр
  #тип - целое число
  num = 1

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

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

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

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

  #storage Endpoint ID
  #опциональный параметр
  #тип - целое число
  sep_id = 0

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

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

  #создать кластер с/без балансировщика нагрузки
  #опциональный параметр
  #тип - булев
  with_lb = true

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

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

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

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

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

}

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