全部产品
Search
文档中心

容器服务 Kubernetes 版 ACK:使用Terraform为节点池指定部署集

更新时间:Aug 13, 2024

部署集是控制ECS实例分布的策略,该策略将ECS实例分散部署在不同的物理服务器上,提升业务的高可用性和底层容灾能力。通过为节点池指定部署集,能够保证节点池弹出的ECS实例不会分布于同一物理机上,并通过亲和性配置,使您的应用对底层的节点拓扑进行感知,使其均匀地分布在不同节点上,保证应用的容灾能力和高可用性。本文介绍如何通过Terraform为节点池指定部署集。

前提条件

  • 已安装Terraform

    说明

    请确认Terraform版本不低于v0.12.28,可通过terraform --version命令查看Terraform版本。

    • Cloud Shell默认安装配置了Terraform和阿里云账号信息,无需任何额外配置。

    • 如果您不使用Cloud Shell,关于安装Terraform的方式,请参见在本地安装和配置Terraform

  • 创建集群。若您需要使用Terraform创建,请参见创建ACK托管集群

  • 启动节点自动伸缩前,您需要开通弹性伸缩服务,并完成默认角色授权。具体操作,请参见开通弹性伸缩服务

  • 已创建部署集。具体操作,请参见创建部署集

  • 请确保部署集内ECS实例配额充足,默认为20台;所需机型库存充足。具体信息,请参见查看和提升资源配额

  • 配置阿里云账号信息。

    执行如下命令,创建环境变量,用于存放身份认证信息。

    • Linux 环境

      export ALICLOUD_ACCESS_KEY="************"   #替换为阿里云账号的AK信息。
      export ALICLOUD_SECRET_KEY="************"   #替换为阿里云账号的SK信息。
      export ALICLOUD_REGION="cn-beijing"         #替换为您集群所在的地域。
    • Windows 环境

      set ALICLOUD_ACCESS_KEY="************"   #替换为阿里云账号的AK信息。
      set ALICLOUD_SECRET_KEY="************"   #替换为阿里云账号的SK信息。
      set ALICLOUD_REGION="cn-beijing"         #替换为您集群所在的地域。
    说明

    为提高权限管理的灵活性和安全性,建议您创建名为Terraform的RAM用户,并为该RAM用户创建AccessKey和授权。具体操作,请参见创建RAM用户为RAM用户授权

背景信息

在同一个可用区下,为了保证高可用性,您通常会选择跨主机部署服务。但当一台物理机出现问题时,会影响到应用的所有副本。为了解决这个问题,ECS提供了部署集功能。部署集内的所有ECS实例会在指定地域内严格分散在不同的物理服务器上,满足服务相互隔离的应用架构,大幅降低服务不可用的几率。关于部署集的更多信息,请参见部署集概述

使用限制

集群中功能使用须知

  • 部署集仅支持ACK专有集群ACK托管集群

  • 部署集仅在新建节点池时支持指定,不支持为已有节点池开启。每个节点池仅支持绑定一个部署集,且不支持更换。

  • 部署集不支持手动添加或移除节点。您可以通过扩缩容节点池的操作,调整部署集中的节点数。具体操作,请参见创建节点池

  • 开启部署集功能后,不支持创建抢占式实例。

