From 6a548f538a37ce5dca623940124fe00ad6306e27 Mon Sep 17 00:00:00 2001 From: D8D Developer Date: Wed, 26 Nov 2025 06:48:26 +0000 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(docs):=20=E6=B7=BB=E5=8A=A0=20?= =?UTF-8?q?sprint=20=E7=8A=B6=E6=80=81=E8=B7=9F=E8=B8=AA=E5=92=8C=E6=8A=A2?= =?UTF-8?q?=E5=8D=A0=E5=BC=8F=E5=AE=9E=E4=BE=8B=E4=BA=8B=E4=BB=B6=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=95=85=E4=BA=8B=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 sprint-status.yaml 文件用于跟踪项目 sprint 进度和故事状态 - 新增 spot-instance-event-handling.md 详细用户故事文档 - 定义 ECI 抢占式实例 SpotToBeReleased 事件处理的需求和验收标准 - 包含技术实现方案、测试要求和风险缓解措施 --- docs/sprint-status.yaml | 23 ++++ docs/stories/spot-instance-event-handling.md | 112 +++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 docs/sprint-status.yaml create mode 100644 docs/stories/spot-instance-event-handling.md diff --git a/docs/sprint-status.yaml b/docs/sprint-status.yaml new file mode 100644 index 0000000..521a4c0 --- /dev/null +++ b/docs/sprint-status.yaml @@ -0,0 +1,23 @@ +# Sprint 状态跟踪 +# 跟踪当前 sprint 中的故事实现进度 + +generated: "2025-11-26" +project: "vk-eci" +sprint: "Sprint-1" + +stories: + - id: "STORY-001" + title: "实现 ECI 抢占式实例 SpotToBeReleased 事件处理" + file: "docs/stories/spot-instance-event-handling.md" + status: "TODO" + priority: "高" + effort: "中等" + assignee: "" + created: "2025-11-26" + +# 故事状态定义 +# TODO - 待开始 +# IN_PROGRESS - 进行中 +# READY_FOR_REVIEW - 准备评审 +# DONE - 已完成 +# BLOCKED - 被阻塞 \ No newline at end of file diff --git a/docs/stories/spot-instance-event-handling.md b/docs/stories/spot-instance-event-handling.md new file mode 100644 index 0000000..3c69bb5 --- /dev/null +++ b/docs/stories/spot-instance-event-handling.md @@ -0,0 +1,112 @@ +# 用户故事:处理 ECI 抢占式实例 SpotToBeReleased 事件 + +## 故事概述 +- **故事 ID**: STORY-001 +- **标题**: 实现 ECI 抢占式实例 SpotToBeReleased 事件处理 +- **优先级**: 高 +- **预估工作量**: 中等 +- **状态**: TODO + +## 用户角色 +- **用户**: Kubernetes 集群管理员 +- **系统**: Virtual Kubelet ECI Provider + +## 用户目标 +作为 Kubernetes 集群管理员,我希望 Virtual Kubelet 能够接收和处理 ECI 抢占式实例的 `SpotToBeReleased` 事件,以便: +- 提前知道抢占式实例将被释放 +- 实现优雅的 Pod 迁移和重新调度 +- 避免业务中断 + +## 验收标准 + +### AC-001: 检测 SpotToBeReleased 事件 +- [ ] 当 ECI 容器组产生 `SpotToBeReleased` 事件时,系统能够检测到该事件 +- [ ] 事件信息包含释放时间(约3分钟前) +- [ ] 事件类型为 `SpotToBeReleased` + +### AC-002: 更新 Pod 状态 +- [ ] 检测到 `SpotToBeReleased` 事件时,在 Pod Status 中添加相应的条件 +- [ ] Pod 条件类型为 `ContainerInstanceExpired` +- [ ] 条件状态设置为 `true` +- [ ] 条件消息包含释放时间信息 + +### AC-003: 生成 Kubernetes 事件 +- [ ] 当检测到 `SpotToBeReleased` 事件时,生成相应的 Kubernetes 事件 +- [ ] 事件类型为 `Warning` +- [ ] 事件原因设置为 `SpotToBeReleased` +- [ ] 事件消息包含 "Spot ECI will be released in X minutes" + +### AC-004: 支持优雅下线策略 +- [ ] 支持通过 Annotation `k8s.aliyun.com/eci-spot-release-strategy: api-evict` 配置优雅下线 +- [ ] 当配置了优雅下线策略时,在收到 `SpotToBeReleased` 事件时调用 Eviction API +- [ ] 确保 Pod 能够被正常驱逐和重新调度 + +### AC-005: 事件处理集成 +- [ ] 事件处理逻辑集成到现有的 `containerGroupToPod` 函数中 +- [ ] 保持与现有代码的兼容性 +- [ ] 正确处理多个事件的情况 + +## 技术实现细节 + +### 需要修改的文件 +1. **`eci.go`** - `containerGroupToPod` 函数 + - 添加 ECI 事件处理逻辑 + - 更新 Pod Status 条件 + - 生成 Pod 事件 + +2. **可能需要的新文件** + - 事件处理工具函数 + - 测试文件 + +### 实现方案 +```go +// 在 containerGroupToPod 函数中添加事件处理 +for _, event := range cg.Events { + if event.Type == "SpotToBeReleased" { + // 设置 Pod 条件 + pod.Status.Conditions = append(pod.Status.Conditions, v1.PodCondition{ + Type: "ContainerInstanceExpired", + Status: v1.ConditionTrue, + LastTransitionTime: metav1.Now(), + Reason: "SpotToBeReleased", + Message: event.Message, + }) + + // 生成 Kubernetes 事件 + // (需要事件记录器实例) + } +} +``` + +### 测试要求 +- [ ] 单元测试:验证事件检测逻辑 +- [ ] 集成测试:验证 Pod 状态更新 +- [ ] 端到端测试:验证完整的抢占式实例生命周期 + +## 依赖关系 +- **前置条件**: 现有的 ECI provider 基础功能正常工作 +- **相关组件**: Kubernetes 事件系统、Pod 控制器 +- **外部依赖**: Alibaba Cloud ECI API + +## 风险与缓解 +- **风险**: 事件处理可能影响现有 Pod 状态更新逻辑 +- **缓解**: 充分测试,确保向后兼容 +- **风险**: 事件频率可能影响性能 +- **缓解**: 实现事件去重和批量处理 + +## 完成定义 (DoD) +- [ ] 所有验收标准通过测试 +- [ ] 代码通过代码审查 +- [ ] 单元测试覆盖率达到 80% 以上 +- [ ] 集成测试验证功能完整性 +- [ ] 文档更新完成 +- [ ] 性能测试通过 + +## 故事上下文 +- **相关 Epic**: ECI 事件处理改进 +- **业务价值**: 提高抢占式实例的可用性和可靠性 +- **技术债务**: 填补现有实现中的事件处理空白 + +--- +*故事创建时间: 2025-11-26* +*创建者: Developer Agent* \ No newline at end of file