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

使用Terraform管理組件

容器服務 Kubernetes 版提供豐富的組件,用于擴展集群功能。本文介紹如何在Terraform中配置組件,以幫助您在多場景下完成業務的管理。

組件類型

容器服務ACK管理的集群組件類型包括系統組件和可選組件。更多組件信息,請參見組件概述

系統組件

系統組件是運行ACK集群所依賴的基礎組件,創建集群時會默認安裝。例如:

  • kube-apiserver

  • kube-controller-manager

  • cloud-controller-manager

  • kube-proxy

  • CoreDNS

可選組件

可選組件是ACK提供的非必需部署的組件,您可選擇性的安裝組件,用于擴展集群功能。可選組件在類型上可劃分為應用管理組件、日志與監控管理組件、存儲組件、網絡組件及安全組件等。

組件管理實踐

通過Terraform,您可以在創建集群時指定需要安裝的組件,并在集群創建結束后對組件進行全生命周期管理,下面將介紹如何管理集群中的組件生命周期,以及一些場景下的最佳實踐。

在創建集群時指定需要安裝的組件

您可以在創建集群時,指定集群需要安裝的組件,創建集群涉及的Resource如下:

  • Kubernetes托管版集群:alicloud_cs_managed_kubernetes

  • Kubernetes專有版集群:alicloud_cs_kubernetes

  • ACK Edge集群:alicloud_cs_edge_kubernetes

  • ACK Serverless集群:alicloud_cs_serverless_kubernetes

以上Resource均可以通過addons屬性定義創建集群時需要安裝的組件,addons屬性定義如下:

# 以托管版集群為例。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  # addons為list結構,通過在Resource中定義addons屬性,表明創建集群時安裝該組件。
  addons {
    # 組件的名稱,您可以通過Data Source中的alicloud_cs_kubernetes_addons查詢。
    # 當前集群已經安裝的,以及可以安裝的組件和其對應版本信息。
    name = "XXX"

    # 組件的自定義參數,某些集群組件開啟了自定義參數配置的能力,您可以使用該字段來為組件指定其自定義參數,具體指定方法,請參見下文“修改集群組件的自定義配置參數”一節。
    config = jsonencode(
      {
        ....
      }
    )

    # 該參數默認值為false(布爾值類型),ACK會默認安裝部分組件,方便用戶管理集群。若您在創建集群時不需安裝這些組件,可設置disabled=true。
    disabled = XXX
  }
}
重要

通過在集群相關Resource中指定Addons的方式安裝組件,僅支持在創建集群時指定安裝,集群創建完成后,不支持通過修改Addons代碼塊中的屬性來管理組件的組件生命周期,比如組件升級、組件卸載、組件配置更新等操作。若您需要在創建集群后管理組件生命周期,請參見下文在創建集群后管理組件生命周期

ACK中組件配置方式如下表所示。

組件名稱

組件類型

組件描述

Terraform中配置組件

appcenter

應用管理

提供統一管理多集群應用部署和應用生命周期的應用中心組件。

addon { name = "appcenter" }

progressive-delivery-tool

應用管理

提供應用漸進式灰度發布的組件。

addon { name = "progressive-delivery-tool" }

alicloud-monitor-controller

日志與監控

ACK提供對接云監控的系統組件。

addon { name = "alicloud-monitor-controller" }

metrics-server

日志與監控

ACK基于社區開源監控組件進行改造和增強的監控采集和離線組件,并提供Metrics API進行數據消費,提供HPA的能力。

addon { name = "metrics-server" }

ack-node-problem-detector

日志與監控

ACK基于社區開源項目進行改造和增強的集群節點異常事件監控組件,以及對接第三方監控平臺功能的組件。

addons { name = "ack-node-problem-detector" }

ags-metrics-collector

日志與監控

為基因計算客戶使用的監控服務組件,可以通過該組件監控基因工作流中各個節點資源使用的詳細信息。

addons { name = "ags-metrics-collector" }

ack-arms-prometheus

日志與監控

使用阿里云Prometheus實現容器服務集群監控。

addons { name = "arms-prometheus" }

logtail-ds

日志與監控

使用日志服務采集Kubernetes容器日志。

?addons { name = "logtail-ds" }

csi-plugin

存儲組件

