sbercloud-terraform / terraform-provider-sbercloud

Terraform SberCloud Provider
https://registry.terraform.io/providers/sbercloud-terraform/sbercloud/latest/docs
Mozilla Public License 2.0
34 stars 21 forks source link

Проблема при разворачивании CCE Addon Autoscaler #324

Closed xT10r closed 1 month ago

xT10r commented 1 month ago

Задача: Развернуть CCE (Cloud Container Engine) и автоскейлер (для Scale-Out, Scale-In) из конфигурации Terraform.

Результат:

Дополнительная информация:


При этом, установленный "ручками" автоскейлер из web-интерфейса вполне себе жизнеспособен, а вот из Terrafrom возникает проблема.


Конфигурация аддона автоскейлера

data "sbercloud_cce_addon_template" "autoscaler" {
  cluster_id = data.sbercloud_cce_cluster.cce_cluster.id
  name       = "autoscaler"
  version    = var.addon_autoscaler_version
}

resource "sbercloud_cce_addon" "cce_addon_autoscaler" {
  depends_on = [
    data.sbercloud_cce_node_pool.cce_node_pool
  ]
  cluster_id    = data.sbercloud_cce_cluster.cce_cluster.id
  template_name = "autoscaler"
  version       = var.addon_autoscaler_version

  values {
    basic_json = jsonencode(jsondecode(data.sbercloud_cce_addon_template.autoscaler.spec).basic)
    custom_json = jsonencode(
      merge(jsondecode(data.sbercloud_cce_addon_template.autoscaler.spec).parameters.custom,
        {
          cluster_id                     = data.sbercloud_cce_cluster.cce_cluster.id
          tenant_id                      = var.tenant_id
          expander                       = "priority"
          coresTotal                     = var.coresTotal
          maxEmptyBulkDeleteFlag         = 10
          maxNodeProvisionTime           = 10
          maxNodesTotal                  = 4
          memoryTotal                    = var.memoryTotal
          scaleUpCpuUtilizationThreshold = 0.8
          scaleUpMemUtilizationThreshold = 0.8
          scaleUpUnscheduledPodEnabled   = true
          scaleUpUtilizationEnabled      = true
          scaleDownEnabled               = true
          scaleDownUnneededTime          = 5
          scaleDownUtilizationThreshold  = 0.2
          logLevel                       = 5
          # ? Ignore the pre-allocated CPU and memory of the DaemonSet container.
        }
    ))

    # flavor1 - 50 узлов
    flavor_json = jsonencode(jsondecode(data.sbercloud_cce_addon_template.autoscaler.spec).parameters.flavor1)
  }
}

Поверхностное описание:

Pod not ready.: back-off 5m0s restarting failed container=cluster-autoscaler pod=cluster-autoscaler-6c5bdbb745-bl68h_kube-system(7109a8d3-35ae-42f2-a0a1-b7d5a2e205e4)

Детализированное описание

F1017 12:40:57.333502       1 hws_cloud_provider.go:172] Failed to create HWS Manager: Unexpected Response error, StatusCode: 401, Error Message: {"error_msg":"Incorrect IAM authentication information: AK G6DXZ11S4QP0QBOCS07I failed to reach the limit, forbidden.","error_code":"APIGW.0301","request_id":"04aaff9fa8d3c9eee0b2422fb014240c"}

Рекомендации по устранению из справки:

Check whether the token information (such as the project ID and name) is correct and whether the time difference between the client and server is less than 15 minutes.
Проверить корректность токена (например, project ID и имя) и убедиться, что разница во времени между клиентом и сервером не превышает 15 минут.

Рекомендация решению проблемы не помогает.

SongOfElune commented 1 month ago

В статье Создание CCE-кластера и пула узлов неверно указано откуда нужно брать tenant_id. Нужно брать не Account ID из My Credentials, а Project ID из того же раздела.

Решение так же есть здесь - https://github.com/sbercloud-terraform/terraform-provider-sbercloud/issues/318#issuecomment-2368350223. В моем случае сработало. CCE 1.29 / Autoscaler 1.29.17.

xT10r commented 1 month ago

Благодарю за помощь. Также добавлю к комментарию https://github.com/sbercloud-terraform/terraform-provider-sbercloud/issues/318#issuecomment-2368350223, что в качестве проекта используемого в "sbercloud_identity_projects" выбирается именно проект указанный тут: My Credentials -> API Credentials -> Projects -> Project Name

Например так:

variable "identity_default_project_name" {
  description = "Identity default project name"
  type        = string
  default     = "ru-moscow-1"
}

data "sbercloud_identity_projects" "identity_project" {
  name = var.identity_default_project_name
}

resource "sbercloud_cce_addon" "cce_addon_autoscaler" {
  depends_on = [
    data.sbercloud_cce_node_pool.cce_node_pool
  ]
  cluster_id    = data.sbercloud_cce_cluster.cce_cluster.id
  template_name = "autoscaler"
  version       = var.addon_autoscaler_version

  values {
    basic_json = jsonencode(jsondecode(data.sbercloud_cce_addon_template.autoscaler.spec).basic)
    custom_json = jsonencode(
      merge(jsondecode(data.sbercloud_cce_addon_template.autoscaler.spec).parameters.custom,
        {
          cluster_id                        = data.sbercloud_cce_cluster.cce_cluster.id
          tenant_id                         = data.sbercloud_identity_projects.identity_project.projects[0].id
        }
    ))

    flavor_json = jsonencode(jsondecode(data.sbercloud_cce_addon_template.autoscaler.spec).parameters.flavor1)

В этом случае при выполнении команды terraform plan: tenant_id != "0"