Терраформирование кластера 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
аргумент все еще находится в бета-версии , поэтому вам нужно будет использовать поставщика для:
Добавьте аргумент для каждого ресурса:
указать для любого ресурса (например,
$GKE_CLUSTER_NAME
) хотя бы с одним бета-аргументом:resource "google_container_cluster" ". . ." { . . . provider = google-beta . . . }
для всех остальных ресурсов укажите:
resource resource "google_container_node_pool" ". . ." { . . . provider = google . . . }
хотя
provider
арг. это не содержится в официальной справочной документацииgoogle_container_cluster
здесь .Добавьте поставщика вместе с поставщиком, найденным в
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
команды (можно найти здесь ) без указания вашего проекта.Попытки или ваши изменения могут привести к следующему:
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]
Запустить
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
провайдер? Посетите здесь и здесь .