added migration, k8s_cp pages and updated kvmvm_list sample
179
05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md
Normal file
179
05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md
Normal file
@@ -0,0 +1,179 @@
|
||||
Начиная с версии `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`
|
||||
@@ -10,6 +10,7 @@ _Data source_ функция **decort_kvmvm_list** принимает следу
|
||||
| includedeleted | bool| :x: | Включить в результат удаленные ресурсы |
|
||||
| page | int | :x: | Номер страниц |
|
||||
| size | int | :x: | Размер страницы |
|
||||
| ignore_k8s | bool | :x: | При значении true - показать все ВМ, не относящиеся к любому из кластеров k8s |
|
||||
|
||||
## Возвращаемые значения
|
||||
В случае успешного выполнения _data source_ функция **decort_kvmvm_list** возвращает в указанную при вызове переменную, в поле _items_ массив, каждый элемент которого состоит из следующих параметров:
|
||||
@@ -144,6 +145,9 @@ data "decort_kvmvm_list" "kvmvm_list" {
|
||||
includedeleted = false
|
||||
page = 1
|
||||
size = 10
|
||||
|
||||
# Показать все ВМ, включая ВМ внутри k8s кластеров
|
||||
ignore_k8s = false
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
Функция доступна в провайдере версии 4.2.0 и выше.
|
||||
|
||||
_Resource_ функция **decort_k8s_cp** служит для управления control plane кластера k8s. Функция позволяет:
|
||||
- Создать кластер
|
||||
- Удалить кластер
|
||||
- Настроить мастер-узел
|
||||
- Изменить кол-во ВМ в мастер-узле
|
||||
|
||||
Созданный с помощью данного ресурса кластер не имеет стандартных рабочих узлов и логики управления ими. Для управления worker-группами используется отдельный ресурс `decort_k8s_wg`. <br/>
|
||||
**!** При удалении ресурса `decort_k8s_cp` удалится сам кластер и все зависимые ресурсы (worker-группы) <br/>
|
||||
**!** При использовании `decort_k8s_cp` не рекомендуется параллельное использование `decort_k8s` для управления одним и тем же кластером во избежание проблем с идемпотентностью
|
||||
|
||||
**Данный способ управления кластерами стал предпочтительным с версии провайдера 4.2.0 - для упрощения процесса миграции обратитесь к статье. (ссылка)**
|
||||
|
||||
## Аргументы
|
||||
_Resource_ функция **decort_flipgroup** принимает следующие аргументы:
|
||||
|
||||
| Аргумент | Тип | Обязательный | Описание |
|
||||
| --- | --- | :---: | --- |
|
||||
| name | string | :heavy_check_mark: | Наименование кластера |
|
||||
| k8sci_id | int | :heavy_check_mark: | ID k8s CI |
|
||||
| network_plugin | string | :heavy_check_mark: | Плагин сети ("flannel", "weavenet" или "calico") |
|
||||
| rg_id | int | :heavy_check_mark: | ID ресурсной группы |
|
||||
| num | int | :heavy_check_mark: | Кол-во ВМ в мастер-узле (1 или 3) |
|
||||
| cpu | int | :x: | Кол-во ядер для мастер-узла |
|
||||
| ram | int | :x: | Кол-во RAM (в мб) для мастер-узла |
|
||||
| disk | int | :x: | Размер диска мастер-узла |
|
||||
| sep_id | int | :x: | Storage Endpoint ID мастер-узла |
|
||||
| sep_pool | string | :x: | SEP пул мастер-узла |
|
||||
| with_lb | bool | :x: | Создать кластер с/без балансировщика нагрузки |
|
||||
| extnet_id | int | :x: | ID внешний сети для подключения worker'ов |
|
||||
| desc | string | :x: | Описание кластера |
|
||||
| start | bool | :x: | Старт/Стоп кластера |
|
||||
|
||||
## Возвращаемые значения
|
||||
|
||||
В случае успешного выполнения _resource_ функция **decort_k8s_cp** возвращает в указанную при вызове переменную следующие значения:
|
||||
|
||||
| Параметр | Тип | Описание |
|
||||
| --- | --- | --- |
|
||||
| acl | Struct{} [см. ниже](#описание-структуры-списка-acl) | acl |
|
||||
| account_id | int | ID аккаунта |
|
||||
| account_name | string | Имя аккаунта |
|
||||
| bservice_id | int | ID bservice |
|
||||
| k8sci_id | int | ID образа кластера |
|
||||
| k8s_id | int | ID кластера |
|
||||
| detailed_info | Struct{} [см.ниже](#описание-структуры-списка-detailed_info) | Информация о ВМ внутри мастер-узла |
|
||||
| master_id | int | ID мастер-узла |
|
||||
| master_name | string | Наименование мастер-узла |
|
||||
| num | int | Кол-во ВМ в мастер-узле (1 или 3) |
|
||||
| cpu | int | Кол-во ядер для мастер-узла |
|
||||
| ram | int | Кол-во RAM (в мб) для мастер-узла |
|
||||
| disk | int | Размер диска мастер-узла |
|
||||
| sep_id | int | Storage Endpoint ID мастер-узла |
|
||||
| sep_pool | string | SEP пул мастер-узла |
|
||||
| created_by | string | Кем был создан ресурс |
|
||||
| created_time | int | Время создания ресурса |
|
||||
| deleted_by | string | Кем был удален ресурс |
|
||||
| deleted_time | int | Время удаления ресурса |
|
||||
| extnet_id | int | ID внешней сети |
|
||||
| k8s_ci_name | string | Имя образа кластера |
|
||||
| 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
|
||||
|
||||
| Параметр | Тип | Описание |
|
||||
| --- | --- | --- |
|
||||
| explicit | bool | explicit |
|
||||
| guid | string | ID ресурса |
|
||||
| right | string | right |
|
||||
| status | string | Статус ресурса |
|
||||
| type | string | Тип ресурса |
|
||||
| user_group_id | string | ID группы |
|
||||
|
||||
### Описание структуры списка detailed_info
|
||||
|
||||
| Параметр | Тип | Описание |
|
||||
| --- | --- | --- |
|
||||
| compute_id | int | ID компьюта в составе группы |
|
||||
| name | string | Имя компьюта в составе группы |
|
||||
| status | string | Статус компьюта в составе группы |
|
||||
| tech_status | string | Статус компьюта в составе группы |
|
||||
| interfaces | []Struct{} [см. ниже](#описание-структуры-списка-interfaces) | Список интерфейсов группы |
|
||||
| natable_vins_ip | string | IP NAT |
|
||||
| natable_vins_network | string | IP виртуальной сети |
|
||||
|
||||
### Описание структуры списка interfaces
|
||||
|
||||
| Параметр | Тип | Описание |
|
||||
| --- | --- | --- |
|
||||
| def_gw | string | Шлюз по умолчанию |
|
||||
| ip_address | string | IP интерфейса |
|
||||
|
||||
## Пример использования
|
||||
Пример вызова _resource_ функции **decort_k8s_cp**:
|
||||
```terraform
|
||||
resource "decort_k8s_cp" "cp" {
|
||||
# Название кластера
|
||||
# Обязательный параметр
|
||||
# string
|
||||
name = <NAME>
|
||||
|
||||
# K8sCI ID
|
||||
# Обязательный параметр
|
||||
# int
|
||||
k8sci_id = <ID>
|
||||
|
||||
# Плагин сети (flannel, weavenet или calico)
|
||||
# Обязательный параметр
|
||||
# string
|
||||
network_plugin = "flannel"
|
||||
|
||||
# ID ресурсной группы
|
||||
# Обязательный параметр
|
||||
# int
|
||||
rg_id = <ID>
|
||||
|
||||
# Кол-во ядер мастер-узла
|
||||
# Опциональный параметр
|
||||
# int
|
||||
cpu = 2
|
||||
|
||||
# Объем RAM мастер-узла
|
||||
# Опциональный параметр
|
||||
# int
|
||||
ram = 2048
|
||||
|
||||
# Кол-во ВМ мастер-узла (1 или 3)
|
||||
# Опциональный параметр
|
||||
# int
|
||||
num = 1
|
||||
|
||||
# Размер диска мастер-узла
|
||||
# Опциональный параметр
|
||||
# int
|
||||
disk = 10
|
||||
|
||||
# Описание кластера
|
||||
# Опциональный параметр
|
||||
# string
|
||||
desc = "<DESCRIPTION>"
|
||||
|
||||
# ID внешней сети
|
||||
# Опциональный параметр
|
||||
# id
|
||||
extnet_id = <ID>
|
||||
|
||||
# Storage Endpoint ID
|
||||
# Опциональный параметр
|
||||
# id
|
||||
sep_id = <ID>
|
||||
|
||||
# SEP Pool
|
||||
# Опциональный параметр
|
||||
# string
|
||||
sep_pool = <POOL>
|
||||
|
||||
# Старт/Стоп кластера
|
||||
# Опциональный параметр
|
||||
# bool
|
||||
start = <BOOL>
|
||||
|
||||
# Создать кластер с/без балансировщика нагрузки
|
||||
# Опциональный параметр
|
||||
# bool
|
||||
with_lb = <BOOL>
|
||||
}
|
||||
```
|
||||
|
||||
После успешного завершения такого вызова **decort_k8s_cp** в переменной `decort_k8s_cp.cp` будут сохранены возвращаемые значения.
|
||||
Reference in New Issue
Block a user