Начиная с версии `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` для управления одним и тем же кластером во избежание проблем с идемпотентностью**
## Инструкция по миграции созданных кластеров Ниже приведен пример ресурса, миграция которого будет проведена: ```terraform 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 } } ``` 1. Для начала, создадим в файле конфигурации ресурс `decort_k8s_cp`: ```terraform resource "decort_k8s_cp" "control_plane" {} ``` 2. Выполним команду импортирования с указанием ID кластера: ``` terraform import decort_k8s_cp. ``` Для кластера выше: ``` 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 ``` 3. После этого, заполним поля ресурса данными из `decort_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 } ``` 4. В случае, если есть уже созданные рабочие узлы, стоит добавить ресурсы `decort_k8s_wg` для каждого в конфигурационный файл: ```terraform resource "decort_k8s_wg" " { # Для удобства можно сразу указать k8s_id из ранее созданного ресурса decort_k8s_cp k8s_id = decort_k8s_cp..k8s_id } ``` 4.1 Для кластера в примере: ```terraform 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 } ``` 5. Выполним команду `terraform import` (отдельно для каждого ресурса): ``` terraform import decort_k8s_wg. # ``` ``` terraform import decort_k8s_wg.wg1 1353#556 terraform import decort_k8s_wg.wg2 1354#556 ``` 6. В случае успеха, команда `terraform plan` успешно завершится со статусом*: ``` No changes. Your infrastructure matches the configuration. ``` **кроме случаев, когда терраформ пытается записать автоматически генерируемые (дефолтные) значения параметров в стейт (например, start меняется с null на true) или ресурс был изменен вне терраформа*
7. После успешной миграции стоит удалить описание ресурса `decort_k8s`. 8. Теперь k8s кластер находится под полным управлением terraform. ### Конф. файл после всех изменений: ```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 1. После успешной миграции **не рекомендуется** использовать `decort_k8s` параллельно с `decort_k8s_cp` - это может привести к нежелательным проблемам идемпотентности 2. При удалении `decort_k8s_cp` удалится как сам кластер, так и все зависимые воркер-группы, а соответственно и `decort_k8s_wg`