部署集配额与规格限制

  • 节点池部署集默认基于高可用策略实现。高可用策略下,在部署集内创建ECS实例时,一个可用区内最多能创建20台ECS实例,一个阿里云地域下能创建的ECS实例数量为20*可用区数量。更多信息,请参见部署集概述

    一个部署集内能容纳的实例数量不支持提升。但如果您需要提高当前账户可拥有的部署集最大数量,请前往配额平台申请。关于部署集使用限制及配额的更多信息,请参见部署集使用限制

  • 支持的实例规格族限制:

    不同部署集策略仅支持创建特定的实例规格族,具体信息如下。

    说明

    您也可以调用DescribeDeploymentSetSupportedInstanceTypeFamily指定部署集策略来获取各部署集策略支持的实例规格族。

    部署策略

    支持的实例规格族

    高可用策略和部署集组高可用策略

    • g8a、g8i、g8y、g7se、g7a、g7、g7h、g7t、g7ne、g7nex、g6、g6e、g6a、g5、g5ne、sn2ne、sn2、sn1

    • c8a、c8i、c8y、c7se、c7、c7t、c7nex、c7a、c6、c6a、c6e、c5、ic5、sn1ne

    • r8a、r8i、r8y、r7、r7se、r7t、r7a、r6、r6e、r6a、re6、re6p、r5、re4、se1ne、se1

    • hfc8i、hfg8i、hfr8i、hfc7、hfg7、hfr7、hfc6、hfg6、hfr6、hfc5、hfg5

    • d3c、d2s、d2c、d1、d1ne、d1-c14d3、d1-c8d3

    • i3g、i3、i2、i2g、i2ne、i2gne、i1

    • ebmg5、ebmc7、ebmg7、ebmr7、sccgn6、scch5、scch5s、sccg5、sccg5s

    • e、t6、xn4、mn4、n4、e4、n2、n1、

    • gn6i

    网络低时延策略

    • g8a、g8i、g8ae、g8y

    • c8a、c8i、c8ae、c8y

    • r8a、r8i、r8ae、r8y

    • ebmc7、ebmg7、ebmr7

  • 在部署集内创建ECS实例失败,或重启按量付费ECS实例(节省停机模式)失败,可能是因为地域内实例资源库存不足,您可以等待一段时间后重试创建实例或重启实例。

通过Terraform创建指定部署集的节点池

  1. 使用以下示例内容,创建指定部署集的节点池。

    provider "alicloud" {
    }
    
    resource "alicloud_cs_kubernetes_node_pool" "default" {
      name                          = "tf-deploymentset"
      cluster_id                    = "c51a1ae4fcd754d4f9bc3b1****"
      vswitch_ids                   = ["vsw-bp1kh6qfb83vt****","vsw-bp13d9ojhwiimya****","vsw-bp1eyw8wt9k1d1l****","vsw-bp1nftkf9sk3fz****"] #多可用区VSwitch,保证ESS弹出节点能够均匀分布在不同可用区。
      instance_types                = ["ecs.c6.xlarge","ecs.c5.2xlarge","ecs.g5.2xlarge","ecs.i2g.2xlarge"]  #可用机型。
      system_disk_category          = "cloud_ssd"
      system_disk_size              = 120
    
      # 指定部署集ID。
      deployment_set_id             = "ds-bp1e19mmbsv3jf64****"
    
      instance_charge_type         = "PostPaid"
      security_group_ids            = ["sg-bp1ewlqw7ajyaqaz****"]
      install_cloud_monitor        = true
    
      image_type                     = "AliyunLinux3"
      image_id                     = "aliyun_3_x64_20G_alibase_20240528.vhd"
    
      password                     = "Hello1234"
    
      desired_size                   = 3
    }
  2. 执行以下命令完成创建。

    terraform apply 

    返回信息如下,部署集指定成功

    alicloud_cs_kubernetes_node_pool.default: Refreshing state... [id=c51a1ae4fcd754d4f9bc3b1****:np651662dfc3e4440d9979360b24b1****]
    alicloud_cs_managed_kubernetes.default: Refreshing state... [id=c51a1ae4fcd754d4f9bc3b1****]
    
    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:
    
      ............
    alicloud_cs_kubernetes_node_pool.default: Still creating... [50s elapsed]
    alicloud_cs_kubernetes_node_pool.default: Still creating... [1m0s elapsed]
    alicloud_cs_kubernetes_node_pool.default: Creation complete after 1m1s [id=c51a1ae4fcd754d4f9bc3b1****:np651662dfc3e4440d9979360b24b1****]
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

    执行结果

    创建成功后,您可以通过以下任意方式查看结果。

    • 您可以在容器服务管理控制台节点池页面查看到新建的节点池。单击操作列的编辑,可以查看到指定的部署集。

    • 您可以在terraform.tfstate文件中,查看到节点池资源包含deployment_set_id字段。

      "deployment_set_id": "ds-bp1e19mmbsv3jf64****"

相关文档

节点池部署集最佳实践