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.
terraform-provider-decort/wiki/4.6.4/05.07-Миграция-k8s-кластеро...

180 lines
7.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

Начиная с версии `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`