支持數據卷的掛載、卸載功能。創建集群時,如果選擇CSI插件實現阿里云存儲的接入能力的話,默認安裝該組件。

addons { name = "csi-plugin" }

csi-provisioner

存儲組件

支持數據卷的自動創建能力。創建集群時,如果選擇CSI插件實現阿里云存儲的接入能力的話,默認安裝該組件。

addons { name = "csi-plugin" }

storage-operator

存儲組件

用于管理存儲組件的生命周期。

addons { name = "storage-operator" }

alicloud-disk-controller

存儲組件

支持自動創建云盤卷。

addons { name = "alicloud-disk-controller" }

flexvolume

存儲組件

Kubernetes社區較早實現的存儲卷擴展機制。Flexvolume支持數據卷的掛載、卸載功能。創建集群時,如果選擇Flexvolume插件實現阿里云存儲的接入能力的話,默認安裝該組件。

addons { name = "flexvolume" }

nginx-ingress-controller

網絡組件

Nginx Ingress Controller解析Ingress的轉發規則。Ingress Controller收到請求,匹配Ingress轉發規則轉發到后端Service。

?addons { name = "nginx-ingress-controller" }

terway-eniip

網絡組件

阿里云開源的基于專有網絡VPC的容器網絡接口CNI(Container Network Interface)插件,支持基于Kubernetes標準的網絡策略來定義容器間的訪問策略。您可以通過使用Terway網絡組件實現Kubernetes集群內部的網絡互通。創建集群時,如果選擇Terway網絡插件實現集群內部網絡互通的話,默認安裝該組件。

addons { name = "terway-eniip" }

ack-node-local-dns

網絡組件

基于社區開源項目NodeLocal DNSCache的一套DNS本地緩存解決方案。

?addons { name = "ack-node-local-dns" }

aliyun-acr-credential-helper

安全組件

可以在ACK集群中免密拉取ACR默認版或企業版私有鏡像的組件。

addons { name = "aliyun-acr-credential-helper" }

gatekeeper

安全組件

幫助管理和應用集群內的Open Policy Agent(OPA)策略,實現命名空間標簽管理等功能。

addons { name = "gatekeeper" }

kritis-validation-hook

安全組件

部署可信容器環節中進行容器鏡像簽名驗證的關鍵組件。

addons { name = "kritis-validation-hook" }?

security-inspector

安全組件

實現安全巡檢功能的關鍵組件。

addons { name = "security-inspector" }

ack-kubernetes-webhook-injector

安全組件

一款可以從多種阿里云產品白名單中動態加入或移出Pod IP的K8s組件,免去手動配置Pod IP到云產品白名單的操作。

addons { name = "ack-kubernetes-webhook-injector" }

ack-arena

其他

對開源Arena的安裝做進一步簡化,能夠實現在控制臺一鍵安裝Arena的目標。

addons { name = "ack-arena" }

ack-cost-exporter

其他

容器服務ACK成本分析功能進行數據處理的插件。

addons { name = "ack-cost-exporter" }

ack-kubernetes-cronhpa-controller

其他

使用ack-kubernetes-cronhpa-controller實現應用負載定時伸縮。

addons { name = "ack-kubernetes-cronhpa-controller" }

ack-virtual-node

其他

基于社區開源項目Virtual Kubelet,擴展了對Aliyun Provider的支持,并做了大量優化,實現Kubernetes與彈性容器實例ECI的無縫連接。

addons { name = "ack-virtual-node" }

aesm

其他

Intel? SGX Architectural Enclave Service Manager (Intel? SGX AESM) 是Intel? SGX的系統組件,主要提供了SGX Enclave啟動支持,密鑰配置、遠程認證等服務。

addons { name = "aesm" }

aliyun-acr-acceleration-suite

其他

提供鏡像按需加載加速能力的客戶端插件,以DaemonSet形式部署在Worker節點上。

addons { name = "aliyun-acr-acceleration-suite" }

migrate-controller

其他

基于開源項目Velero開發的一個Kubernetes應用遷移的組件。

addons { name = "migrate-controller" }

resource-controller

其他

實現動態控制Pod資源的關鍵組件,使用ACK Pro集群的CPU拓撲感知調度需要安裝此組件。

