✨ feat(docs): 添加 sprint 状态跟踪和抢占式实例事件处理故事文档
- 新增 sprint-status.yaml 文件用于跟踪项目 sprint 进度和故事状态 - 新增 spot-instance-event-handling.md 详细用户故事文档 - 定义 ECI 抢占式实例 SpotToBeReleased 事件处理的需求和验收标准 - 包含技术实现方案、测试要求和风险缓解措施
This commit is contained in:
23
docs/sprint-status.yaml
Normal file
23
docs/sprint-status.yaml
Normal 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 - 被阻塞
|
||||
112
docs/stories/spot-instance-event-handling.md
Normal file
112
docs/stories/spot-instance-event-handling.md
Normal 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*
|
||||
Reference in New Issue
Block a user