使用 Terraform 部署 AWS EKS 集群:分步指南
Source: Dev.to
在当今的云原生环境中,Kubernetes 已成为容器编排的事实标准,而 Amazon Elastic Kubernetes Service (EKS) 提供了托管的 Kubernetes 服务,简化了集群管理。将其与 Terraform(HashiCorp 的基础设施即代码(IaC)工具)结合使用,您可以实现可重复、版本受控且自动化的 Kubernetes 基础设施部署。
本综合指南将手把手带您使用 Terraform 部署生产就绪的 AWS EKS 集群,涵盖从初始设置到运营最佳实践的全部内容。
Prerequisites
- 拥有适当 IAM 权限的 AWS 账户
- 已安装并配置好 AWS CLI
- 已安装 Terraform (v1.0+)
- 用于 Kubernetes 集群交互的
kubectl - 对 AWS 服务、Kubernetes 和 Terraform 有基本了解
架构概览
- 在多个可用区中具有公共子网和私有子网的 VPC
- 由 AWS 管理的 EKS 控制平面
- 用于工作节点的托管节点组
- 必要的 IAM 角色和安全组
- 网络组件(NAT 网关、Internet 网关、路由表)
Source:
使用 Terraform 模块化设计实现高效的 EKS 集群部署
此实现使用包含预定义配置的 Terraform 模块来简化 Amazon EKS 集群的创建,展示基础设施即代码的高效性。
步骤 1 – 准备环境(安装工具)
Terraform
brew install terraform
AWS CLI
brew install awscli
kubectl
brew install kubernetes-cli
在其他操作系统上进行安装,请参阅官方文档:
- Terraform:
- AWS CLI:
- kubectl:
步骤 2 – 配置 AWS CLI 访问
aws configure
在提示时提供以下信息:
- AWS Access Key ID
- AWS Secret Access Key
- Default region(例如
us-east-1)
Terraform 将使用这些凭证来创建和管理您的 AWS 资源。
步骤 3 – 准备代码环境
我们将使用社区维护的 terraform-aws-modules/eks/aws 模块。
data "aws_availability_zones" "available" {}
resource "aws_vpc" "main" {
cidr_block = "10.0.0.0/16"
tags = {
Name = "main-vpc-eks"
}
}
resource "aws_subnet" "public_subnet" {
count = 2
vpc_id = aws_vpc.main.id
cidr_block = cidrsubnet(aws_vpc.main.cidr_block, 8, count.index)
availability_zone = data.aws_availability_zones.available.names[count.index]
map_public_ip_on_launch = true
tags = {
Name = "public-subnet-${count.index}"
}
}
resource "aws_internet_gateway" "main" {
vpc_id = aws_vpc.main.id
tags = {
Name = "main-igw"
}
}
resource "aws_route_table" "public" {
vpc_id = aws_vpc.main.id
route {
cidr_block = "0.0.0.0/0"
gateway_id = aws_internet_gateway.main.id
}
tags = {
Name = "main-route-table"
}
}
resource "aws_route_table_association" "a" {
count = 2
subnet_id = aws_subnet.public_subnet.*.id[count.index]
route_table_id = aws_route_table.public.id
}
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "~> 20.31"
cluster_name = "sage-nodes"
cluster_version = "1.31"
# 可选 – 公共端点访问
cluster_endpoint_public_access = true
# 通过集群访问条目为当前调用者身份授予管理员权限
enable_cluster_creator_admin_permissions = true
eks_managed_node_groups = {
sage-nodes = {
instance_types = ["t3.medium"]
min_size = 1
max_size = 3
desired_size = 2
}
}
vpc_id = aws_vpc.main.id
subnet_ids = aws_subnet.public_subnet.*.id
tags = {
Environment = "dev"
Terraform = "true"
}
}
步骤 4 – 应用 Terraform 配置
-
初始化工作目录(下载提供商插件和模块):
terraform init -
生成并审查执行计划:
terraform plan
-
应用计划(创建资源):
terraform apply确认后,等待几分钟,直至所有资源完成部署。


下一步
- 配置
kubectl以使用新集群(aws eks update-kubeconfig --name sage-nodes)。 - 部署工作负载(例如示例 nginx 部署)。
- 设置监控(CloudWatch、Prometheus)和日志(Fluent Bit、Loki)。
- 实现 CI/CD 流水线(GitHub Actions、GitLab CI),以自动化未来的更改。
步骤 5 – 配置 kubectl 访问
运行以下命令:
aws eks --region us-east-1 update-kubeconfig --name example

验证登录集群是否成功:
kubectl config current-context

步骤 6 – 管理集群
查看集群中的所有节点:
kubectl get nodes

部署一个 NGINX 实例以验证集群:
kubectl run --port 80 --image nginx nginx
检查其状态:
kubectl get pods

在本地环境与 pod 之间建立隧道:
kubectl port-forward nginx 3000:80

步骤 7 – 资源清理
terraform destroy
注意: 确保销毁已创建的资源,以免产生高额的 AWS 费用。
结论
通过完成本指南,您已经使用 Terraform 的基础设施即代码(IaC)方法,建立了一个可投入生产的 AWS EKS 集群部署。这一基础能够在所有环境中实现一致的、受版本控制的 Kubernetes 基础设施管理。
Chidubem Chinwuba 是一名专注的云/DevOps 工程师,对技术及其在各行业的变革潜力怀有深厚热情。他致力于在云/DevOps 领域产生有意义的影响,并期待在持续的职业成长中,为塑造技术未来的项目做出贡献。