使用 Terraform 部署 AWS EKS 集群:分步指南

发布: (2026年1月15日 GMT+8 18:05)
6 min read
原文: Dev.to

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 配置

  1. 初始化工作目录(下载提供商插件和模块):

    terraform init
  2. 生成并审查执行计划

    terraform plan

    Terraform 计划输出

  3. 应用计划(创建资源):

    terraform apply

    确认后,等待几分钟,直至所有资源完成部署。

    资源创建中

    EKS 集群已就绪

下一步

  • 配置 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 配置输出

验证登录集群是否成功:

kubectl config current-context

kubectl 当前上下文输出

步骤 6 – 管理集群

查看集群中的所有节点:

kubectl get nodes

kubectl 获取节点输出

部署一个 NGINX 实例以验证集群:

kubectl run --port 80 --image nginx nginx

检查其状态:

kubectl get pods

kubectl 获取 pod 输出

在本地环境与 pod 之间建立隧道:

kubectl port-forward nginx 3000:80

kubectl 端口转发输出

步骤 7 – 资源清理

terraform destroy

注意: 确保销毁已创建的资源,以免产生高额的 AWS 费用。

结论

通过完成本指南,您已经使用 Terraform 的基础设施即代码(IaC)方法,建立了一个可投入生产的 AWS EKS 集群部署。这一基础能够在所有环境中实现一致的、受版本控制的 Kubernetes 基础设施管理。

Chidubem Chinwuba 是一名专注的云/DevOps 工程师,对技术及其在各行业的变革潜力怀有深厚热情。他致力于在云/DevOps 领域产生有意义的影响,并期待在持续的职业成长中,为塑造技术未来的项目做出贡献。

Back to Blog

相关文章

阅读更多 »

Terraform 堆栈

概述:一组可投入生产的 Terraform Stacks,展示了跨完整应用程序、多区域 fan‑out 和 Kubernetes 平台的企业模式。