feat(docs): 添加 sprint 状态跟踪和抢占式实例事件处理故事文档

- 新增 sprint-status.yaml 文件用于跟踪项目 sprint 进度和故事状态
- 新增 spot-instance-event-handling.md 详细用户故事文档
- 定义 ECI 抢占式实例 SpotToBeReleased 事件处理的需求和验收标准
- 包含技术实现方案、测试要求和风险缓解措施
This commit is contained in:
D8D Developer
2025-11-26 06:48:26 +00:00
parent 0343d8257f
commit 6a548f538a
2 changed files with 135 additions and 0 deletions

23
docs/sprint-status.yaml Normal file
View File

@@ -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 - 被阻塞

View File

@@ -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*