addons { name = "resource-controller" }

sandboxed-container-controller

其他

安全沙箱運行時提供的專用控制器組件,旨在增強和擴展安全沙箱的基本功能。

addons { name = "sandboxed-container-controller" }

sandboxed-container-helper

其他

為安全沙箱提供診斷和運維的組件。

addons { name = "sandboxed-container-helper" }

sgx-device-plugin

其他

由阿里云容器服務團隊和螞蟻金服安全計算團隊針對Intel SGX聯合開發的Kubernetes Device Plugin,可以讓您更容易的在容器中使用SGX。

addons { name = "sgx-device-plugin" }

在創建集群后管理組件生命周期

管理組件的生命周期前提是您已經創建了一個Kubernetes集群,如果您還沒有創建Kubernetes集群,請先創建集群。

對于集群中的組件,您可以通過Resource中的alicloud_cs_kubernetes_addon來管理組件的生命周期,包括組件的安裝、升級、卸載、自定義配置的修改。alicloud_cs_kubernetes_addon的屬性和定義如下:

resource "alicloud_cs_kubernetes_addon" "addon-example" {
  # 集群ID。
  cluster_id = "XXXX"

  # 組件的名稱,可以通過Data Source中的alicloud_cs_kubernetes_addons,查詢當前集群所有已安裝的以及可以安裝的組件和其對應版本信息。
  name = "XXXX"

  # 組件的版本信息。
  version = "XXXX"

  # 組件的自定義參數,為JSON格式的字符串,可以使用Terraform自帶的jsonencode方法進行配置,也可以直接使用JSON字符串進行配置(需要注意轉義),某些集群組件開啟了自定義參數配置的能力,您可以使用該字段來為組件指定其自定義參數,具體指定方法,請參見下文“修改集群組件的自定義配置參數”一節 。
  config = jsonencode(
    {
      ....
    }
  )
}

您可以通過直接寫入JSON字符串的方式配置組件自定義參數,但是需要注意轉義。例如對于nginx-ingress-controller組件,有以下兩種配置方法:

  • 通過jsonencode配置參數:

    config = jsonencode(   
      {       
        IngressSlbNetworkType="internet"       
        IngressSlbSpec="slb.s2.small"     
      }  
    )
  • 通過直接使用字符串的方式配置參數:

    config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"

將集群已安裝的組件導入Terraform管理

對于集群已經安裝的組件,您可以通過terraform import的方式,將組件導入Terraform進行管理。下面以nginx-ingress-controller組件為例說明如何將集群已安裝的組件導入Terraform管理。

  1. 新建一個后綴名為.tf的文件或使用您已創建的.tf文件,并定義一個Resource。

    Resource中的alicloud_cs_kubernetes_addon用于管理集群的Addon,其中不需要填寫任何內容。

    resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" {
    }
  2. 執行以下命令,導入集群已安裝的nginx-ingress-controller組件。

    Terraform會拉取集群內的nginx-ingress-controller組件配置,并寫入到后綴名為.state的文件中。

    terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controller
  3. 執行命令terraform plan,根據其得到的結果,您可以看到集群內nginx-ingress-controller組件配置和定義的Resource之間的差異。

    根據差異的結果,以及.state后綴的文件內容,補充您在步驟1中寫入的Resource信息。直到執行指令terraform plan,顯示本地的配置與集群中的組件配置沒有任何差異后,即完成了組件的導入。

    resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" {
      cluster_id = "XXXXX"
      name = "nginx-ingress-controller"
      version = "v1.2.1-aliyun.1"
      config = jsonencode(
        {
          IngressSlbNetworkType = "internet"
          IngressSlbSpec        = "slb.s2.small"
        }
      )
    }

安裝集群組件

