|
|
Начиная с версии `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` для управления одним и тем же кластером во избежание проблем с идемпотентностью** <br/>
|
|
|
|
|
|
## Инструкция по миграции созданных кластеров
|
|
|
|
|
|
Ниже приведен пример ресурса, миграция которого будет проведена:
|
|
|
```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.<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
|
|
|
```
|
|
|
|
|
|
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" "<WG1_NAME> {
|
|
|
# Для удобства можно сразу указать k8s_id из ранее созданного ресурса decort_k8s_cp
|
|
|
k8s_id = decort_k8s_cp.<CP_NAME>.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.<WG1_NAME> <WG_ID>#<K8s_ID>
|
|
|
```
|
|
|
```
|
|
|
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) или ресурс был изменен вне терраформа*<br/>
|
|
|
|
|
|
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` |