2018年之前,搭建一个高可用Kubernetes集群就像在玩高难度拼图。我记得第一次手动部署时,光是准备3台Master节点和3台Worker节点就折腾了大半天。VPC网络配置、子网划分、路由表设置、NAT网关调试...每个环节都可能成为"拦路虎"。最崩溃的是,当你终于用kubeadm或二进制方式装完所有组件,却在配置Etcd证书时发现某个参数写错,不得不推倒重来。
如今云厂商的托管Kubernetes服务彻底改变了这个局面。以阿里云ACK为例,配合Terraform这样的基础设施即代码(IaC)工具,15分钟就能拉起一个生产就绪的集群。这不仅仅是效率的提升,更是工作方式的革命——从手工操作到声明式配置,从容易出错到可重复验证。
特别说明:本文所有操作均基于阿里云ACK托管服务,但核心方法论适用于AWS EKS、腾讯云TKE等主流云平台,只需调整对应Provider配置即可。
工欲善其事,必先利其器。开始前请确保准备好以下工具:
安装Terraform后,建议配置命令补全功能:
bash复制terraform -install-autocomplete
生产环境中,千万不要直接使用主账号AK/SK!正确的做法是:
AliyunCSFullAccess(容器服务管理)AliyunVPCFullAccess(网络资源管理)AliyunEIPFullAccess(弹性公网IP)建议通过环境变量配置凭证:
bash复制export ALICLOUD_ACCESS_KEY="your_access_key"
export ALICLOUD_SECRET_KEY="your_secret_key"
export ALICLOUD_REGION="cn-hangzhou"
创建项目目录结构:
code复制├── main.tf # 主资源配置
├── variables.tf # 可配置参数
├── outputs.tf # 输出信息
└── versions.tf # 版本锁定
versions.tf内容如下:
hcl复制terraform {
required_version = ">= 1.3.0"
required_providers {
alicloud = {
source = "aliyun/alicloud"
version = "1.209.1" # 锁定版本避免意外升级
}
}
}
执行初始化:
bash复制terraform init
这个命令会下载指定的Provider插件并初始化后端(默认本地存储状态文件)。
生产级集群必须考虑网络隔离。我们采用经典的三层架构:
对应的Terraform配置示例:
hcl复制resource "alicloud_vpc" "main" {
vpc_name = "k8s-prod-vpc"
cidr_block = "10.0.0.0/16"
}
resource "alicloud_vswitch" "public" {
vpc_id = alicloud_vpc.main.id
cidr_block = "10.0.1.0/24"
zone_id = "cn-hangzhou-f"
}
阿里云ACK提供多种集群类型,对于生产环境推荐:
核心配置参数:
hcl复制resource "alicloud_cs_managed_kubernetes" "cluster" {
name = "prod-cluster"
version = "1.24.6-aliyun.1" # 建议使用稳定版本
new_nat_gateway = true
pod_cidr = "172.20.0.0/16" # 避免与VPC CIDR冲突
service_cidr = "172.21.0.0/20"
worker_vswitch_ids = [alicloud_vswitch.private.id]
# 关键生产配置
slb_internet_enabled = true
deletion_protection = true # 防止误删除
runtime = {
name = "containerd"
version = "1.6.8"
}
}
静态节点难以应对业务波动,我们需要配置自动伸缩的节点池:
hcl复制resource "alicloud_cs_kubernetes_node_pool" "worker_pool" {
cluster_id = alicloud_cs_managed_kubernetes.cluster.id
name = "worker-pool"
instance_types = ["ecs.g7ne.large"] # 新一代Intel Xeon
system_disk_category = "cloud_essd"
system_disk_size = 120 # 建议不小于120GB
# 自动伸缩配置
scaling_config {
min_size = 3
max_size = 10
}
# 节点标签与污点
labels = {
"env" = "production"
"workload" = "general"
}
taints = [
{
key = "dedicated"
value = "gpu_workload"
effect = "NoSchedule"
}
]
}
分步执行更安全:
bash复制terraform plan -out=tfplan # 生成执行计划
terraform apply tfplan # 实际部署
整个过程大约需要10-15分钟,控制台会显示进度。阿里云ACK的控制面会自动完成高可用部署。
部署完成后,可以通过outputs.tf输出关键信息:
hcl复制output "kubeconfig" {
value = alicloud_cs_managed_kubernetes.cluster.kube_config
sensitive = true
}
然后获取凭证:
bash复制terraform output -raw kubeconfig > ~/.kube/config-alicloud
export KUBECONFIG=~/.kube/config-alicloud
kubectl get nodes
确保这些关键组件正常运行:
bash复制# 核心组件状态
kubectl get pods -n kube-system
# 网络插件检查
kubectl get daemonset -n kube-system | grep cni
# 存储插件验证
kubectl get sc
开启集群审计:
hcl复制resource "alicloud_cs_kubernetes_audit" "default" {
cluster_id = alicloud_cs_managed_kubernetes.cluster.id
enabled = true
}
配置日志服务:集成SLS收集控制面日志
启用工作负载身份:避免在节点上使用AK/SK
使用抢占式实例:对非关键工作负载可节省70%成本
hcl复制spot_strategy = "SpotWithPriceLimit"
spot_price_limit {
instance_type = "ecs.g7ne.large"
price_limit = "0.2" # 最高出价
}
合理设置自动伸缩:基于实际负载调整策略
选择合适机型:内存型、计算型、大数据型各有所长
通过模块化设计,可以轻松实现多地域部署:
hcl复制module "hz_cluster" {
source = "./modules/ack"
region = "cn-hangzhou"
}
module "sh_cluster" {
source = "./modules/ack"
region = "cn-shanghai"
}
症状:Pod间无法通信
症状:无法拉取镜像
现象:节点池无法扩容
aliyun ecs DescribeAccountAttributesACK托管集群的控制面证书由阿里云自动管理,但需要注意:
bash复制aliyun cs RotateClusterCertificates --ClusterId your_cluster_id
将Terraform与ArgoCD结合,实现完整GitOps:
示例目录结构:
code复制infra/
├── ack/ # 集群定义
└── network/ # 网络资源
apps/
├── base/ # 基础应用(ingress,监控等)
└── production/ # 业务应用
我在实际项目中验证过,这套架构可以支持200+节点的生产集群稳定运行。最关键的是所有变更都通过代码评审,彻底告别了"手动操作一时爽,排错火葬场"的局面。