您可以通過Resource中的alicloud_cs_kubernetes_addon在已有集群中安裝組件,下面以gatekeeper組件為例說明。

  1. .tf文件中定義待安裝組件的信息,需要指定以下信息。

    • 集群ID。

    • 組件名稱和組件版本:

      集群可安裝的組件名稱和組件版本可以通過Data Source中的alicloud_cs_kubernetes_addons查詢,查詢結果僅返回每個組件最新的可安裝版本。如果您需要安裝組件的歷史版本,請查看對應組件的Release日志,并指定對應的組件版本號。

    • (可選)組件的自定義配置:

      修改config字段進行組件自定義配置,可以使用Terraform內置的jsonencode方法來構建您需要的配置。組件的可配置參數可以通過Data Source中的alicloud_cs_kubernetes_addon_metadata進行查詢,具體操作,請參見修改集群組件的自定義配置參數

    展開查看詳細信息

    resource "alicloud_cs_kubernetes_addon" "gatekeeper" {
      cluster_id = "ce36b7c61e126430b8b245730ca6d****"
      name = "gatekeeper"
      version = "v3.8.1.113-geb7947ef-aliyun"
      config = jsonencode(
        {
          AdmissionPodCpuLimit      = "1000m"
          AdmissionPodCpuRequest    = "100m"
          AdmissionPodMemoryLimit   = "512Mi"
          AdmissionPodMemoryRequest = "256Mi"
          AdmissionPodNumber        = 3
          AuditInterval             = 1800
          AuditPodCpuLimit          = "1000m"
          AuditPodCpuRequest        = "100m"
          AuditPodMemoryLimit       = "512Mi"
          AuditPodMemoryRequest     = "256Mi"
          EnableAuditPod            = false
          EnableMutatingWebhook     = false
        }
      )
    }
  2. 執行以下命令,在集群中安裝組件。

    terraform apply

    預期輸出:

    Plan: 1 to add, 0 to change, 0 to destroy.
    
    Do you want to perform these actions?
      Terraform will perform the actions described above.
      Only 'yes' will be accepted to approve.
    
      Enter a value: yes
    
    alicloud_cs_kubernetes_addon.gatekeeper: Creating...
    alicloud_cs_kubernetes_addon.gatekeeper: Still creating... [10s elapsed]
    alicloud_cs_kubernetes_addon.gatekeeper: Creation complete after 16s [id=XXXXX:gatekeeper]
    
    Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

    直到顯示Apply complete!,說明組件安裝完成。

升級集群組件

您可以通過Data Source中的alicloud_cs_kubernetes_addons來查詢組件可升級的版本,如果發現有新版本的組件可升級,可以通過直接修改版本號的方式進行升級,下面以gatekeeper組件為例說明。

展開查看詳細信息

resource "alicloud_cs_kubernetes_addon" "gatekeeper" {
  cluster_id = "ce36b7c61e126430b8b245730ca6d****"
  name = "gatekeeper"

  # 修改Version為指定的可升級版本。
  version = "XXXXXXXXX"
  config = jsonencode(
    {
      AdmissionPodCpuLimit      = "1000m"
      AdmissionPodCpuRequest    = "100m"
      AdmissionPodMemoryLimit   = "512Mi"
      AdmissionPodMemoryRequest = "256Mi"
      AdmissionPodNumber        = 3
      AuditInterval             = 1800
      AuditPodCpuLimit          = "1000m"
      AuditPodCpuRequest        = "100m"
      AuditPodMemoryLimit       = "512Mi"
      AuditPodMemoryRequest     = "256Mi"
      EnableAuditPod            = false
      EnableMutatingWebhook     = false
    }
  )
}

執行命令terraform apply,進行組件升級,顯示成功即完成了組件的升級。

修改集群組件的自定義配置參數

ACK的某些組件開啟了用戶自定義參數的配置能力,您可以通過Resource中的alicloud_cs_kubernetes_addons修改更新您的組件配置,以gatekeeper組件為例,您可以通過修改config字段來修改組件配置。

展開查看詳細信息

resource "alicloud_cs_kubernetes_addon" "gatekeeper" {
  cluster_id = "ce36b7c61e126430b8b245730ca6d****"
  name = "gatekeeper"
  version = "v3.8.1.113-geb7947ef-aliyun"

  # 您可以修改Config中的屬性并應用,來修改集群組件配置。

}

如果您需要查看組件支持的全部可配置參數,可以通過Data Source中的alicloud_cs_kubernetes_addon_metadata進行查詢,查詢結果的返回值為JSON Schema格式,以gatekeeper組件為例,您可以將以下內容添加到.tf文件中。

