SalesFX/eks-sre-devops-platform
GitHub: SalesFX/eks-sre-devops-platform
基于 AWS EKS 的云原生 DevOps/SRE 实践平台,集成了 GitOps 交付、安全合规、可观测性与 AI 辅助运维能力。
Stars: 1 | Forks: 0
# AWS 上的云原生平台
### Terraform、EKS、GitOps、DevSecOps、RDS IAM Auth、可观测性与事件响应
## 概述
运行在 AWS 上的云原生平台,包含实际生产环境中的应用(Incident Tracker)。目标:展示企业环境中采用的实践。
- 使用 Terraform 在独立的层级中进行基础设施配置
- 使用 EKS 进行容器编排,包含 pod 安全性(non-root、只读文件系统)
- 使用 GitHub Actions 进行 CI/CD,通过 OIDC 进行身份验证,无需静态凭证
- 使用 ArgoCD 进行 GitOps:pipeline 更新 git,ArgoCD 使集群状态收敛
- RDS PostgreSQL 通过 IRSA 进行 IAM 身份验证,任何地方均无静态密码
- 使用 VictoriaMetrics 和 Grafana 进行可观测性,使用 CloudWatch 进行数据库警报
- 模拟 4 个真实事件,包含完整的检测、解决和记录 MTTR 的生命周期
## 技术栈
| 层级 | 技术 |
|---|---|
| 计算 | Amazon EKS 1.31(4 个 t3.small worker 节点,Amazon Linux 2023) |
| 基础设施 | Terraform(5 个独立 stack,state 存放在 S3) |
| CI/CD | GitHub Actions + OIDC(无静态凭证) |
| GitOps | ArgoCD,启用 auto-sync 和 self-heal |
| 后端 | Node.js 20 + Express + TypeScript + Prisma ORM |
| 前端 | Next.js 14 + Tailwind CSS |
| 数据库 | RDS PostgreSQL 16,通过 IRSA 进行 IAM 身份验证(无静态密码) |
| 可观测性 | VictoriaMetrics + Grafana + CloudWatch 警报 + SNS |
| 流水线安全 | Gitleaks、Checkov、Semgrep、Trivy(10 个扫描作业) |
| 工作负载安全 | non-root、readOnlyRootFilesystem、drop ALL capabilities、IRSA |
## AI 辅助运维
本项目使用 Claude Code 开发,结合专门的 agent 和可复用的 skill,以加速并结构化平台工作。
**Agent** 具有明确定义的角色和严格的限制:
- 解决方案架构师:规划、评估权衡并生成 ADR(绝不编写代码)
- DevOps Engineer:根据获批的 ADR 实现 IaC
- DevSecOps 工程师:在任何提交之前审查代码、Terraform 和流水线
- RDS 专家:负责数据库、IRSA、迁移和事件处理 runbook
用于平台运维的可复用 **Skill**:
- 应用程序诊断与基础设施诊断(作用域分离)
- 包含完整 SRE 周期的事件模拟
- 从零开始重建基础设施,并记录所有手动步骤
亮点不在于使用 AI 生成代码:而是建立了一个结构化的流程,其中每个 agent 都有唯一的职责、明确的交付物和显式的限制。
- [docs/agents/](docs/agents/README.md)
- [docs/skills/](docs/skills/README.md)
## 架构
```
flowchart TB
subgraph CICD["CI/CD"]
direction TB
DEV["Desenvolvedor\npush clean-main"]
GHA["GitHub Actions\nCI/CD + Security Scans"]
KUST["kustomization.yaml\natualiza image tag sha-xxxxx\ncommit skip-ci no git"]
DEV -->|"git push"| GHA
GHA -->|"commit tag"| KUST
end
subgraph GITOPS["GitOps"]
direction TB
subgraph NS_ARGOCD["namespace: argocd"]
ARGO["ArgoCD\nmonitora repositorio Git\nauto-sync + self-heal"]
end
KUST -->|"novo commit detectado"| ARGO
end
subgraph CLUSTER["EKS Cluster: devops-ia-production (4x t3.small)"]
direction TB
ECR["Amazon ECR\nrepositories: frontend / backend"]
INGRESS["Ingress Resource\npath: / → Frontend\npath: /backend/* → Backend"]
LBC["AWS Load Balancer Controller\ncria e gerencia o ALB"]
ALB["Application Load Balancer"]
INGRESS -->|"assistido por"| LBC
LBC -->|"provisiona"| ALB
subgraph APP["namespace: app"]
direction TB
FE["Frontend\n2 pods Next.js"]
BE["Backend\n2 pods Node.js"]
MIG["Migration Job\nprisma migrate deploy\nPreSync hook"]
FE -->|"API calls /backend/*"| BE
end
subgraph MON["namespace: monitoring"]
direction LR
VM["VictoriaMetrics"] --> GF["Grafana"]
end
ECR -->|"image pull"| APP
ALB -->|"/"| FE
ALB -->|"/backend/*"| BE
end
subgraph DATA["Data"]
RDS[("RDS PostgreSQL 16\nprivate subnet")]
end
subgraph ALERTS["Alerting"]
direction TB
CW["CloudWatch\nRDS Alarms"] --> SNS["SNS"] --> EMAIL["Email"]
end
GHA -->|"docker push"| ECR
ARGO -->|"sync desired state"| APP
MIG -->|"migrate deploy"| RDS
BE -->|"IAM token IRSA"| RDS
RDS -.->|"connections, storage, memory"| CW
APP -.->|"Prometheus metrics"| VM
```
## 应用程序
**Incident Tracker** 是一个真实的事件管理系统,包含 JWT 身份验证、仪表板和历史记录功能。



