7.0 KiB
Начиная с версии 4.2.0
провайдера была добавлена новая логика работы с k8s кластерами. Заключается она в разделении ответственности между двумя ресурсами:
decort_k8s_cp
- используется для первичного создания и управления control plane кластераdecort_k8s_wg
- используется для управления worker-группами
decort_k8s_cp
- мастер-узел кластера
В отличии от ресурса decort_k8s
не имеет возможности управления worker-группами и может быть создан без указания названия дефолтной группы. При успешном создании ресурса, кластер будет создан без рабочих узлов.
decort_k8s_wg
- worker-группы кластера
Ресурс используется для создания, удаления или изменения рабочих узлов, которых у одного кластера может быть как ни одного, так и множество.
При использовании decort_k8s_cp
не рекомендуется параллельное использование decort_k8s
для управления одним и тем же кластером во избежание проблем с идемпотентностью
Инструкция по миграции созданных кластеров
Ниже приведен пример ресурса, миграция которого будет проведена:
resource "decort_k8s" "cluster" {
name = "tf-wiki"
rg_id = 1649
k8sci_id = 55
extnet_id = 13
wg_name = "wiki-wg"
network_plugin = "flannel"
# Описание мастер-узла
masters {
cpu = 2
ram = 2048
num = 3
disk = 15
}
# Описание дефолтной воркер-группы
workers {
name = "wiki-wg"
cpu = 1
num = 1
ram = 1024
disk = 15
}
# Описание дополнительной воркер-группы
workers {
name = "additional-wg"
cpu = 1
num = 1
ram = 1024
disk = 15
}
}
- Для начала, создадим в файле конфигурации ресурс
decort_k8s_cp
:
resource "decort_k8s_cp" "control_plane" {}
- Выполним команду импортирования с указанием ID кластера:
terraform import decort_k8s_cp.<CP_NAME> <K8s_ID>
Для кластера выше:
terraform import decort_k8s_cp.control_plane 556
2.1: В случае, если в кластере присутствуют worker группы, провайдер напомнит об этом:
Warning: Found worker-group with ID 1353. Make sure to import it to decort_k8s_wg resource if you wish to manage it
Warning: Found worker-group with ID 1354. Make sure to import it to decort_k8s_wg resource if you wish to manage it
- После этого, заполним поля ресурса данными из
decort_k8s
:
resource "decort_k8s_cp" "control_plane" {
name = "tf-wiki"
rg_id = 1649
k8sci_id = 55
extnet_id = 13
network_plugin = "flannel"
# Описание мастер-узла вынесено в корень ресурса
cpu = 2
num = 2048
num = 3
disk = 15
# Данных о рабочих узлов в ресурсе нет - они описываются в decort_k8s_wg
}
- В случае, если есть уже созданные рабочие узлы, стоит добавить ресурсы
decort_k8s_wg
для каждого в конфигурационный файл:
resource "decort_k8s_wg" "<WG1_NAME> {
# Для удобства можно сразу указать k8s_id из ранее созданного ресурса decort_k8s_cp
k8s_id = decort_k8s_cp.<CP_NAME>.k8s_id
}
4.1 Для кластера в примере:
resource "decort_k8s_wg" "wg1" {
k8s_id = decort_k8s_cp.control_plane.k8s_id
name = "wiki-wg"
cpu = 1
num = 1
ram = 1024
disk = 15
}
resource "decort_k8s_wg" "wg2" {
k8s_id = decort_k8s_cp.control_plane.k8s_id
name = "additional-wg"
cpu = 1
num = 1
ram = 1024
disk = 15
}
- Выполним команду
terraform import
(отдельно для каждого ресурса):
terraform import decort_k8s_wg.<WG1_NAME> <WG_ID>#<K8s_ID>
terraform import decort_k8s_wg.wg1 1353#556
terraform import decort_k8s_wg.wg2 1354#556
- В случае успеха, команда
terraform plan
успешно завершится со статусом*:
No changes. Your infrastructure matches the configuration.
*кроме случаев, когда терраформ пытается записать автоматически генерируемые (дефолтные) значения параметров в стейт (например, start меняется с null на true) или ресурс был изменен вне терраформа
-
После успешной миграции стоит удалить описание ресурса
decort_k8s
. -
Теперь k8s кластер находится под полным управлением terraform.
Конф. файл после всех изменений:
resource "decort_k8s_cp" "control_plane" {
name = "tf-wiki"
rg_id = 1649
k8sci_id = 55
extnet_id = 13
network_plugin = "flannel"
# Описание мастер-узла вынесено в корень ресурса
cpu = 2
num = 2048
num = 3
disk = 15
# Данных о рабочих узлов в ресурсе нет - они описываются в decort_k8s_wg
}
resource "decort_k8s_wg" "wg1" {
k8s_id = decort_k8s_cp.control_plane.k8s_id
name = "wiki-wg"
cpu = 1
num = 1
ram = 1024
disk = 15
}
resource "decort_k8s_wg" "wg2" {
k8s_id = decort_k8s_cp.control_plane.k8s_id
name = "additional-wg"
cpu = 1
num = 1
ram = 1024
disk = 15
}
P. S
- После успешной миграции не рекомендуется использовать
decort_k8s
параллельно сdecort_k8s_cp
- это может привести к нежелательным проблемам идемпотентности - При удалении
decort_k8s_cp
удалится как сам кластер, так и все зависимые воркер-группы, а соответственно иdecort_k8s_wg