使用 Config Connector 对 Google Kubernetes Engine 集群进行地形改造

Posted

技术标签:

【中文标题】使用 Config Connector 对 Google Kubernetes Engine 集群进行地形改造【英文标题】:Terraforming a Google Kubernetes Engine Cluster with Config Connector Enabled 【发布时间】:2021-11-09 06:04:19 【问题描述】:

Google Kubernetes Engine 集群 $GKE_CLUSTER_NAME 在 Google Cloud Platform (GCP) 项目 $GCP_PROJECT_NAME 内运行,并在 container_cluster.tf 内存储了匹配的 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.

我希望通过向container_cluster.tf 添加以下参数,使用 Terraform 为 $GKE_CLUSTER_NAME 启用配置连接器(更多关于 here):

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.

尽管官方文档,发现 here,声明 config_connector_configaddons_config 块支持。

我正在使用最新版本的 Terraform 和 google 提供程序:

terraform version

#=>

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

我需要进行哪些更改才能使用 Terraform 成功为 $GKE_CLUSTER_NAME 启用配置连接器?

【问题讨论】:

【参考方案1】:

config_connector_config 参数仍处于测试版,因此您需要为$GKE_CLUSTER_NAME 使用google-beta 提供程序:

    每个资源添加provider参数:

    为任何资源(例如,$GKE_CLUSTER_NAME)指定 google-beta,至少 一个 Beta 参数:

    resource "google_container_cluster" ". . ." 
    
       . . .
    
       provider        = google-beta
    
       . . .
    
    
    

    为所有其他资源指定google

    resource resource "google_container_node_pool" ". . ." 
    
       . . .
    
       provider       = google
    
       . . .
    
    
    

    即使 provider 参数。在官方参考文献中没有 google_container_cluster here 的文档。

    google-beta 提供程序与google 提供程序一起添加 providers.tf文件:

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

    在同一个 Terraform 中同时使用 googlegoogle-beta 提供程序是安全 配置。更多关于 here.

    注意:在上面的提供者定义中设置您的 GCP 项目名称可以让您 在不指定您的项目的情况下运行 import 命令(找到 here)。

    到目前为止,尝试 planapply 您的更改可能会导致以下结果:

    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 命令应该现在确认您需要 google-beta 当前配置:

    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 以确认将启用配置连接器:

    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.
    

    检查是否为您的集群启用了配置连接器:

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

想了解有关使用google-beta 提供程序的更多信息吗?访问here和here。

【讨论】:

以上是关于使用 Config Connector 对 Google Kubernetes Engine 集群进行地形改造的主要内容,如果未能解决你的问题,请参考以下文章

Kafka HDFS Sink Connector Protobuf 未写入

python3使用MySQL connector对MySQL数据库进行操作

sh Bash:goo.gl#使用Google URL Shortener服务(http://goo.gl)缩短网址。

eslint 的三大通用规则

debezium - 更改主题名称会导致错误跨数据库引用

不使用 Kafka Connect 复制架构更改