# 定義Data Source獲取gatekeeper組件的可配置參數Schema。
data "alicloud_cs_kubernetes_addon_metadata" "default" {
  cluster_id = "ce36b7c61e126430b8b245730ca6d****"
  name       = "gatekeeper"
  version    = "v3.8.1.113-geb7947ef-aliyun"
}

# 通過Output進行輸出。
output "addon_config_schema" {
  value = data.alicloud_cs_kubernetes_addons.default.config_schema
}

執行命令terraform apply,返回的結果為JSON Schema格式,其中properties屬性定義了所有支持配置的參數。根據返回的Schema,您可以任意指定Schema中支持的配置參數。可配置的參數說明如下:

  • default:默認值。

  • description:參數的描述。

  • pattern:正則表達式(代表允許傳遞的值的格式)。

  • type:字段類型。

展開查看詳細信息

addon_config_schema = <<EOT
{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "properties": {
    "AdmissionPodCpuLimit": {
      "default": "1000m",
      "description": "cpu limit for gatekeeper",
      "pattern": "^(|[1-9][0-9]*(m|\\.\\d+)?)$",
      "type": "string"
    },
    "AdmissionPodCpuRequest": {
      "default": "100m",
      "description": "cpu request for gatekeeper",
      "pattern": "^[1-9][0-9]*(m|\\.\\d+)?$",
      "type": "string"
    },
    "AdmissionPodMemoryLimit": {
      "default": "512Mi",
      "description": "memory limit for gatekeeper",
      "pattern": "^(|[1-9][0-9]*(\\.\\d+)?(K|Ki|M|Mi|G|Gi|T|Ti)?)$",
      "type": "string"
    },

    ......
  },
  "title": "Config",
  "type": "object"
}
EOT

配置網絡組件

在ACK中,您可以通過Terway網絡模式實現上述容器網絡的能力。更多信息,請參見網絡概述

下面展示如何通過Terraform配置網絡組件。

展開查看詳細信息

# 使用Terway作為網絡組件,并且使用Pod獨占彈性網卡模式,默認此方式。
# 該模式下,節點Pod數量將受到ECS彈性網卡配額限制。

resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name = "terway-eni"
  }
}

# 使用Terway作為網絡組件,并且使用IPVlan模式。
# 采用IPVlan + ebpf作為網卡共享模式虛擬化技術,只能使用Alibaba Cloud Linux 2系統。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name   =  "terway-eniip",
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"false\"}"
  }
}

# 使用Terway作為網絡組件,并且IPVlan模式下啟用NetworkPolicy策略支持。
# 采用IPVlan + ebpf作為網卡共享模式虛擬化技術,只能使用Alibaba Cloud Linux 2系統。
# IPVlan模式下,提供了基于策略的網絡控制。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name   =  "terway-eniip",
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"true\"}"
  }
}

配置存儲組件

ACK提供的存儲組件,支持Flexvolume和CSI兩種。Flexvolume已經停止維護,ACK主要維護CSI存儲組件。如果通過Terraform創建集群時,不指定任何存儲組件,默認會安裝CSI。在Terraform中通過以下方式進行存儲組件定義。

展開查看詳細信息

# 使用CSI作為存儲組件時,CSI包含csi-plugin、csi-provisioner;如果還想啟用創建默認的NAS文件系統和CNFS容器網絡文件系統動態存儲類型,還需要安裝storage-operator組件。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name = "csi-plugin"
  }
  addons {
    name = "csi-provisioner"
  }
  addons {
    name   = "storage-operator"
    config = "{\"CnfsOssEnable\":\"false\",\"CnfsNasEnable\":\"true\"}"
  }
}

配置日志組件

ACK提供的日志組件是logtail-ds,日志組件將采集到的日志存儲在SLS中。ACK提供的日志組件支持以下兩種日志存儲方式:

  • 支持指定已有SLS Project作為日志存儲。

  • 支持創建集群時自動創建新的SLS Project作為日志存儲。

兩種不同場景下的配置也有區別,下面通過一個Terraform示例說明:

展開查看詳細信息

# 使用自動創建SLS Project作為日志存儲。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name = "logtail-ds"
  }
}

# 使用自動創建SLS Project做日志存儲。同時開啟自動創建Ingress看板。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name = "logtail-ds"
    config = "{\"IngressDashboardEnabled\":\"true\"}
  }
}


