Workload 在 Eru 里代表一个最终部署实例抽象, 在不同的 runtime 上可能代表容器/虚拟机/daemon 进程.
Workload 拥有全局唯一到 ID, 通过 ID 可以完成一系列通用操作:
- Create
- Stop
- Start
- Remove
- Execute: 在容器 namespace 里, 或者 VM 内部, 执行指定的命令
- Realloc: 动态调整 workload 的资源配额. 详见 资源
- Replace: 删除旧实例, 原地起新实例, 可继承网络配置
- Copy: 从实例里拷贝指定文件到客户端
- Send: 从客户端拷贝指定文件到实例内部
注意 Realloc 是实时重分配, 容器进程不会被停止; 不过 Yavirt 虚拟机暂不支持实时重分配.
Eru Workload 可以在创建时指定 after_start
和 before_stop
hook, 可以用来完成一系列应用初始化和清理的工作. 详见 spec.
Eru Workload 还可以在创建时指定 healthcheck
来定义应用的健康状态, 可以定义 tcp ports 和 http url 作为检测方式. 详见 spec.
Workload 本身的状态由节点上的 eru-agent 监控和上报给 eru-core, 上报信息包括:
- running: 实例是否存活
- healthy: 在
healthcheck
定义下的实例是否健康 - networks: 实例 IP
- extension: 其他 tags
eru-core 提供了一个接口 WorkloadStatusStream
供第三方监听 Workload 的生命状态, 一旦有状态变化会推送消息给监听方, 从而完成 failover 等机制.
健康检查是由 spec 中的 healthcheck
部分定义的.
详细的信息参见 健康检查.