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.

23 KiB

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

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

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

**Данный способ управления кластерами стал предпочтительным с версии провайдера 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 Кол-во ВМ в мастер-узле
enable bool Флаг доступности кластера
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, то есть только при удалении ресурса
restore bool Флаг восстановления кластера

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

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

Параметр Тип Описание
acl Struct{} см. ниже acl
account_id int ID аккаунта
account_name string Имя аккаунта
address_vip Struct{} см. ниже Адреса VIP
bservice_id int ID bservice
enable bool Флаг доступности кластера
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 виртуальной сети
restore bool Флаг восстановления кластера

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

  #объем 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"

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

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

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

  #создать схему отказоустойчивой LB
  #опциональный параметр
  #по умолчанию - false
  #тип - булев
  #используется при создании
  #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
  #опциональный параметр
  #по умолчанию - false
  #тип - булев
  #используется при создании
  #extnet_only = true

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

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

  #пользовательские значения sysctl для LB
  #опциональный параметр
  #тип - массив мап
  #используется при создании и обновлении
  #lb_sysctl_params = [{ key1 = "value1", key2 = "value2" }]

  #флаг для удаления k8s_cp, без возможности восстановления
  #опциональный параметр
  #тип - булев
  #по умолчанию - true
  #используется при удалении
  #permanently = true

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

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