29 KiB
Resource функция dynamix_k8s служит для управления кластером.
Работа с cluster_config
Для использования cluster_config конфигурации, следует:
- Создать файл с расширением
.json
в рабочей директории. - Описать в созданном файле конфигурацию 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"
}
}
}
- Указать путь до файла
cluster_config.json
в качестве значения параметраcluster_config
в ресурсеdynamix_k8s
:
resource "dynamix_k8s" "cluster1" {
# ...
cluster_config = file("cluster_config.json")
# ...
}
- Выполнить
terraform apply
Работа с oidc__cert
Для работы с oidc_cert следует:
- Создать файл с 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-----
- Указать путь до файла
ca.crt
в качестве значениея параметраoidc_cert
в ресурсеdynamix_k8s
resource "dynamix_k8s" "cluster1" {
# ...
oidc_cert = file("ca.crt")
# ...
}
- Выполнить
terraform apply
Работа с cloud_init
Cloud Init позволяет запустить ВМ с предустановленными настройками пользователя, группами и доступами. Подробнее про настройку cloud_init можно прочесть по ссылке.
Пароли, указанные в cloud_init не сохраняются на платформе и не отображаются в API!
Для использования cloud_init конфигурации, следует:
- Создать файл с расширением
.tftpl
в рабочей директории. - Описать в созданном файле конфигурацию 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
- Указать путь до файла
initconfig.tftpl
в качестве значения параметраcloud_init
в ресурсеdynamix_k8s
:
resource "dynamix_k8s" "cluster1" {
# ...
cloud_init = file("initconfig.tftpl")
# ...
}
- Выполнить
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
будут сохранены возвращаемые значения.