## 基础设施



## 可观测性


## 流水线


## CloudWatch 与警报

## 生产环境中的事件响应
在真实环境中模拟的 4 个事件,包含完整的 SRE 周期:通过 Grafana 中的警报进行检测、使用 runbook 进行解决,并记录了 MTTR。
| 事件 | 类型 | 严重性 | 影响 | MTTR |
|---|---|---|---|---|
| INC-004 | 无效镜像 | 警告 | 零停机,maxUnavailable:0 保护了服务 | 6 分钟 |
| INC-003 | Secret 缺失 | 警告 | 零停机,旧 pod 继续提供服务 | 5 分钟 |
| INC-002 | OOMKilled(容器内存不足) | 严重 | pod 处于 CrashLoop 状态,对生产环境无影响 | 4 分钟 |
| INC-001 | RDS 不可用(rds_iam 被撤销) | 严重 | 全部返回 503,readinessProbe 阻止了 ALB 流量 | 4 分钟 |
**INC-004(警告)**

**INC-002(严重)**

**INC-001(严重)**

要重现这些在 Grafana 中产生真实警报的事件,请参阅 [docs/incidents/](docs/incidents/)。
## 快速访问
```
# Grafana (Platform Alerts dashboard 和主页)
kubectl port-forward svc/vm-grafana -n monitoring 3000:80
# http://localhost:3000
# ArgoCD
kubectl port-forward svc/argocd-server -n argocd 8080:443
# https://localhost:8080
# ALB endpoint
kubectl get ingress devops-ia -n app -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
```
## 文档
| 文档 | 内容 |
|---|---|
| [docs/setup/](docs/setup/README.md) | 从零开始重建环境的详细步骤 |
| [docs/architecture/](docs/architecture/overview.md) | Terraform stack、IRSA、流水线、安全性、ADR |
| [docs/incidents/](docs/incidents/) | 模拟的事件,包含时间线和真实的 MTTR |
| [docs/runbooks/](docs/runbooks/) | 针对已知故障的运维 runbook |
| [docs/agents/](docs/agents/README.md) | 专门的 agent 及其职责 |
| [docs/skills/](docs/skills/README.md) | 运维 skill 及使用图谱 |
## 路线图
- Loki + Grafana Alloy:pod 日志聚合
- Tempo:使用 OpenTelemetry 进行分布式追踪
- Alertmanager:Kubernetes 警报路由
- External Secrets Operator:与 AWS Secrets Manager 集成
标签:API集成, DevSecOps, ECS, GitOps, Kubernetes/EKS, LLM代码助手, MITM代理, Terraform, 上游代理, 云原生架构, 可观测性, 测试用例