From d14d8904eff6d70263c205c3a55820365cea831d Mon Sep 17 00:00:00 2001 From: Tim Tkachev Date: Thu, 8 Jun 2023 12:50:04 +0300 Subject: [PATCH] added migration, k8s_cp pages and updated kvmvm_list sample --- ...астеров-на-версию-4.2.0.md | 179 +++++++++++++++++ ...ии-о-списке-компьютов.md | 4 + ...ение-control-plane-кластера.md | 181 ++++++++++++++++++ 3 files changed, 364 insertions(+) create mode 100644 05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md create mode 100644 07.01.21-Resource-функция-decort_k8s_cp-управление-control-plane-кластера.md diff --git a/05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md b/05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md new file mode 100644 index 0000000..a1ab8ff --- /dev/null +++ b/05.07-Миграция-k8s-кластеров-на-версию-4.2.0.md @@ -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` для управления одним и тем же кластером во избежание проблем с идемпотентностью**
+ +## Инструкция по миграции созданных кластеров + +Ниже приведен пример ресурса, миграция которого будет проведена: +```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` \ No newline at end of file diff --git a/06.01.59-Data-функция-decort_kvmvm_list-получение-информации-о-списке-компьютов.md b/06.01.59-Data-функция-decort_kvmvm_list-получение-информации-о-списке-компьютов.md index c06aa7e..e6f52c7 100644 --- a/06.01.59-Data-функция-decort_kvmvm_list-получение-информации-о-списке-компьютов.md +++ b/06.01.59-Data-функция-decort_kvmvm_list-получение-информации-о-списке-компьютов.md @@ -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 } ``` diff --git a/07.01.21-Resource-функция-decort_k8s_cp-управление-control-plane-кластера.md b/07.01.21-Resource-функция-decort_k8s_cp-управление-control-plane-кластера.md new file mode 100644 index 0000000..182e9e9 --- /dev/null +++ b/07.01.21-Resource-функция-decort_k8s_cp-управление-control-plane-кластера.md @@ -0,0 +1,181 @@ +Функция доступна в провайдере версии 4.2.0 и выше. + +_Resource_ функция **decort_k8s_cp** служит для управления control plane кластера k8s. Функция позволяет: +- Создать кластер +- Удалить кластер +- Настроить мастер-узел +- Изменить кол-во ВМ в мастер-узле + +Созданный с помощью данного ресурса кластер не имеет стандартных рабочих узлов и логики управления ими. Для управления worker-группами используется отдельный ресурс `decort_k8s_wg`.
+**!** При удалении ресурса `decort_k8s_cp` удалится сам кластер и все зависимые ресурсы (worker-группы)
+**!** При использовании `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 = + + # K8sCI ID + # Обязательный параметр + # int + k8sci_id = + + # Плагин сети (flannel, weavenet или calico) + # Обязательный параметр + # string + network_plugin = "flannel" + + # ID ресурсной группы + # Обязательный параметр + # int + rg_id = + + # Кол-во ядер мастер-узла + # Опциональный параметр + # int + cpu = 2 + + # Объем RAM мастер-узла + # Опциональный параметр + # int + ram = 2048 + + # Кол-во ВМ мастер-узла (1 или 3) + # Опциональный параметр + # int + num = 1 + + # Размер диска мастер-узла + # Опциональный параметр + # int + disk = 10 + + # Описание кластера + # Опциональный параметр + # string + desc = "" + + # ID внешней сети + # Опциональный параметр + # id + extnet_id = + + # Storage Endpoint ID + # Опциональный параметр + # id + sep_id = + + # SEP Pool + # Опциональный параметр + # string + sep_pool = + + # Старт/Стоп кластера + # Опциональный параметр + # bool + start = + + # Создать кластер с/без балансировщика нагрузки + # Опциональный параметр + # bool + with_lb = +} +``` + +После успешного завершения такого вызова **decort_k8s_cp** в переменной `decort_k8s_cp.cp` будут сохранены возвращаемые значения. \ No newline at end of file