# 使用已有SLS Project做日志存儲。同時開啟自動創建Ingress看板。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name = "logtail-ds"
    config = "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"k8s-log-c55c35ff493df47b88783bea48827****\"}"
  }
}

# 安裝配置node-problem-detector事件中心。
# 使用自動創建SLS Project作為事件中心的日志存儲。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name   = "ack-node-problem-detector"
    config = "{\"sls_project_name\":\"\"}"
  }
}

# 安裝配置node-problem-detector事件中心。
# 使用已有SLS Project作為事件中心的日志存儲。可以和logtail-ds共用同一個日志庫。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name   = "ack-node-problem-detector"
    config = "{\"sls_project_name\":\"k8s-log-c55c35ff493df47b88783bea48827****\"}"
  }
}

配置監控組件

ACK提供的監控組件包括ECS節點上安裝的云監控插件和Prometheus監控服務。在Terraform中安裝ECS節點上安裝的云監控插件是通過參數install_cloud_monitor來控制的。

展開查看詳細信息

# 安裝ECS節點上安裝的云監控插件。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...
  install_cloud_monitor = true
}

# 安裝Prometheus監控。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name = "arms-prometheus"
  }
}

# 同時安裝ECS節點上安裝的云監控插件和Prometheus監控服務。

# 安裝Prometheus監控, 推薦同時啟用。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...
  install_cloud_monitor = true
  addons {
    name = "arms-prometheus"
  }
}

配置Ingess路由組件

ACK提供的流量接入方案,包括Nginx Ingress和ALB Ingress。

  • Nginx Ingress組件:基于社區版的ingress-nginx進行了優化,為您的Kubernetes集群提供靈活可靠的路由服務。更多信息,請參見Nginx Ingress概述

  • ALB Ingress組件:是全托管并且高可靠的ALB Ingress組件,為您的Kubernetes集群提供靈活可靠的路由服務。更多信息,請參見通過ALB Ingress訪問服務

通過Terraform配置路由組件的示例如下:

展開查看詳細信息

# 使用nginx-ingress-controller路由。
# 如果使用公網的SLB,需要在Config中設置IngressSlbNetworkType值為internet。
# 如果使用私網的SLB,需要在Config中設置IngressSlbNetworkType值為intranet。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name   =  "nginx-ingress-controller",
    config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
  }
}

# 使用ALB Ingress路由。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name   = "alb-ingress-controller",
  }
}

禁用默認安裝的組件

ACK會默認安裝部分組件,方便您管理集群,如果您在創建集群的時候,不需要安裝這些組件,可以通過設置字段為disabled = true來禁用這些組件。下面以禁用nginx-ingress-controller為例說明:

# 禁止安裝nginx-ingress-controller組件。

resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...

  addons {
    name     =  "nginx-ingress-controller",
    disabled = true
  }
}

未指定Addons的情況下默認安裝的組件

如果集群創建時,沒有指定任何Addons,會默認安裝以下組件。

集群類型

組件類型

默認安裝組件名稱

組件描述

ACK集群

系統組件

kube-scheduler

使用Kube Scheduler進行集群資源調度。

cloud-controller-manager

使用Cloud Controller Manager為K8s應用創建負載均衡,管理節點路由條目。

kube-apiserver

APIServer是K8s集群的總線和入口網關。

kube-controller-manager

KCM是K8s集群內部資源的管理器。

日志與監控

alicloud-monitor-controller

監控應用容器的生命周期和狀態變化。

metrics-server

Metrics Server為集群的自動伸縮機制提供應用容器的資源監控指標。

存儲

csi-plugin

使用csi-plugin插件實現存儲卷生命周期管理(推薦)。

csi-provisioner

使用csi-provisioner插件實現存儲卷創建和刪除(推薦)。

storage-operator

使用storage-operator插件實現存儲運維管理(推薦)。

網絡

CoreDNS

Kubernetes集群域名解析服務器。

Gateway API

Gateway API網關資源模型。

terway-eniip

Terway網絡插件。

nginx-ingress-controller(Pro版默認安裝)

基于Nginx流量轉發的Ingress控制器。

ACK Serverless集群

系統組件

kube-scheduler

使用Kube Scheduler進行集群資源調度。

ack-virtual-node

