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

7.0 KiB

Начиная с версии 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 для управления одним и тем же кластером во избежание проблем с идемпотентностью

Инструкция по миграции созданных кластеров

Ниже приведен пример ресурса, миграция которого будет проведена:

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:
resource "decort_k8s_cp" "control_plane" {}
  1. Выполним команду импортирования с указанием 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
  1. После этого, заполним поля ресурса данными из decort_k8s:
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
}
  1. В случае, если есть уже созданные рабочие узлы, стоит добавить ресурсы decort_k8s_wg для каждого в конфигурационный файл:
resource "decort_k8s_wg" "<WG1_NAME> {
    # Для удобства можно сразу указать k8s_id из ранее созданного ресурса decort_k8s_cp
    k8s_id = decort_k8s_cp.<CP_NAME>.k8s_id
}

4.1 Для кластера в примере:

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
}
  1. Выполним команду 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
  1. В случае успеха, команда terraform plan успешно завершится со статусом*:
No changes. Your infrastructure matches the configuration.

*кроме случаев, когда терраформ пытается записать автоматически генерируемые (дефолтные) значения параметров в стейт (например, start меняется с null на true) или ресурс был изменен вне терраформа

  1. После успешной миграции стоит удалить описание ресурса decort_k8s.

  2. Теперь 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
}

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