diff --git a/docs/stories/spot-instance-event-handling.md b/docs/stories/spot-instance-event-handling.md deleted file mode 100644 index 3c69bb5..0000000 --- a/docs/stories/spot-instance-event-handling.md +++ /dev/null @@ -1,112 +0,0 @@ -# 用户故事:处理 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