使用虛擬節點和ECI極致彈性能力。

cloud-controller-manager

使用Cloud Controller Manager為K8s應用創建負載均衡,管理節點路由條目。

kube-apiserver

APIServer是K8s集群的總線和入口網關。

kube-controller-manager

KCM是K8s集群內部資源的管理器。

網絡

CoreDNS

K8s集群域名解析服務器。

ACK Edge集群

系統組件

kube-scheduler

使用Kube Scheduler進行集群資源調度

cloud-controller-manager

使用Cloud Controller Manager為K8s應用創建負載均衡,管理節點路由條目。

kube-apiserver

APIServer是K8s集群的總線和入口網關。

kube-controller-manager

KCM是K8s集群內部資源的管理器。

日志與監控

alicloud-monitor-controller

監控應用容器的生命周期和狀態變化。

metrics-server

Metrics Server為集群的自動伸縮機制提供應用容器的資源監控指標

網絡

CoreDNS

Kubernetes集群域名解析服務器。

terway-eniip

Terway網絡插件。

其他

edge-controller-manager

-

edge-tunnel-agent

Edge-tunnel采用C/S架構,構建云邊反向運維通道。

edge-tunnel-server

Edge-tunnel采用C/S架構,構建云邊反向運維通道。

yurt-app-manager

使用yurt-app-manager為ACK@Edge提供節點池和單元化部署的功能。

常用配置示例

以下列出了部分通用示例,供參考使用。

  • 網絡組件選擇Terway。

  • 存儲組件CSI和Flexvolume選擇一個即可,由于Flexvolume已停止維護,建議使用CSI作為存儲組件。

  • 路由組件Nginx-Ingress和ALB Ingress選擇一個即可,根據業務需求進行合理選擇。

  • 其他組件可以根據業務需求選擇性安裝,可以自由組合。

示例一:不配置任何組件

# 集群創建不配置任何組件,則僅安裝默認組件。
# 一個集群的最簡配置,變量請替換為您自定義的變量。
resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  pod_cidr                     = "172.20.0.0/16"
  service_cidr                 = "172.21.0.0/20"
  worker_vswitch_ids           = ["var.vswitch_id"]
}

示例二:使用Terway網絡

# 創建Terway網絡集群。
# 使用Pod獨占彈性網卡模式。

resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  pod_vswitch_ids              = [var.vswitch_id]
  service_cidr                 = "172.21.0.0/20"
  worker_vswitch_ids           = ["var.vswitch_id"]

  addons {
    name = "terway-eni"
  }
}

# 創建Terway網絡集群。
# 同時使用IPVlan模式,并且開啟網絡策略。
resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  service_cidr                 = "172.21.0.0/20"
  pod_vswitch_ids              = ["var.vswitch_id"]
  worker_vswitch_ids           = ["var.vswitch_id"]

  addons {
    name   =  "terway-eniip"
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"true\"}"
  }
}

示例三:使用Terway、CSI和nginx-ingress的通用模板

# Terway + CSI + nginx-ingress通用模板。

resource "alicloud_cs_managed_kubernetes" "default" {
  name                         = var.name
  cluster_spec                 = "ack.pro.small"
  is_enterprise_security_group = true
  service_cidr                 = "172.21.0.0/20"
  pod_vswitch_ids              = ["var.vswitch_id"]
  worker_vswitch_ids           = ["var.vswitch_id"]

  addons {
    name = "terway-eniip",
    config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"false\"}"
  }
  addons {
    name = "csi-plugin"
  }
  addons {
    name = "csi-provisioner"
  }
  addons {
    name = "storage-operator"
    config = "{\"CnfsOssEnable\":\"false\",\"CnfsNasEnable\":\"true\"}"
  }
  addons {
    name = "logtail-ds"
    config = "{\"IngressDashboardEnabled\":\"true\"}"
  }
  addons {
    name = "ack-node-problem-detector"
    config = "{\"sls_project_name\":\"\"}"
  }
  addons {
    name = "nginx-ingress-controller"
    config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
  }
  addons {
    name = "ack-node-local-dns"
  }
  addons {
    name = "arms-prometheus"
  }
  addons {
    name = "alicloud-monitor-controller"
    config = "{\"group_contact_ids\":\"[10619]\"}"
  }
}