借助阿里云在亚洲加速迈向成功
一站式安全合规咨询服务
MLPS 2.0 一站式合规解决方案
依托我们的网络进军中国市场
提升面向互联网应用的性能和安全性
保障您的中国业务安全无忧
通过强大的数据安全框架保护您的数据资产
申请 ICP 备案的流程解读和咨询服务
面向大数据建设、管理及应用的全域解决方案
企业内大数据建设、管理和应用的一站式解决方案
将您的采购和销售置于同一企业级全渠道数字平台上
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
快速搭建在线教育平台
提供域名注册、分析和保护服务
云原生 Kubernetes 容器化应用运行环境
以 Kubernetes 为使用界面的容器服务产品,提供符合容器规范的算力资源
安全的镜像托管服务,支持全生命周期管理
多集群环境下微服务应用流量统一管理
提供任意基础设施上容器集群的统一管控,助您轻松管控分布式云场景
高弹性、高可靠的企业级无服务器 Kubernetes 容器产品
敏捷安全的 Serverless 容器运行服务
为虚拟机和容器提供高可靠性、高性能、低时延的块存储服务
一款海量、安全、低成本、高可靠的云存储服务
可靠、弹性、高性能、多共享的文件存储服务
全托管、可扩展的并行文件系统服务。
全托管的 NoSQL 结构化数据实时存储服务
可抵扣多种存储产品的容量包,兼具灵活性和长期成本优化
让您的应用跨不同可用区资源自动分配访问量
随时绑定和解绑 VPC ECS
云网络公网、跨域流量统一计费
高性价比,可抵扣按流量计费的流量费用
创建云上隔离的网络,在专有环境中运行资源
在 VPC 环境下构建公网流量的出入口
具备网络状态可视化、故障智能诊断能力的自助式网络运维服务。
安全便捷的云上服务专属连接
基于阿里云专有网络的私有 DNS 解析服务
保障在线业务不受大流量 DDoS 攻击影响
系统运维和安全审计管控平台
业务上云的第一个网络安全基础设施
集零信任内网访问、办公数据保护、终端管理等多功能于一体的办公安全管控平台
提供7X24小时安全运维平台
防御常见 Web 攻击,缓解 HTTP 泛洪攻击
实现全站 HTTPS,呈现可信的 WEB 访问
为云上应用提供符合行业标准和密码算法等级的数据加解密、签名验签和数据认证能力
一款发现、分类和保护敏感数据的安全服务
创建、控制和管理您的加密密钥
快速提高应用高可用能力服务
围绕应用和微服务的 PaaS 平台
兼容主流开源微服务生态的一站式平台
多集群环境下微服务应用流量统一管理
Super MySQL 和 PostgreSQL,高度兼容 Oracle 语法
全托管 MySQL、PostgreSQL、SQL Server、MariaDB
兼容 Redis® 的缓存和KV数据库
兼容Apache Cassandra、Apache HBase、Elasticsearch、OpenTSDB 等多种开源接口
文档型数据库,支持副本集和分片架构
100%兼容 Apache HBase 并深度扩展,稳定、易用、低成本的NoSQL数据库。
低成本、高可用、可弹性伸缩的在线时序数据库服务
专为搜索和分析而设计,成本效益达到开源的两倍,采用最新的企业级AI搜索和AI助手功能。
一款兼容PostgreSQL协议的实时交互式分析产品
一种快速、完全托管的 TB/PB 级数据仓库
基于 Flink 为大数据行业提供解决方案
基于Qwen和其他热门模型的一站式生成式AI平台,可构建了解您业务的智能应用程
一站式机器学习平台,满足数据挖掘分析需求
高性能向量检索服务,提供低代码API和高成本效益
帮助您的应用快速构建高质量的个性化推荐服务能力
提供定制化的高品质机器翻译服务
全面的AI计算平台,满足大模型训练等高性能AI计算的算力和性能需求
具备智能会话能力的会话机器人
基于机器学习的智能图像搜索产品
基于阿里云深度学习技术,为用户提供图像分割、视频分割、文字识别等离线SDK能力,支持Android、iOS不同的适用终端。
语音识别、语音合成服务以及自学习平台
一站式智能搜索业务开发平台
助力金融企业快速搭建超低时延、高质量、稳定的行情数据服务
帮助企业快速测算和分析企业的碳排放和产品碳足迹
企业工作流程自动化,全面提高效率
金融级云原生分布式架构的一站式高可用应用研发、运维平台
eKYC 数字远程在线解决方案
可智能检测、大数据驱动的综合性反洗钱 (AML) 解决方案
阿里云APM类监控产品
实时云监控服务,确保应用及服务器平稳运行
为系统运维人员管理云基础架构提供全方位服务的云上自动化运维平台
面向您的云资源的风险检测服务
提升分布式环境下的诊断效率
日志类数据一站式服务,无需开发就能部署
ECS 预留实例
让弹性计算产品的成本和灵活性达到最佳平衡的付费方式。云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势自带IP上云
自带公网 IP 地址上云全球网络互联
端到端的软件定义网络解决方案,可推动跨国企业的业务发展全球应用加速
提升面向互联网应用的性能和安全性全球互联网接入
将IDC网关迁移到云端云原生 AI 套件
加速AI平台构建,提高资源效率和交付速度FinOps
实时分析您的云消耗并实现节约SecOps
实施细粒度安全控制DevOps
快速、安全地最大限度提高您的DevOps优势金融科技云数据库解决方案
利用专为金融科技而设的云原生数据库解决方案游戏行业云数据库解决方案
提供多种成熟架构,解决所有数据问题Oracle 数据库迁移
将 Oracle 数据库顺利迁移到云原生数据库数据库迁移
加速迁移您的数据到阿里云阿里云上的数据湖
实时存储、管理和分析各种规模和类型的数据数码信贷
利用大数据和 AI 降低信贷和黑灰产风险面向企业数据技术的大数据咨询服务
帮助企业实现数据现代化并规划其数字化未来人工智能对话服务
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人EasyDispatch 现场服务管理
为现场服务调度提供实时AI决策支持在线教育
快速搭建在线教育平台窄带高清 (HD) 转码
带宽成本降低高达 30%广电级大型赛事直播
为全球观众实时直播大型赛事,视频播放流畅不卡顿直播电商
快速轻松地搭建一站式直播购物平台用于供应链规划的Alibaba Dchain
构建和管理敏捷、智能且经济高效的供应链云胸牌
针对赛事运营的创新型凭证数字服务数字门店中的云 POS 解决方案
将所有操作整合到一个云 POS 系统中元宇宙
元宇宙是下一代互联网人工智能 (AI) 加速
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速DevOps
快速、安全地最大限度提高您的DevOps优势数据迁移解决方案
加速迁移您的数据到阿里云企业 IT 治理
在阿里云上构建高效可控的云环境基于日志管理的AIOps
登录到带有智能化日志管理解决方案的 AIOps 环境备份与存档
数据备份、数据存档和灾难恢复用阿里云金融服务加快创新
在云端开展业务,提升客户满意度
为全球资本市场提供安全、准确和数字化的客户体验
利用专为金融科技而设的云原生数据库解决方案
利用大数据和 AI 降低信贷和黑灰产风险
建立快速、安全的全球外汇交易平台
新零售时代下,实现传统零售业转型
利用云服务处理流量波动问题,扩展业务运营、降低成本
快速轻松地搭建一站式直播购物平台
面向大数据建设、管理及应用的全域解决方案
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
以数字化媒体旅程为当今的媒体市场准备就绪您的内容
带宽成本降低高达 30%
快速轻松地搭建一站式直播购物平台
为全球观众实时直播大型赛事,视频播放流畅不卡顿
使用阿里云弹性高性能计算 E-HPC 将本地渲染农场连接到云端
构建发现服务,帮助客户找到最合适的内容
保护您的媒体存档安全
通过统一的数据驱动平台提供一致的全生命周期客户服务
在钉钉上打造一个多功能的电信和数字生活平台
在线存储、共享和管理照片与文件
提供全渠道的无缝客户体验
面向中小型企业,为独立软件供应商提供可靠的IT服务
打造最快途径,助力您的新云业务扬帆起航
先进的SD-WAN平台,可实现WAN连接、实时优化并降低WAN成本
通过自动化和流程标准化实现快速事件响应
针对关键网络安全威胁提供集中可见性并进行智能安全分析
提供大容量、可靠且高度安全的企业文件传输
用智能技术数字化体育赛事
基于人工智能的低成本体育广播服务
专业的广播转码及信号分配管理服务
基于云的音视频内容引入、编辑和分发服务
在虚拟场馆中模拟关键运营任务
针对赛事运营的创新型凭证数字服务
智能和交互式赛事指南
轻松管理云端背包单元的绑定直播流
通过数据加强您的营销工作
元宇宙是下一代互联网
利用生成式 AI 加速创新,创造新的业务佳绩
阿里云高性能开源大模型
借助AI轻松解锁和提炼文档中的知识
通过AI驱动的语音转文本服务获取洞察
探索阿里云人工智能和数据智能的所有功能、新优惠和最新产品
该体验中心提供广泛的用例和产品帮助文档,助您开始使用阿里云 AI 产品和浏览您的业务数据。
利用阿里云 GPU 技术,为 AI 驱动型业务以及 AI 模型训练和推理加速
元宇宙是下一代互联网
构建发现服务,帮助客户找到最合适的内容
全渠道内置 AI 驱动、拟人化、多语言对话的聊天机器人
加速迁移您的数据到阿里云
在阿里云上建立一个安全且易扩容的环境,助力高效率且高成本效益的上云旅程
迁移到完全托管的云数据库
将 Oracle 数据库顺利迁移到云原生数据库
自带公网 IP 地址上云
利用阿里云强大的安全工具集,保障业务安全、应用程序安全、数据安全、基础设施安全和帐户安全
保护、备份和还原您的云端数据资产
MLPS 2.0 一站式合规解决方案
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
实现对 CloudOps、DevOps、SecOps、AIOps 和 FinOps 的高效、安全和透明的管理
构建您的原生云环境并高效管理集群
快速、安全地最大限度提高您的DevOps优势
实施细粒度安全控制
提供运维效率和总体系统安全性
实时分析您的云消耗并实现节约
实时存储、管理和分析各种规模和类型的数据
登录到带有智能化日志管理解决方案的 AIOps 环境
帮助企业实现数据现代化并规划其数字化未来
帮助零售商快速规划数字化之旅
将全球知名的 CRM 平台引入中国
在线存储、共享和管理照片与文件
构建、部署和管理高可用、高可靠、高弹性的应用程序
快速、安全地最大限度提高您的DevOps优势
将您的采购和销售置于同一企业级全渠道数字平台上
企业内大数据建设、管理和应用的一站式解决方案
帮助企业简化 IT 架构、实现商业价值、加速数字化转型的步伐
快速高效地将您的业务扩展到中国,同时遵守适用的当地法规
快速搜集、处理、分析联网设备产生的数据
0.0.201
容器服务 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中配置组件 |
组件名称 | 组件类型 | 组件描述 | 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 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配置网络组件。
展开查看详细信息
# 使用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"
}
}
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",
config = "{\"albIngress\":{\"CreateDefaultALBConfig\":false}}" # 暂不创建。
# config = "{\"albIngress\":{\"LoadBalancerId\":\"alb-vl8uiXXXXXxdr\",\"CreateDefaultALBConfig\":true}}" # 指定已有ALB实例。
# config = "{\"albIngress\":{\"AddressType\":\"Internet\",\"ZoneMappings\":{\"cn-hangzhou-l\":[\"vsw-uf6XXXXXoyb4qe\"],\"cn-hangzhou-m\":[\"vsw-uf6XXXX0rlkiq\"]},\"CreateDefaultALBConfig\":true}}" # 新建,至少需要选择两个及以上的可用区。
}
}
ACK会默认安装部分组件,方便您管理集群,如果您在创建集群的时候,不需要安装这些组件,可以通过设置字段为disabled = true
来禁用这些组件。下面以禁用nginx-ingress-controller
为例说明:
# 禁止安装nginx-ingress-controller组件。
resource "alicloud_cs_managed_kubernetes" "default" {
# 其它参数。
# ...
addons {
name = "nginx-ingress-controller",
disabled = true
}
}
如果集群创建时,没有指定任何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]\"}"
}
}