# Agent

### 简介

Agent 主要的功能是：

* 检查 Workload 的状态（例如健康状态、网络信息等），并且上报至 Core
* 检查此 Node 的状态，并且上报至 Core
* 获取并转发 Workload 的日志
* 获取并转发 Metrics

Agent 并没有 HA 机制，建议在一个 Node 上只部署一个 Agent，用于监控这个 Node 及在其上运行的 Workload 的状态。

### 结构

Agent 的主体结构如下图：

![](https://2370565627-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LAatJdyoBI7PIItCyxP%2Fuploads%2Fgit-blob-d0004b028664270be5f04ee2669e7a325773a864%2Fagent.png?alt=media)

和 Core 一样，Agent 并不与 Runtime 类型强耦合。Agent 把所有与运行时相关的逻辑抽象为如下图所示的 `Runtime` 接口，只需要通过简单适配，实现这个接口即可支持任意 Runtime。目前已经支持了 `Docker` 和 `Yavirt`，未来还会支持 `Systemd` 等。

![](https://2370565627-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-LAatJdyoBI7PIItCyxP%2Fuploads%2Fgit-blob-fccc9bb8dcd2bebf869b3c40d9ee46737fecd977%2Fruntime.png?alt=media)

Agent 还做了其它抽象化的工作，例如将 `Core Service` 抽象为 `Store`，将 `ETCD` 抽象为 `KV`。这些抽象不仅增强了扩展性，还为设计单元测试提供了便利。
