Files
alibabacloud-eci/docs/stories/spot-instance-event-handling.md
D8D Developer 6a548f538a feat(docs): 添加 sprint 状态跟踪和抢占式实例事件处理故事文档
- 新增 sprint-status.yaml 文件用于跟踪项目 sprint 进度和故事状态
- 新增 spot-instance-event-handling.md 详细用户故事文档
- 定义 ECI 抢占式实例 SpotToBeReleased 事件处理的需求和验收标准
- 包含技术实现方案、测试要求和风险缓解措施
2025-11-26 06:48:26 +00:00

3.7 KiB
Raw Blame History

用户故事:处理 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. 可能需要的新文件

    • 事件处理工具函数
    • 测试文件

实现方案

// 在 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