全部產品
Search
文件中心

Container Service for Kubernetes:使用Terraform管理組件

更新時間:Jun 19, 2024

Container Service for Kubernetes提供豐富的組件,用於擴充叢集功能。本文介紹如何在Terraform中配置組件,以協助您在多情境下完成業務的管理。

組件類型

Container ServiceACK管理的叢集組件類型包括系統組件和可選組件。更多組件資訊,請參見組件概述

系統組件

系統組件是運行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提供對接CloudMonitor的系統組件。

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實現Container Service叢集監控。

addons { name = "arms-prometheus" }

logtail-ds

日誌與監控

使用Log Service採集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

網路組件

阿里雲開源的基於Virtual Private Cloud的容器網路介面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

其他

Container ServiceACK成本分析功能進行資料處理的外掛程式。

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與Elastic Container Instance的無縫串連。

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

其他

由阿里雲Container Service團隊和螞蟻金服安全計算團隊針對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:Regex(代表允許傳遞的值的格式)。

  • 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節點上安裝的CloudMonitor外掛程式和Prometheus監控服務。在Terraform中安裝ECS節點上安裝的CloudMonitor外掛程式是通過參數install_cloud_monitor來控制的。

展開查看詳細資料

# 安裝ECS節點上安裝的CloudMonitor外掛程式。
resource "alicloud_cs_managed_kubernetes" "default" {
  # 其它參數。
  # ...
  install_cloud_monitor = true
}

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

  addons {
    name = "arms-prometheus"
  }
}

# 同時安裝ECS節點上安裝的CloudMonitor外掛程式和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 Gateway資源模型。

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]\"}"
  }
}