Терраформирование кластера Google Kubernetes Engine с включенным Config Connector

Кластер Google Kubernetes Engine работает внутри проекта Google Cloud Platform (GCP). $GCP_PROJECT_NAME с соответствующей конфигурацией Terraform, хранящейся внутри, которую можно проверить с помощью:

      terraform plan

#=>

No changes. Your infrastructure matches the configuration.

Terraform has compared your real infrastructure against your configuration and found no differences, so no changes are needed.

Я хочу включить Config Connector (подробнее об этом здесь ) для использования Terraform, добавив следующие аргументы в container_cluster.tf:

      resource "google_container_cluster" ". . ." {
  addons_config {
    config_connector_config {
      enabled = true
    }

  . . .

}

но когда я иду в plan это изменение я обнаружил следующую ошибку:

      terraform plan

#=>

╷
│ Error: Unsupported block type
│
│   on container_cluster.tf line 3, in resource "google_container_cluster" ". . .":
│    3:     config_connector_config {
│
│ Blocks of type "config_connector_config" are not expected here.

хотя в официальной документации, найденной здесь , говорится, что config_connector_config поддерживается addons_config блокировать.

Я использую последние версии Terraform и google провайдер:

      terraform version

#=>

Terraform v1.0.6
on . . .
+ provider registry.terraform.io/hashicorp/google v3.84.0

Какие изменения мне нужно внести, чтобы я мог успешно включить Config Connector для $GKE_CLUSTER_NAME используя Terraform?

1 ответ

В config_connector_configаргумент все еще находится в бета-версии , поэтому вам нужно будет использовать поставщика для:

  1. Добавьте аргумент для каждого ресурса:

    • указать для любого ресурса (например, $GKE_CLUSTER_NAME) хотя бы с одним бета-аргументом:

                resource "google_container_cluster" ". . ." {
      
         . . .
      
         provider        = google-beta
      
         . . .
      
      }
      
    • для всех остальных ресурсов укажите:

                resource resource "google_container_node_pool" ". . ." {
      
         . . .
      
         provider       = google
      
         . . .
      
      }
      

    хотя providerарг. это не содержится в официальной справочной документации google_container_cluster здесь .

  2. Добавьте поставщика вместе с поставщиком, найденным в providers.tf файл:

            
    . . .
    
    provider "google" {
      project = ". . ."
    }
    
    provider "google-beta" {
      project = ". . ."
    }
    
    . . .
    
    terraform {
      required_providers {
    
        . . .
    
        google = {
          version = "~> 3.84.0"
        }
        google-beta = {
          version = "~> 3.84.0"
        }
    
        . . .
    
      }
    }
    

    Это безопасно использовать как googleи провайдеры в той же конфигурации Terraform. Подробнее об этом здесь .

    Примечание . Установка имени проекта GCP в определениях провайдеров выше позволяет запускать importкоманды (можно найти здесь ) без указания вашего проекта.

  3. Попытки или ваши изменения могут привести к следующему:

            terraform plan
    
    #=>
    
    ╷
    │ Error: Could not load plugin
    │
    │
    │ Plugin reinitialization required. Please run "terraform init".
    │
    │ Plugins are external binaries that Terraform uses to . . .
    

    так что вам, возможно, придется init опять таки:

            terraform init
    
    #=>
    
    Initializing the backend...
    
    Initializing provider plugins...
    - Finding latest version of hashicorp/google-beta...
    - Reusing previous version of hashicorp/google from the dependency lock file
    - Installing hashicorp/google-beta v3.84.0...
    - Installed hashicorp/google-beta v3.84.0 (signed by HashiCorp)
    - Using previously-installed hashicorp/google v3.84.0
    
    Terraform has made some changes to the provider dependency selections recorded
    in the .terraform.lock.hcl file. Review those changes and commit them to your
    version control system if they represent changes you intended to make.
    
    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. . . .
    

    В providersТеперь команда должна подтвердить, что этого требует ваша текущая конфигурация:

            terraform providers
    
    #=>
    
    Providers required by configuration:
    .
    ├── provider[registry.terraform.io/hashicorp/google] ~> 3.84.0
    └── provider[registry.terraform.io/hashicorp/google-beta] ~> 3.84.0
    
    Providers required by state:
    
        provider[registry.terraform.io/hashicorp/google]
    
  4. Запустить plan для подтверждения включения Config Connector:

            terraform plan
    
    #=>
    
    . . .
    
    Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:
      ~ update in-place
    
    Terraform will perform the following actions:
    
      # google_container_cluster.$GKE_CLUSTER_NAME will be updated in-place
      ~ resource "google_container_cluster" ". . ." {
    
    . . .
    
          ~ addons_config {
    
              + config_connector_config {
                  + enabled = true
                }
    . . .
    
    Plan: 0 to add, 1 to change, 0 to destroy.
    
    . . .
    

    а потом apply ваши изменения:

            terraform apply
    
    #=>
    
    google_container_cluster.. . .: Modifying... [id=projects/$GCP_PROJECT_NAME/locations/$GKE_CLUSTER_ZONE/clusters/$GKE_CLUSTER_NAME]
    
    . . .
    
    google_container_cluster.. . .: Modifications complete after xmxxs [id=projects/$GCP_PROJECT_NAME/locations/$GKE_CLUSTER_ZONE/clusters/$GKE_CLUSTER_NAME]
    
    Apply complete! Resources: 0 added, 1 changed, 0 destroyed.
    

    Проверьте, включен ли Config Connector для вашего кластера:

             gcloud container clusters describe $GKE_CLUSTER_NAME \
    --format="value(addonsConfig.configConnectorConfig.enabled)" \
    --zone=$GKE_CLUSTER_ZONE
    
    #=>
    
    True
    

Хотите узнать больше об использовании google-betaпровайдер? Посетите здесь и здесь .