阿里云容器服务ACK提供丰富的组件,用于扩展集群功能。本文主要介绍如何在Terraform中配置组件,以帮助您在多场景下完成业务的管理。
组件类型
容器服务ACK管理的集群组件类型包括系统组件和可选组件。更多组件信息,请参见组件概述。
系统组件
系统组件是运行ACK集群所依赖的基础组件,创建集群时,会默认安装。例如:
-
kube-apiserver
-
kube-controller-manager
-
cloud-controller-manager
-
CoreDNS
-
kube-proxy
可选组件
可选组件是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网络插件实现集群内部网络互通的话,默认安装该组件。 |
|
flannel |
网络组件 |
一种容器网络接口CNI(Container Network Interface)插件,在阿里云上使用的Flannel网络模式采用阿里云VPC模式。创建集群时,如果选择Flannel网络插件实现集群内部网络互通的话,默认安装该组件。 |
|
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 :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中的属性并应用,来修改集群组件配置。
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
}
)
}
如果您需要查看组件支持的全部可配置参数,可以通过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中,您可以通过两种网络模型实现上述容器网络的能力,分别是Flannel网络模式和Terway网络模式。这两种网络模式采用不同的网络模型。更多信息,请参见网络概述。
下面展示如何通过Terraform配置网络组件。
展开查看详细信息
# 使用Flannel作为网络组件。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它参数。
# ...
addons {
name = "flannel"
}
}
# 使用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创建集群时,不指定任何存储组件,默认会安装Flexvolume。在Terraform中通过以下方式进行存储组件定义。
展开查看详细信息
# 使用Flexvolume作为存储组件,如果不指定任何存储插件,默认安装Flexvolume存储组件。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它参数。
# ...
addons {
name = "flexvolume"
}
}
# 使用CSI作为存储组件,CSI包含2个部分:csi-plugin和csi-provisioner。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它参数。
# ...
addons {
name = "csi-plugin"
}
addons {
name = "csi-provisioner"
}
}
# 使用CSI作为存储组件时,如果还想启用创建默认的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,会默认安装以下组件。
-
kube-flannel-ds
-
flexvolume
-
alicloud-disk-controller
-
alicloud-monitor-controller
-
CoreDNS
-
cloud-controller-manager
-
nginx-ingress-controller
-
managed-kube-proxy
-
storage-operator
-
managed-kube-proxy-windows(针对windows系统)
-
metrics-server
-
ack-scheduler
-
aliyun-acr-credential-helper
常用配置示例
以下列出了部分通用示例,供参考使用。
-
网络组件Terway和Flannel选择一个即可,按业务需求合理选择。
-
存储组件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
worker_number = 2
password = var.password
pod_cidr = "172.20.0.0/16"
service_cidr = "172.21.0.0/20"
worker_vswitch_ids = [var.vswitch_id]
worker_instance_types = [var.instance_types]
}
示例二:使用Terway网络
# 创建Terway网络集群。
# 使用Pod独占弹性网卡模式。
resource "alicloud_cs_managed_kubernetes" "default" {
name = var.name
cluster_spec = "ack.pro.small"
is_enterprise_security_group = true
worker_number = 2
password = var.password
pod_vswitch_ids = [var.vswitch_id]
service_cidr = "172.21.0.0/20"
worker_vswitch_ids = [var.vswitch_id]
worker_instance_types = [var.instance_types]
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
worker_number = 2
password = var.password
service_cidr = "172.21.0.0/20"
pod_vswitch_ids = [var.vswitch_id]
worker_vswitch_ids = [var.vswitch_id]
worker_instance_types = [var.instance_types]
addons {
name = "terway-eniip",
config = "{\"IPVlan\":\"true\",\"NetworkPolicy\":\"true\"}"
}
}
示例三:使用Flannel、CSI和nginx-ingress的通用模板
# Flannel + CSI + nginx-ingress通用模板。
resource "alicloud_cs_managed_kubernetes" "default" {
name = var.name
cluster_spec = "ack.pro.small"
is_enterprise_security_group = true
worker_number = 2
password = var.password
service_cidr = "172.21.0.0/20"
pod_vswitch_ids = [var.pod_vswitch_id]
worker_vswitch_ids = [var.vswitch_id]
worker_instance_types = [var.instance_types]
addons {
name = "flannel"
}
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]\"}"
}
}
示例4:使用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
worker_number = 2
password = var.password
service_cidr = "172.21.0.0/20"
pod_vswitch_ids = [var.vswitch_id]
worker_vswitch_ids = [var.vswitch_id]
worker_instance_types = [var.instance_types]
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]\"}"
}
}
内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家
阿里云企业补贴进行中: 马上申请
腾讯云限时活动1折起,即将结束: 马上收藏
同尘科技为腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利:同意关联,立享优惠
转转请注明出处:https://www.yunxiaoer.com/171526.html