日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Terraform創建具備自動伸縮功能的節點池

ACK的節點池及托管節點池中的節點默認不具備自動伸縮能力,您也可以通過使用Terraform工具創建開啟自動伸縮功能的節點池。本文介紹如何通過Terraform創建開啟自動伸縮功能的節點池。

說明

本教程所含示例代碼支持一鍵運行,您可以直接運行代碼。一鍵運行

前提條件

  • 自動伸縮功能依賴彈性伸縮(Auto Scaling,舊稱ESS)服務。啟動節點自動伸縮前,您需要開通彈性伸縮服務,并完成默認角色授權。具體操作,請參見開通彈性伸縮服務

    說明

    如果您之前已經使用了alicloud_cs_kubernetes_autoscaler組件,默認已開通彈性伸縮服務。

  • 已為系統運維管理 OOS(CloudOps Orchestration Service)服務授權。您可以通過創建AliyunOOSLifecycleHook4CSRole角色,為OOS服務授權。

    1. 單擊AliyunOOSLifecycleHook4CSRole

      說明
      • 如果當前賬號是阿里云賬號,單擊AliyunOOSLifecycleHook4CSRole即可授權。

      • 如果當前賬號是RAM用戶,請先確保對應的阿里云賬號已授權AliyunOOSLifecycleHook4CSRole,并為RAM用戶授予AliyunRAMReadOnlyAccess系統策略。具體操作,請參見為RAM用戶授權

    2. 云資源訪問授權頁面,單擊同意授權

  • 準備Terraform運行環境,您可以選擇以下任一方式來使用Terraform。

    • 在Terraform Explorer中使用Terraform:阿里云提供了Terraform的在線運行環境,您無需安裝Terraform,登錄后即可在線使用和體驗Terraform。適用于零成本、快速、便捷地體驗和調試Terraform的場景。

    • Cloud Shell:阿里云Cloud Shell中預裝了Terraform的組件,并已配置好身份憑證,您可直接在Cloud Shell中運行Terraform的命令。適用于低成本、快速、便捷地訪問和使用Terraform的場景。

    • 在本地安裝和配置Terraform:適用于網絡連接較差或需要自定義開發環境的場景。

背景信息

Terraform是一種開源工具,通過Provider來支持新的基礎架構,用于安全高效地預覽、配置和管理云基礎架構和資源。更多信息,請參見Terraform產品介紹

Alibaba Cloud Provider的老版本中,ACK提供了一個名為alicloud_cs_kubernetes_autoscaler的組件。alicloud_cs_kubernetes_autoscaler組件可以實現節點的彈性伸縮,但是其能力受限:

  • 配置復雜,使用成本高。

  • 伸縮的節點都會被放置到默認節點池,自動伸縮的節點未單獨維護。

  • 部分配置參數不可更改。

Alibaba Cloud Provider從1.111.0版本開始可通過組件alicloud_cs_kubernetes_node_pool創建開啟自動伸縮功能的節點池,優勢如下:

  • 配置簡單,您只需要配置伸縮組內節點數的上下限。

  • 針對非必須配置,ACK使用默認值的配置,以防誤操作帶來的基礎環境不一致的問題,例如:操作系統鏡像。

  • 在ACK控制臺中可以直觀地觀察節點池內節點的變化。

使用的資源

說明

本教程示例包含的部分資源會產生一定費用,請在不需要時及時進行釋放或退訂。

使用Terraform創建開啟自動伸縮功能的節點池

使用過alicloud_cs_kubernetes_autoscaler組件

