使用Terraform管理組件
容器服務(wù) Kubernetes 版提供豐富的組件,用于擴展集群功能。本文介紹如何在Terraform中配置組件,以幫助您在多場景下完成業(yè)務(wù)的管理。
組件類型
容器服務(wù)ACK管理的集群組件類型包括系統(tǒng)組件和可選組件。更多組件信息,請參見組件概述。
系統(tǒng)組件
系統(tǒng)組件是運行ACK集群所依賴的基礎(chǔ)組件,創(chuàng)建集群時會默認安裝。例如:
kube-apiserver
kube-controller-manager
cloud-controller-manager
kube-proxy
CoreDNS
可選組件
可選組件是ACK提供的非必需部署的組件,您可選擇性的安裝組件,用于擴展集群功能。可選組件在類型上可劃分為應(yīng)用管理組件、日志與監(jiān)控管理組件、存儲組件、網(wǎng)絡(luò)組件及安全組件等。
組件管理實踐
通過Terraform,您可以在創(chuàng)建集群時指定需要安裝的組件,并在集群創(chuàng)建結(jié)束后對組件進行全生命周期管理,下面將介紹如何管理集群中的組件生命周期,以及一些場景下的最佳實踐。
在創(chuàng)建集群時指定需要安裝的組件
您可以在創(chuàng)建集群時,指定集群需要安裝的組件,創(chuàng)建集群涉及的Resource如下:
Kubernetes托管版集群:alicloud_cs_managed_kubernetes
Kubernetes專有版集群:alicloud_cs_kubernetes
ACK Edge集群:alicloud_cs_edge_kubernetes
ACK Serverless集群:alicloud_cs_serverless_kubernetes
以上Resource均可以通過addons
屬性定義創(chuàng)建集群時需要安裝的組件,addons
屬性定義如下:
# 以托管版集群為例。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
# addons為list結(jié)構(gòu),通過在Resource中定義addons屬性,表明創(chuàng)建集群時安裝該組件。
addons {
# 組件的名稱,您可以通過Data Source中的alicloud_cs_kubernetes_addons查詢。
# 當前集群已經(jīng)安裝的,以及可以安裝的組件和其對應(yīng)版本信息。
name = "XXX"
# 組件的自定義參數(shù),某些集群組件開啟了自定義參數(shù)配置的能力,您可以使用該字段來為組件指定其自定義參數(shù),具體指定方法,請參見下文“修改集群組件的自定義配置參數(shù)”一節(jié)。
config = jsonencode(
{
....
}
)
# 該參數(shù)默認值為false(布爾值類型),ACK會默認安裝部分組件,方便用戶管理集群。若您在創(chuàng)建集群時不需安裝這些組件,可設(shè)置disabled=true。
disabled = XXX
}
}
通過在集群相關(guān)Resource中指定Addons的方式安裝組件,僅支持在創(chuàng)建集群時指定安裝,集群創(chuàng)建完成后,不支持通過修改Addons代碼塊中的屬性來管理組件的組件生命周期,比如組件升級、組件卸載、組件配置更新等操作。若您需要在創(chuàng)建集群后管理組件生命周期,請參見下文在創(chuàng)建集群后管理組件生命周期。
ACK中組件配置方式如下表所示。
組件名稱 | 組件類型 | 組件描述 | Terraform中配置組件 |
appcenter | 應(yīng)用管理 | 提供統(tǒng)一管理多集群應(yīng)用部署和應(yīng)用生命周期的應(yīng)用中心組件。 |
|
progressive-delivery-tool | 應(yīng)用管理 | 提供應(yīng)用漸進式灰度發(fā)布的組件。 |
|
alicloud-monitor-controller | 日志與監(jiān)控 | ACK提供對接云監(jiān)控的系統(tǒng)組件。 |
|
metrics-server | 日志與監(jiān)控 | ACK基于社區(qū)開源監(jiān)控組件進行改造和增強的監(jiān)控采集和離線組件,并提供Metrics API進行數(shù)據(jù)消費,提供HPA的能力。 |
|
ack-node-problem-detector | 日志與監(jiān)控 | ACK基于社區(qū)開源項目進行改造和增強的集群節(jié)點異常事件監(jiān)控組件,以及對接第三方監(jiān)控平臺功能的組件。 |
|
ags-metrics-collector | 日志與監(jiān)控 | 為基因計算客戶使用的監(jiān)控服務(wù)組件,可以通過該組件監(jiān)控基因工作流中各個節(jié)點資源使用的詳細信息。 |
|
ack-arms-prometheus | 日志與監(jiān)控 | 使用阿里云Prometheus實現(xiàn)容器服務(wù)集群監(jiān)控。 |
|
logtail-ds | 日志與監(jiān)控 | 使用日志服務(wù)采集Kubernetes容器日志。 | ? |
csi-plugin | 存儲組件 | 支持數(shù)據(jù)卷的掛載、卸載功能。創(chuàng)建集群時,如果選擇CSI插件實現(xiàn)阿里云存儲的接入能力的話,默認安裝該組件。 |
|
csi-provisioner | 存儲組件 | 支持數(shù)據(jù)卷的自動創(chuàng)建能力。創(chuàng)建集群時,如果選擇CSI插件實現(xiàn)阿里云存儲的接入能力的話,默認安裝該組件。 |
|
storage-operator | 存儲組件 | 用于管理存儲組件的生命周期。 |
|
alicloud-disk-controller | 存儲組件 | 支持自動創(chuàng)建云盤卷。 |
|
flexvolume | 存儲組件 | Kubernetes社區(qū)較早實現(xiàn)的存儲卷擴展機制。Flexvolume支持數(shù)據(jù)卷的掛載、卸載功能。創(chuàng)建集群時,如果選擇Flexvolume插件實現(xiàn)阿里云存儲的接入能力的話,默認安裝該組件。 |
|
nginx-ingress-controller | 網(wǎng)絡(luò)組件 | Nginx Ingress Controller解析Ingress的轉(zhuǎn)發(fā)規(guī)則。Ingress Controller收到請求,匹配Ingress轉(zhuǎn)發(fā)規(guī)則轉(zhuǎn)發(fā)到后端Service。 | ? |
terway-eniip | 網(wǎng)絡(luò)組件 | 阿里云開源的基于專有網(wǎng)絡(luò)VPC的容器網(wǎng)絡(luò)接口CNI(Container Network Interface)插件,支持基于Kubernetes標準的網(wǎng)絡(luò)策略來定義容器間的訪問策略。您可以通過使用Terway網(wǎng)絡(luò)組件實現(xiàn)Kubernetes集群內(nèi)部的網(wǎng)絡(luò)互通。創(chuàng)建集群時,如果選擇Terway網(wǎng)絡(luò)插件實現(xiàn)集群內(nèi)部網(wǎng)絡(luò)互通的話,默認安裝該組件。 |
|
ack-node-local-dns | 網(wǎng)絡(luò)組件 | 基于社區(qū)開源項目NodeLocal DNSCache的一套DNS本地緩存解決方案。 | ? |
aliyun-acr-credential-helper | 安全組件 | 可以在ACK集群中免密拉取ACR默認版或企業(yè)版私有鏡像的組件。 |
|
gatekeeper | 安全組件 | 幫助管理和應(yīng)用集群內(nèi)的Open Policy Agent(OPA)策略,實現(xiàn)命名空間標簽管理等功能。 |
|
kritis-validation-hook | 安全組件 | 部署可信容器環(huán)節(jié)中進行容器鏡像簽名驗證的關(guān)鍵組件。 |
|
security-inspector | 安全組件 | 實現(xiàn)安全巡檢功能的關(guān)鍵組件。 |
|
ack-kubernetes-webhook-injector | 安全組件 | 一款可以從多種阿里云產(chǎn)品白名單中動態(tài)加入或移出Pod IP的K8s組件,免去手動配置Pod IP到云產(chǎn)品白名單的操作。 |
|
ack-arena | 其他 | 對開源Arena的安裝做進一步簡化,能夠?qū)崿F(xiàn)在控制臺一鍵安裝Arena的目標。 |
|
ack-cost-exporter | 其他 | 容器服務(wù)ACK成本分析功能進行數(shù)據(jù)處理的插件。 |
|
ack-kubernetes-cronhpa-controller | 其他 | 使用ack-kubernetes-cronhpa-controller實現(xiàn)應(yīng)用負載定時伸縮。 |
|
ack-virtual-node | 其他 | 基于社區(qū)開源項目Virtual Kubelet,擴展了對Aliyun Provider的支持,并做了大量優(yōu)化,實現(xiàn)Kubernetes與彈性容器實例ECI的無縫連接。 |
|
aesm | 其他 | Intel? SGX Architectural Enclave Service Manager (Intel? SGX AESM) 是Intel? SGX的系統(tǒng)組件,主要提供了SGX Enclave啟動支持,密鑰配置、遠程認證等服務(wù)。 |
|
aliyun-acr-acceleration-suite | 其他 | 提供鏡像按需加載加速能力的客戶端插件,以DaemonSet形式部署在Worker節(jié)點上。 |
|
migrate-controller | 其他 | 基于開源項目Velero開發(fā)的一個Kubernetes應(yīng)用遷移的組件。 |
|
resource-controller | 其他 | 實現(xiàn)動態(tài)控制Pod資源的關(guān)鍵組件,使用ACK Pro集群的CPU拓撲感知調(diào)度需要安裝此組件。 |
|
sandboxed-container-controller | 其他 | 安全沙箱運行時提供的專用控制器組件,旨在增強和擴展安全沙箱的基本功能。 |
|
sandboxed-container-helper | 其他 | 為安全沙箱提供診斷和運維的組件。 |
|
sgx-device-plugin | 其他 | 由阿里云容器服務(wù)團隊和螞蟻金服安全計算團隊針對Intel SGX聯(lián)合開發(fā)的Kubernetes Device Plugin,可以讓您更容易的在容器中使用SGX。 |
|
在創(chuàng)建集群后管理組件生命周期
管理組件的生命周期前提是您已經(jīng)創(chuàng)建了一個Kubernetes集群,如果您還沒有創(chuàng)建Kubernetes集群,請先創(chuàng)建集群。
對于集群中的組件,您可以通過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,查詢當前集群所有已安裝的以及可以安裝的組件和其對應(yīng)版本信息。
name = "XXXX"
# 組件的版本信息。
version = "XXXX"
# 組件的自定義參數(shù),為JSON格式的字符串,可以使用Terraform自帶的jsonencode方法進行配置,也可以直接使用JSON字符串進行配置(需要注意轉(zhuǎn)義),某些集群組件開啟了自定義參數(shù)配置的能力,您可以使用該字段來為組件指定其自定義參數(shù),具體指定方法,請參見下文“修改集群組件的自定義配置參數(shù)”一節(jié) 。
config = jsonencode(
{
....
}
)
}
您可以通過直接寫入JSON字符串的方式配置組件自定義參數(shù),但是需要注意轉(zhuǎn)義。例如對于nginx-ingress-controller組件,有以下兩種配置方法:
通過
jsonencode
配置參數(shù):config = jsonencode( { IngressSlbNetworkType="internet" IngressSlbSpec="slb.s2.small" } )
通過直接使用字符串的方式配置參數(shù):
config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
將集群已安裝的組件導(dǎo)入Terraform管理
對于集群已經(jīng)安裝的組件,您可以通過terraform import
的方式,將組件導(dǎo)入Terraform進行管理。下面以nginx-ingress-controller組件為例說明如何將集群已安裝的組件導(dǎo)入Terraform管理。
新建一個后綴名為.tf的文件或使用您已創(chuàng)建的.tf文件,并定義一個Resource。
Resource中的
alicloud_cs_kubernetes_addon
用于管理集群的Addon,其中不需要填寫任何內(nèi)容。resource "alicloud_cs_kubernetes_addon" "nginx-ingress-controller" { }
執(zhí)行以下命令,導(dǎo)入集群已安裝的nginx-ingress-controller組件。
Terraform會拉取集群內(nèi)的nginx-ingress-controller組件配置,并寫入到后綴名為.state的文件中。
terraform import alicloud_cs_kubernetes_addon.nginx-ingress-controller <cluster_id>:nginx-ingress-controller
執(zhí)行命令
terraform plan
,根據(jù)其得到的結(jié)果,您可以看到集群內(nèi)nginx-ingress-controller組件配置和定義的Resource之間的差異。根據(jù)差異的結(jié)果,以及.state后綴的文件內(nèi)容,補充您在步驟1中寫入的Resource信息。直到執(zhí)行指令
terraform plan
,顯示本地的配置與集群中的組件配置沒有任何差異后,即完成了組件的導(dǎo)入。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
查詢,查詢結(jié)果僅返回每個組件最新的可安裝版本。如果您需要安裝組件的歷史版本,請查看對應(yīng)組件的Release日志,并指定對應(yīng)的組件版本號。(可選)組件的自定義配置:
修改
config
字段進行組件自定義配置,可以使用Terraform內(nèi)置的jsonencode
方法來構(gòu)建您需要的配置。組件的可配置參數(shù)可以通過Data Source中的alicloud_cs_kubernetes_addon_metadata
進行查詢,具體操作,請參見修改集群組件的自定義配置參數(shù)。
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 } ) }
執(zhí)行以下命令,在集群中安裝組件。
terraform apply
預(yù)期輸出:
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
來查詢組件可升級的版本,如果發(fā)現(xiàn)有新版本的組件可升級,可以通過直接修改版本號的方式進行升級,下面以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
}
)
}
執(zhí)行命令terraform apply
,進行組件升級,顯示成功即完成了組件的升級。
修改集群組件的自定義配置參數(shù)
ACK的某些組件開啟了用戶自定義參數(shù)的配置能力,您可以通過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中的屬性并應(yīng)用,來修改集群組件配置。
}
如果您需要查看組件支持的全部可配置參數(shù),可以通過Data Source中的alicloud_cs_kubernetes_addon_metadata
進行查詢,查詢結(jié)果的返回值為JSON Schema格式,以gatekeeper組件為例,您可以將以下內(nèi)容添加到.tf文件中。
# 定義Data Source獲取gatekeeper組件的可配置參數(shù)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
}
執(zhí)行命令terraform apply
,返回的結(jié)果為JSON Schema格式,其中properties
屬性定義了所有支持配置的參數(shù)。根據(jù)返回的Schema,您可以任意指定Schema中支持的配置參數(shù)。可配置的參數(shù)說明如下:
default:默認值。
description:參數(shù)的描述。
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
配置網(wǎng)絡(luò)組件
在ACK中,您可以通過Terway網(wǎng)絡(luò)模式實現(xiàn)上述容器網(wǎng)絡(luò)的能力。更多信息,請參見網(wǎng)絡(luò)概述。
下面展示如何通過Terraform配置網(wǎng)絡(luò)組件。
配置存儲組件
ACK提供的存儲組件,支持Flexvolume和CSI兩種。Flexvolume已經(jīng)停止維護,ACK主要維護CSI存儲組件。如果通過Terraform創(chuàng)建集群時,不指定任何存儲組件,默認會安裝CSI。在Terraform中通過以下方式進行存儲組件定義。
# 使用CSI作為存儲組件時,CSI包含csi-plugin、csi-provisioner;如果還想啟用創(chuàng)建默認的NAS文件系統(tǒng)和CNFS容器網(wǎng)絡(luò)文件系統(tǒng)動態(tài)存儲類型,還需要安裝storage-operator組件。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "csi-plugin"
}
addons {
name = "csi-provisioner"
}
addons {
name = "storage-operator"
config = "{\"CnfsOssEnable\":\"false\",\"CnfsNasEnable\":\"true\"}"
}
}
配置日志組件
ACK提供的日志組件是logtail-ds,日志組件將采集到的日志存儲在SLS中。ACK提供的日志組件支持以下兩種日志存儲方式:
支持指定已有SLS Project作為日志存儲。
支持創(chuàng)建集群時自動創(chuàng)建新的SLS Project作為日志存儲。
兩種不同場景下的配置也有區(qū)別,下面通過一個Terraform示例說明:
# 使用自動創(chuàng)建SLS Project作為日志存儲。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "logtail-ds"
}
}
# 使用自動創(chuàng)建SLS Project做日志存儲。同時開啟自動創(chuàng)建Ingress看板。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "logtail-ds"
config = "{\"IngressDashboardEnabled\":\"true\"}
}
}
# 使用已有SLS Project做日志存儲。同時開啟自動創(chuàng)建Ingress看板。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "logtail-ds"
config = "{\"IngressDashboardEnabled\":\"true\",\"sls_project_name\":\"k8s-log-c55c35ff493df47b88783bea48827****\"}"
}
}
# 安裝配置node-problem-detector事件中心。
# 使用自動創(chuàng)建SLS Project作為事件中心的日志存儲。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "ack-node-problem-detector"
config = "{\"sls_project_name\":\"\"}"
}
}
# 安裝配置node-problem-detector事件中心。
# 使用已有SLS Project作為事件中心的日志存儲。可以和logtail-ds共用同一個日志庫。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "ack-node-problem-detector"
config = "{\"sls_project_name\":\"k8s-log-c55c35ff493df47b88783bea48827****\"}"
}
}
配置監(jiān)控組件
ACK提供的監(jiān)控組件包括ECS節(jié)點上安裝的云監(jiān)控插件和Prometheus監(jiān)控服務(wù)。在Terraform中安裝ECS節(jié)點上安裝的云監(jiān)控插件是通過參數(shù)install_cloud_monitor來控制的。
# 安裝ECS節(jié)點上安裝的云監(jiān)控插件。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
install_cloud_monitor = true
}
# 安裝Prometheus監(jiān)控。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "arms-prometheus"
}
}
# 同時安裝ECS節(jié)點上安裝的云監(jiān)控插件和Prometheus監(jiān)控服務(wù)。
# 安裝Prometheus監(jiān)控, 推薦同時啟用。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
install_cloud_monitor = true
addons {
name = "arms-prometheus"
}
}
配置Ingess路由組件
ACK提供的流量接入方案,包括Nginx Ingress和ALB Ingress。
Nginx Ingress組件:基于社區(qū)版的ingress-nginx進行了優(yōu)化,為您的Kubernetes集群提供靈活可靠的路由服務(wù)。更多信息,請參見Nginx Ingress概述。
ALB Ingress組件:是全托管并且高可靠的ALB Ingress組件,為您的Kubernetes集群提供靈活可靠的路由服務(wù)。更多信息,請參見通過ALB Ingress訪問服務(wù)。
通過Terraform配置路由組件的示例如下:
# 使用nginx-ingress-controller路由。
# 如果使用公網(wǎng)的SLB,需要在Config中設(shè)置IngressSlbNetworkType值為internet。
# 如果使用私網(wǎng)的SLB,需要在Config中設(shè)置IngressSlbNetworkType值為intranet。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "nginx-ingress-controller",
config = "{\"IngressSlbNetworkType\":\"internet\",\"IngressSlbSpec\":\"slb.s2.small\"}"
}
}
# 使用ALB Ingress路由。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "alb-ingress-controller",
}
}
禁用默認安裝的組件
ACK會默認安裝部分組件,方便您管理集群,如果您在創(chuàng)建集群的時候,不需要安裝這些組件,可以通過設(shè)置字段為disabled = true
來禁用這些組件。下面以禁用nginx-ingress-controller
為例說明:
# 禁止安裝nginx-ingress-controller組件。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它參數(shù)。
# ...
addons {
name = "nginx-ingress-controller",
disabled = true
}
}
未指定Addons的情況下默認安裝的組件
如果集群創(chuàng)建時,沒有指定任何Addons,會默認安裝以下組件。
集群類型 | 組件類型 | 默認安裝組件名稱 | 組件描述 | |
ACK集群 | 系統(tǒng)組件 | kube-scheduler | 使用Kube Scheduler進行集群資源調(diào)度。 | |
cloud-controller-manager | 使用Cloud Controller Manager為K8s應(yīng)用創(chuàng)建負載均衡,管理節(jié)點路由條目。 | |||
kube-apiserver | APIServer是K8s集群的總線和入口網(wǎng)關(guān)。 | |||
kube-controller-manager | KCM是K8s集群內(nèi)部資源的管理器。 | |||
日志與監(jiān)控 | alicloud-monitor-controller | 監(jiān)控應(yīng)用容器的生命周期和狀態(tài)變化。 | ||
metrics-server | Metrics Server為集群的自動伸縮機制提供應(yīng)用容器的資源監(jiān)控指標。 | |||
存儲 | csi-plugin | 使用csi-plugin插件實現(xiàn)存儲卷生命周期管理(推薦)。 | ||
csi-provisioner | 使用csi-provisioner插件實現(xiàn)存儲卷創(chuàng)建和刪除(推薦)。 | |||
storage-operator | 使用storage-operator插件實現(xiàn)存儲運維管理(推薦)。 | |||
網(wǎng)絡(luò) | CoreDNS | Kubernetes集群域名解析服務(wù)器。 | ||
Gateway API | Gateway API網(wǎng)關(guān)資源模型。 | |||
terway-eniip | Terway網(wǎng)絡(luò)插件。 | |||
nginx-ingress-controller(Pro版默認安裝) | 基于Nginx流量轉(zhuǎn)發(fā)的Ingress控制器。 | |||
ACK Serverless集群 | 系統(tǒng)組件 | kube-scheduler | 使用Kube Scheduler進行集群資源調(diào)度。 | |
ack-virtual-node | 使用虛擬節(jié)點和ECI極致彈性能力。 | |||
cloud-controller-manager | 使用Cloud Controller Manager為K8s應(yīng)用創(chuàng)建負載均衡,管理節(jié)點路由條目。 | |||
kube-apiserver | APIServer是K8s集群的總線和入口網(wǎng)關(guān)。 | |||
kube-controller-manager | KCM是K8s集群內(nèi)部資源的管理器。 | |||
網(wǎng)絡(luò) | CoreDNS | K8s集群域名解析服務(wù)器。 | ||
ACK Edge集群 | 系統(tǒng)組件 | kube-scheduler | 使用Kube Scheduler進行集群資源調(diào)度 | |
cloud-controller-manager | 使用Cloud Controller Manager為K8s應(yīng)用創(chuàng)建負載均衡,管理節(jié)點路由條目。 | |||
kube-apiserver | APIServer是K8s集群的總線和入口網(wǎng)關(guān)。 | |||
kube-controller-manager | KCM是K8s集群內(nèi)部資源的管理器。 | |||
日志與監(jiān)控 | alicloud-monitor-controller | 監(jiān)控應(yīng)用容器的生命周期和狀態(tài)變化。 | ||
metrics-server | Metrics Server為集群的自動伸縮機制提供應(yīng)用容器的資源監(jiān)控指標 | |||
網(wǎng)絡(luò) | CoreDNS | Kubernetes集群域名解析服務(wù)器。 | ||
terway-eniip | Terway網(wǎng)絡(luò)插件。 | |||
其他 | edge-controller-manager | - | ||
edge-tunnel-agent | Edge-tunnel采用C/S架構(gòu),構(gòu)建云邊反向運維通道。 | |||
edge-tunnel-server | Edge-tunnel采用C/S架構(gòu),構(gòu)建云邊反向運維通道。 | |||
yurt-app-manager | 使用yurt-app-manager為ACK@Edge提供節(jié)點池和單元化部署的功能。 |
常用配置示例
以下列出了部分通用示例,供參考使用。
網(wǎng)絡(luò)組件選擇Terway。
存儲組件CSI和Flexvolume選擇一個即可,由于Flexvolume已停止維護,建議使用CSI作為存儲組件。
路由組件Nginx-Ingress和ALB Ingress選擇一個即可,根據(jù)業(yè)務(wù)需求進行合理選擇。
其他組件可以根據(jù)業(yè)務(wù)需求選擇性安裝,可以自由組合。
# 集群創(chuàng)建不配置任何組件,則僅安裝默認組件。
# 一個集群的最簡配置,變量請?zhí)鎿Q為您自定義的變量。
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"]
}
# 創(chuàng)建Terway網(wǎng)絡(luò)集群。
# 使用Pod獨占彈性網(wǎng)卡模式。
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"
}
}
# 創(chuàng)建Terway網(wǎng)絡(luò)集群。
# 同時使用IPVlan模式,并且開啟網(wǎng)絡(luò)策略。
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]\"}"
}
}