- 新增 sprint-status.yaml 文件用于跟踪项目 sprint 进度和故事状态 - 新增 spot-instance-event-handling.md 详细用户故事文档 - 定义 ECI 抢占式实例 SpotToBeReleased 事件处理的需求和验收标准 - 包含技术实现方案、测试要求和风险缓解措施
3.7 KiB
3.7 KiB
用户故事:处理 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函数中 - 保持与现有代码的兼容性
- 正确处理多个事件的情况
技术实现细节
需要修改的文件
-
eci.go-containerGroupToPod函数- 添加 ECI 事件处理逻辑
- 更新 Pod Status 条件
- 生成 Pod 事件
-
可能需要的新文件
- 事件处理工具函数
- 测试文件
实现方案
// 在 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