如果您的集群之前已經使用alicloud_cs_kubernetes_autoscaler組件,在完成上述為當前集群添加彈性伸縮服務授權后,您需要執行以下步驟平滑切換alicloud_cs_kubernetes_autoscaler至alicloud_cs_kubernetes_node_pool,以創建開啟自動伸縮功能的節點池。

  1. 修改集群的autoscaler-meta配置項。

    1. 登錄容器服務管理控制臺,在左側導航欄選擇集群

    2. 集群列表頁面,單擊目標集群名稱,然后在左側導航欄,選擇配置管理 > 配置項

    3. 配置項頁面左上角的命名空間下拉框中,選擇kube-system,然后在autoscaler-meta配置項右側操作列下,單擊編輯

    4. 編輯面板中,修改autoscaler-meta配置項的值。

      您需將taints值的String類型改成數組類型,即在文本框中,修改"taints":"""taints":[]

    5. 單擊確定

  2. 同步節點池。

    1. 在集群管理頁左側導航欄,選擇節點管理 > 節點池

    2. 節點池頁面右上方,單擊同步節點池

未使用過alicloud_cs_kubernetes_autoscaler組件

您可以使用Terraform創建開啟自動伸縮功能的節點池。

  1. 創建節點池的配置文件。

    為已有集群創建開啟自動伸縮功能的節點池

    在已有集群中創建開啟自動伸縮功能的節點池,配置示例如下。

    provider "alicloud" {
    }
    # 為已有集群創建開啟自動伸縮功能的節點池。
    resource "alicloud_cs_kubernetes_node_pool" "at1" {
      # 目標集群ID。
      cluster_id           = ""
      name                 = "np-test"
      # 節點池內節點使用的vswitch,至少提供一個。
      vswitch_ids          = ["vsw-bp1mdigyhmilu2h4v****"]
      instance_types       = ["ecs.e3.medium"]
      password             = "Hello1234"
     
      scaling_config {
        # 最小節點數。
        min_size     = 1
        # 最大節點數。
        max_size     = 5
      }
    
    }

    創建新的具備自動伸縮功能的節點池集群

    創建一個包含自動伸縮節點池的集群,配置示例如下。

    provider "alicloud" {
      region = var.region_id
    }
    
    variable "region_id" {
      type    = string
      default = "cn-shenzhen"
    }
    
    variable "cluster_spec" {
      type        = string
      description = "The cluster specifications of kubernetes cluster,which can be empty. Valid values:ack.standard : Standard managed clusters; ack.pro.small : Professional managed clusters."
      default     = "ack.pro.small"
    }
    
    # 指定虛擬交換機(vSwitches)的可用區。
    variable "availability_zone" {
      description = "The availability zones of vswitches."
      default     = ["cn-shenzhen-c", "cn-shenzhen-e", "cn-shenzhen-f"]
    }
    
    # 用于創建新vSwitches的CIDR地址塊列表。
    variable "node_vswitch_cidrs" {
      type    = list(string)
      default = ["172.16.0.0/23", "172.16.2.0/23", "172.16.4.0/23"]
    }
    
    # 用于創建Terway使用的vSwitch的CIDR地址塊。
    variable "terway_vswitch_cidrs" {
      type    = list(string)
      default = ["172.16.208.0/20", "172.16.224.0/20", "172.16.240.0/20"]
    }
    
    # 定義了用于啟動工作節點的ECS實例類型。
    variable "worker_instance_types" {
      description = "The ecs instance types used to launch worker nodes."
      default     = ["ecs.g6.2xlarge", "ecs.g6.xlarge"]
    }
    
    # 設置工作節點的密碼
    variable "password" {
      description = "The password of ECS instance."
      default     = "Test123456"
    }
    
    # 指定創建ACK托管集群名稱的前綴。
    variable "k8s_name_prefix" {
      description = "The name prefix used to create managed kubernetes cluster."
      default     = "tf-ack-shenzhen"
    }
    
    # 指定ACK集群安裝的組件。包括Terway(網絡組件)、csi-plugin(存儲組件)、csi-provisioner(存儲組件)、logtail-ds(日志組件)、Nginx Ingress Controller、ack-arms-prometheus(監控組件)以及ack-node-problem-detector(節點診斷組件)。
    variable "cluster_addons" {
      type = list(object({
        name   = string
        config = string
      }))
    
      default = [
        {
          "name"   = "terway-eniip",
          "config" = "",
        },
        {
          "name"   = "logtail-ds",
          "config" = "{\"IngressDashboardEnabled\":\"true\"}",
        },
        {
          "name"   = "nginx-ingress-controller",
          "config" = "{\"IngressSlbNetworkType\":\"internet\"}",
        },
        {
          "name"   = "arms-prometheus",
          "config" = "",
        },
        {
          "name"   = "ack-node-problem-detector",
          "config" = "{\"sls_project_name\":\"\"}",
        },
        {
          "name"   = "csi-plugin",
          "config" = "",
        },
        {
          "name"   = "csi-provisioner",
          "config" = "",
        }
      ]
    }
    
    # 默認資源名稱。
    locals {
      k8s_name_terway = "k8s_name_terway_${random_integer.default.result}"
      vpc_name = "vpc_name_${random_integer.default.result}"
      autoscale_nodepool_name = "autoscale-node-pool-${random_integer.default.result}"
    }
    
    # 節點ECS實例配置。將查詢滿足CPU、Memory要求的ECS實例類型。
    data "alicloud_instance_types" "default" {
      cpu_core_count       = 8
      memory_size          = 32
      availability_zone    = var.availability_zone[0]
      kubernetes_node_role = "Worker"
    }
    
    resource "random_integer" "default" {
      min = 10000
      max = 99999
    }
    
    # 專有網絡。
    resource "alicloud_vpc" "default" {
      vpc_name   = local.vpc_name
      cidr_block = "172.16.0.0/12"
    }
    
    # Node交換機。
    resource "alicloud_vswitch" "vswitches" {
      count      = length(var.node_vswitch_cidrs)
      vpc_id     = alicloud_vpc.default.id
      cidr_block = element(var.node_vswitch_cidrs, count.index)
      zone_id    = element(var.availability_zone, count.index)
    }
    
    # Pod交換機。
    resource "alicloud_vswitch" "terway_vswitches" {
      count      = length(var.terway_vswitch_cidrs)
      vpc_id     = alicloud_vpc.default.id
      cidr_block = element(var.terway_vswitch_cidrs, count.index)
      zone_id    = element(var.availability_zone, count.index)
    }
    
    # Kubernetes托管版。
    resource "alicloud_cs_managed_kubernetes" "default" {
      name                         = local.k8s_name_terway                                         # Kubernetes集群名稱。
      cluster_spec                 = var.cluster_spec                                              # 創建Pro版集群。
      worker_vswitch_ids           = split(",", join(",", alicloud_vswitch.vswitches.*.id))        # 節點池所在的vSwitch。指定一個或多個vSwitch的ID,必須在availability_zone指定的區域中。
      pod_vswitch_ids              = split(",", join(",", alicloud_vswitch.terway_vswitches.*.id)) # Pod虛擬交換機。
      new_nat_gateway              = true                                                          # 是否在創建Kubernetes集群時創建新的NAT網關。默認為true。
      service_cidr                 = "10.11.0.0/16"                                                # Pod網絡的CIDR塊。當cluster_network_type設置為flannel,你必須設定該參數。它不能與VPC CIDR相同,并且不能與VPC中的Kubernetes集群使用的CIDR相同,也不能在創建后進行修改。集群中允許的最大主機數量:256。
      slb_internet_enabled         = true                                                          # 是否為API Server創建Internet負載均衡。默認為false。
      enable_rrsa                  = true
      control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # 控制平面日志。
      dynamic "addons" {                                                      # 組件管理。
        for_each = var.cluster_addons
        content {
          name   = lookup(addons.value, "name", var.cluster_addons)
          config = lookup(addons.value, "config", var.cluster_addons)
        }
      }
    }
    
    # 創建自動伸縮節點池,節點池最多可以擴展到 10 個節點,最少保持 1 個節點。
    resource "alicloud_cs_kubernetes_node_pool" "autoscale_node_pool" {
      cluster_id     = alicloud_cs_managed_kubernetes.default.id
      node_pool_name = local.autoscale_nodepool_name
      vswitch_ids    = split(",", join(",", alicloud_vswitch.vswitches.*.id))
    
      scaling_config {
        min_size = 1
        max_size = 10
      }
    
      instance_types        = var.worker_instance_types
      password              = var.password # SSH登錄集群節點的密碼。
      install_cloud_monitor = true         # 是否為kubernetes的節點安裝云監控。
      system_disk_category  = "cloud_efficiency"
      system_disk_size      = 100
      image_type            = "AliyunLinux3"
    
      data_disks {              # 節點數據盤配置。
        category = "cloud_essd" # 節點數據盤種類。
        size     = 120          # 節點數據盤大小。
      }
    }
  2. 執行如下命令,初始化Terraform運行環境。

    terraform init

    返回信息如下,Terraform初始化成功。

    Terraform has been successfully initialized!
    
    You may now begin working with Terraform. Try running "terraform plan" to see
    any changes that are required for your infrastructure. All Terraform commands
    should now work.
    
    If you ever set or change modules or backend configuration for Terraform,
    rerun this command to reinitialize your working directory. If you forget, other
    commands will detect it and remind you to do so if necessary.
  3. 執行terraform apply命令完成創建。

  4. 驗證結果。

    完成創建節點池后,在節點池列表中可以看到新建的節點池,該節點池名稱下會標注已開啟自動伸縮nodepool

清理資源

當您不再需要上述通過Terraform創建或管理的資源時,請運行terraform destroy命令以釋放資源。關于terraform destroy的更多信息,請參見Terraform常用命令

terraform destroy

完整示例

說明

本教程所含示例代碼支持一鍵運行,您可以直接運行代碼。一鍵運行

示例代碼

provider "alicloud" {
  region = var.region_id
}

variable "region_id" {
  type    = string
  default = "cn-shenzhen"
}

variable "cluster_spec" {
  type        = string
  description = "The cluster specifications of kubernetes cluster,which can be empty. Valid values:ack.standard : Standard managed clusters; ack.pro.small : Professional managed clusters."
  default     = "ack.pro.small"
}

# 指定虛擬交換機(vSwitches)的可用區。
variable "availability_zone" {
  description = "The availability zones of vswitches."
  default     = ["cn-shenzhen-c", "cn-shenzhen-e", "cn-shenzhen-f"]
}

# 用于創建新vSwitches的CIDR地址塊列表。
variable "node_vswitch_cidrs" {
  type    = list(string)
  default = ["172.16.0.0/23", "172.16.2.0/23", "172.16.4.0/23"]
}

# 用于創建Terway使用的vSwitch的CIDR地址塊。
variable "terway_vswitch_cidrs" {
  type    = list(string)
  default = ["172.16.208.0/20", "172.16.224.0/20", "172.16.240.0/20"]
}

# 定義了用于啟動工作節點的ECS實例類型。
variable "worker_instance_types" {
  description = "The ecs instance types used to launch worker nodes."
  default     = ["ecs.g6.2xlarge", "ecs.g6.xlarge"]
}

# 設置工作節點的密碼
variable "password" {
  description = "The password of ECS instance."
  default     = "Test123456"
}

# 指定創建ACK托管集群名稱的前綴。
variable "k8s_name_prefix" {
  description = "The name prefix used to create managed kubernetes cluster."
  default     = "tf-ack-shenzhen"
}

# 指定ACK集群安裝的組件。包括Terway(網絡組件)、csi-plugin(存儲組件)、csi-provisioner(存儲組件)、logtail-ds(日志組件)、Nginx Ingress Controller、ack-arms-prometheus(監控組件)以及ack-node-problem-detector(節點診斷組件)。
variable "cluster_addons" {
  type = list(object({
    name   = string
    config = string
  }))

  default = [
    {
      "name"   = "terway-eniip",
      "config" = "",
    },
    {
      "name"   = "logtail-ds",
      "config" = "{\"IngressDashboardEnabled\":\"true\"}",
    },
    {
      "name"   = "nginx-ingress-controller",
      "config" = "{\"IngressSlbNetworkType\":\"internet\"}",
    },
    {
      "name"   = "arms-prometheus",
      "config" = "",
    },
    {
      "name"   = "ack-node-problem-detector",
      "config" = "{\"sls_project_name\":\"\"}",
    },
    {
      "name"   = "csi-plugin",
      "config" = "",
    },
    {
      "name"   = "csi-provisioner",
      "config" = "",
    }
  ]
}

# 默認資源名稱。
locals {
  k8s_name_terway = "k8s_name_terway_${random_integer.default.result}"
  vpc_name = "vpc_name_${random_integer.default.result}"
  autoscale_nodepool_name = "autoscale-node-pool-${random_integer.default.result}"
}

# 節點ECS實例配置。將查詢滿足CPU、Memory要求的ECS實例類型。
data "alicloud_instance_types" "default" {
  cpu_core_count       = 8
  memory_size          = 32
  availability_zone    = var.availability_zone[0]
  kubernetes_node_role = "Worker"
}

resource "random_integer" "default" {
  min = 10000
  max = 99999
}

# 專有網絡。
resource "alicloud_vpc" "default" {
  vpc_name   = local.vpc_name
  cidr_block = "172.16.0.0/12"
}

# Node交換機。
resource "alicloud_vswitch" "vswitches" {
  count      = length(var.node_vswitch_cidrs)
  vpc_id     = alicloud_vpc.default.id
  cidr_block = element(var.node_vswitch_cidrs, count.index)
  zone_id    = element(var.availability_zone, count.index)
}

# Pod交換機。
resource "alicloud_vswitch" "terway_vswitches" {
  count      = length(var.terway_vswitch_cidrs)
  vpc_id     = alicloud_vpc.default.id
  cidr_block = element(var.terway_vswitch_cidrs, count.index)
  zone_id    = element(var.availability_zone, count.index)
}

# Kubernetes托管版。
resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = local.k8s_name_terway                                         # Kubernetes集群名稱。
  cluster_spec                 = var.cluster_spec                                              # 創建Pro版集群。
  worker_vswitch_ids           = split(",", join(",", alicloud_vswitch.vswitches.*.id))        # 節點池所在的vSwitch。指定一個或多個vSwitch的ID,必須在availability_zone指定的區域中。
  pod_vswitch_ids              = split(",", join(",", alicloud_vswitch.terway_vswitches.*.id)) # Pod虛擬交換機。
  new_nat_gateway              = true                                                          # 是否在創建Kubernetes集群時創建新的NAT網關。默認為true。
  service_cidr                 = "10.11.0.0/16"                                                # Pod網絡的CIDR塊。當cluster_network_type設置為flannel,你必須設定該參數。它不能與VPC CIDR相同,并且不能與VPC中的Kubernetes集群使用的CIDR相同,也不能在創建后進行修改。集群中允許的最大主機數量:256。
  slb_internet_enabled         = true                                                          # 是否為API Server創建Internet負載均衡。默認為false。
  enable_rrsa                  = true
  control_plane_log_components = ["apiserver", "kcm", "scheduler", "ccm"] # 控制平面日志。
  dynamic "addons" {                                                      # 組件管理。
    for_each = var.cluster_addons
    content {
      name   = lookup(addons.value, "name", var.cluster_addons)
      config = lookup(addons.value, "config", var.cluster_addons)
    }
  }
}

# 創建自動伸縮節點池,節點池最多可以擴展到 10 個節點,最少保持 1 個節點。
resource "alicloud_cs_kubernetes_node_pool" "autoscale_node_pool" {
  cluster_id     = alicloud_cs_managed_kubernetes.default.id
  node_pool_name = local.autoscale_nodepool_name
  vswitch_ids    = split(",", join(",", alicloud_vswitch.vswitches.*.id))

  scaling_config {
    min_size = 1
    max_size = 10
  }

  instance_types        = var.worker_instance_types
  password              = var.password # SSH登錄集群節點的密碼。
  install_cloud_monitor = true         # 是否為kubernetes的節點安裝云監控。
  system_disk_category  = "cloud_efficiency"
  system_disk_size      = 100
  image_type            = "AliyunLinux3"

  data_disks {              # 節點數據盤配置。
    category = "cloud_essd" # 節點數據盤種類。
    size     = 120          # 節點數據盤大小。
  }
}

如果您想體驗更多完整示例,請前往更多完整示例中對應產品的文件夾查看。