在 Kubernetes 上使用 Amazon EKS 部署 2048 游戏 — 端到端 DevOps 项目

发布: (2026年3月7日 GMT+8 12:30)
7 分钟阅读
原文: Dev.to

Source: Dev.to

项目目标

  • 将应用容器化
  • 在 Kubernetes 集群上部署
  • 对外部网络公开
  • 了解 Kubernetes 工作负载在真实云环境中的运行方式

GitHub 仓库:
👉

项目架构概览

工作流遵循典型的 Kubernetes 部署生命周期

  1. 容器化 应用程序,使用 Docker
  2. 创建 Amazon EKS 集群
  3. 配置 IAM 角色和工作节点
  4. 部署 应用程序,使用 Kubernetes 清单
  5. 暴露 应用程序,使用 LoadBalancer 服务
  6. 从 Internet 访问 应用程序

前置条件

在开始之前,安装并配置以下工具:

工具目的
kubectl用于与 Kubernetes 集群交互的 CLI(部署应用、检查资源、管理集群)。
eksctl简化 Amazon EKS 集群的创建和管理(自动化许多 AWS 资源)。
AWS CLI允许直接与 AWS 服务交互;用于对 EKS 进行身份验证并更新 kubeconfig 文件。

一旦这些工具准备就绪,您就可以开始构建 Kubernetes 环境。

第一步 – 创建 Amazon EKS 集群

EKS 集群由两个主要组件组成:

  • 控制平面 – 由 AWS 管理
  • 工作节点 – 运行 Pod 的 EC2 实例

创建集群时,需要配置:

  • 默认 VPC
  • 2–3 个子网
  • 安全组
  • 公共集群端点访问

集群创建通常需要 10–12 分钟。当状态变为 Active 时,继续下一步。

步骤 2 – 创建 IAM 角色

AWS 服务在很大程度上依赖 IAM 角色和权限。需要两个角色:

1. EKS 集群角色

允许 Kubernetes 控制平面与其他 AWS 服务交互。

Policy attached: AmazonEKSClusterPolicy

2. 节点组角色

为工作节点提供与 AWS 服务通信的权限。

Policies attached:

AmazonEKSWorkerNodePolicy
AmazonEC2ContainerRegistryReadOnly
AmazonEKS_CNI_Policy

这些权限使节点能够:

  • 从 ECR 拉取容器镜像
  • 与控制平面通信
  • 通过 CNI 插件管理网络

第 3 步 – 添加工作节点

创建一个 Node Group 来托管 pod。

设置
AMIAmazon Linux 2
期望节点数1(可稍后扩展)
安全组端口22, 80, 8080
SSH 访问已启用

几分钟后,节点组将变为 Active 并可用于工作负载。

步骤 4 – 与集群进行身份验证

更新本地 kubeconfig,以便 kubectl 能够与集群通信:

aws eks update-kubeconfig --region us-east-1 --name my-cluster

此命令会在本地存储集群凭证。

验证连接

kubectl get nodes

如果节点列表显示,说明集群已正确配置。

第 5 步 – 部署 2048 游戏 Pod

创建一个用于 2048 游戏的 Pod 定义:

apiVersion: v1
kind: Pod
metadata:
  name: 2048-pod
  labels:
    app: 2048-ws
spec:
  containers:
  - name: 2048-container
    image: blackicebird/2048
    ports:
    - containerPort: 80

应用清单:

kubectl apply -f 2048-pod.yaml

检查 Pod 状态:

kubectl get pods

当 Pod 显示 Running 时,说明应用已成功部署到集群中。

第 6 步 – 暴露应用

创建一个 LoadBalancer 服务,使游戏可以从 Internet 访问:

apiVersion: v1
kind: Service
metadata:
  name: 2048-service
spec:
  type: LoadBalancer
  selector:
    app: 2048-ws
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

应用该服务:

kubectl apply -f 2048-service.yaml

几秒钟后,AWS 会创建一个 ELB。获取它的 DNS 名称:

kubectl get svc 2048-service

在浏览器中打开该 DNS 名称——2048 游戏应已完整可用。

暴露应用的其他细节

第 6 步示意图

虽然 Pod 已经在运行,但仍无法从集群外部访问。为了解决这个问题,我们创建一个 Kubernetes Service

apiVersion: v1
kind: Service
metadata:
  name: mygame-svc
spec:
  selector:
    app: 2048-ws
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
  type: LoadBalancer

部署该服务:

kubectl apply -f mygame-svc.yaml

检查服务详情:

kubectl describe svc mygame-svc

Kubernetes 将自动为其配置一个 公共 LoadBalancer

第7步 — 访问应用程序

创建 LoadBalancer 后,AWS 会生成一个公共 DNS 端点。 在浏览器中打开该 DNS 名称——2048 游戏界面会出现,应用程序即可公开访问。

2048 game UI

扩展应用

Kubernetes 最大的优势之一是 水平扩展。如果流量增加,可以创建额外的副本:

kubectl scale deployment my-app --replicas=3

Kubernetes 将自动在 pod 之间分配流量,确保高可用性和性能提升。

我从此项目中学到的内容

  • Kubernetes 工作负载 – 了解 pod 如何在集群内部运行容器化应用。
  • 托管式 Kubernetes – 了解 Amazon EKS 如何通过管理控制平面来简化集群管理。
  • Kubernetes 网络 – 了解服务和负载均衡器如何将应用程序暴露到外部。
  • 云基础设施 – 了解 AWS 如何将网络、计算和容器编排集成在一起。

可能的改进

  • 使用 Deployments 代替独立的 pod。
  • 实施 Ingress controllers
  • 添加 CI/CD pipelines
  • 使用 Prometheus 和 Grafana 进行监控。
  • 使用 Terraform 实现基础设施自动化。

这些补充将使项目更接近 production‑grade Kubernetes deployment

最后思考

Kubernetes 起初可能让人感到不知所措,但像这样的项目可以更容易地理解所有内容是如何协同工作的。通过部署一个简单的应用程序,例如 2048 游戏,我们可以清晰地看到:

  • 容器在 pod 中运行。
  • Pod 在工作节点上运行。
  • 服务暴露应用程序。
  • 负载均衡器提供外部访问。

如果你正在学习 DevOps、Kubernetes 或云工程,构建此类项目是获得实践经验的最佳途径之一。

项目仓库

浏览完整项目仓库中的代码、YAML 清单和设置步骤:

Project screenshot

👉 https://shorturl.at/LxtaW

0 浏览
Back to Blog

相关文章

阅读更多 »