容器服務 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 | 應用管理 | 提供統一管理多集群應用部署和應用生命周期的應用中心組件。 |
|
progressive-delivery-tool | 應用管理 | 提供應用漸進式灰度發布的組件。 |
|
alicloud-monitor-controller | 日志與監控 | ACK提供對接云監控的系統組件。 |
|
metrics-server | 日志與監控 | ACK基于社區開源監控組件進行改造和增強的監控采集和離線組件,并提供Metrics API進行數據消費,提供HPA的能力。 |
|
ack-node-problem-detector | 日志與監控 | ACK基于社區開源項目進行改造和增強的集群節點異常事件監控組件,以及對接第三方監控平臺功能的組件。 |
|
ags-metrics-collector | 日志與監控 | 為基因計算客戶使用的監控服務組件,可以通過該組件監控基因工作流中各個節點資源使用的詳細信息。 |
|
ack-arms-prometheus | 日志與監控 | 使用阿里云Prometheus實現容器服務集群監控。 |
|
logtail-ds | 日志與監控 | 使用日志服務采集Kubernetes容器日志。 | ? |
csi-plugin | 存儲組件 | 支持數據卷的掛載、卸載功能。創建集群時,如果選擇CSI插件實現阿里云存儲的接入能力的話,默認安裝該組件。 |
|
csi-provisioner | 存儲組件 | 支持數據卷的自動創建能力。創建集群時,如果選擇CSI插件實現阿里云存儲的接入能力的話,默認安裝該組件。 |
|
storage-operator | 存儲組件 | 用于管理存儲組件的生命周期。 |
|
alicloud-disk-controller | 存儲組件 | 支持自動創建云盤卷。 |
|
flexvolume | 存儲組件 | Kubernetes社區較早實現的存儲卷擴展機制。Flexvolume支持數據卷的掛載、卸載功能。創建集群時,如果選擇Flexvolume插件實現阿里云存儲的接入能力的話,默認安裝該組件。 |
|
nginx-ingress-controller | 網絡組件 | Nginx Ingress Controller解析Ingress的轉發規則。Ingress Controller收到請求,匹配Ingress轉發規則轉發到后端Service。 | ? |
terway-eniip | 網絡組件 | 阿里云開源的基于專有網絡VPC的容器網絡接口CNI(Container Network Interface)插件,支持基于Kubernetes標準的網絡策略來定義容器間的訪問策略。您可以通過使用Terway網絡組件實現Kubernetes集群內部的網絡互通。創建集群時,如果選擇Terway網絡插件實現集群內部網絡互通的話,默認安裝該組件。 |
|
ack-node-local-dns | 網絡組件 | 基于社區開源項目NodeLocal DNSCache的一套DNS本地緩存解決方案。 | ? |
aliyun-acr-credential-helper | 安全組件 | 可以在ACK集群中免密拉取ACR默認版或企業版私有鏡像的組件。 |
|
gatekeeper | 安全組件 | 幫助管理和應用集群內的Open Policy Agent(OPA)策略,實現命名空間標簽管理等功能。 |
|
kritis-validation-hook | 安全組件 | 部署可信容器環節中進行容器鏡像簽名驗證的關鍵組件。 |
|
security-inspector | 安全組件 | 實現安全巡檢功能的關鍵組件。 |
|
ack-kubernetes-webhook-injector | 安全組件 | 一款可以從多種阿里云產品白名單中動態加入或移出Pod IP的K8s組件,免去手動配置Pod IP到云產品白名單的操作。 |
|
ack-arena | 其他 | 對開源Arena的安裝做進一步簡化,能夠實現在控制臺一鍵安裝Arena的目標。 |
|
ack-cost-exporter | 其他 | 容器服務ACK成本分析功能進行數據處理的插件。 |
|
ack-kubernetes-cronhpa-controller | 其他 | 使用ack-kubernetes-cronhpa-controller實現應用負載定時伸縮。 |
|
ack-virtual-node | 其他 | 基于社區開源項目Virtual Kubelet,擴展了對Aliyun Provider的支持,并做了大量優化,實現Kubernetes與彈性容器實例ECI的無縫連接。 |
|
aesm | 其他 | Intel? SGX Architectural Enclave Service Manager (Intel? SGX AESM) 是Intel? SGX的系統組件,主要提供了SGX Enclave啟動支持,密鑰配置、遠程認證等服務。 |
|
aliyun-acr-acceleration-suite | 其他 | 提供鏡像按需加載加速能力的客戶端插件,以DaemonSet形式部署在Worker節點上。 |
|
migrate-controller | 其他 | 基于開源項目Velero開發的一個Kubernetes應用遷移的組件。 |
|
resource-controller | 其他 | 實現動態控制Pod資源的關鍵組件,使用ACK Pro集群的CPU拓撲感知調度需要安裝此組件。 |
|
sandboxed-container-controller | 其他 | 安全沙箱運行時提供的專用控制器組件,旨在增強和擴展安全沙箱的基本功能。 |
|
sandboxed-container-helper | 其他 | 為安全沙箱提供診斷和運維的組件。 |
|
sgx-device-plugin | 其他 | 由阿里云容器服務團隊和螞蟻金服安全計算團隊針對Intel SGX聯合開發的Kubernetes Device Plugin,可以讓您更容易的在容器中使用SGX。 |
|
在創建集群后管理組件生命周期
管理組件的生命周期前提是您已經創建了一個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管理。
新建一個后綴名為.tf的文件或使用您已創建的.tf文件,并定義一個Resource。
Resource中的
alicloud_cs_kubernetes_addon
用于管理集群的Addon,其中不需要填寫任何內容。resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" { }
執行以下命令,導入集群已安裝的nginx-ingress-controller組件。
Terraform會拉取集群內的nginx-ingress-controller組件配置,并寫入到后綴名為.state的文件中。
terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controller
執行命令
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組件為例說明。
在.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 } ) }
執行以下命令,在集群中安裝組件。
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配置網絡組件。
配置存儲組件
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網絡集群。
# 使用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通用模板。
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]\"}"
}
}