0

我只是有点好奇是否有一种方法可以在旁边使用嘲弄驱动程序或代替 docker 驱动程序?如果有多个,fn 甚至如何决定使用哪一个?原因是如果可能的话,我可能会尝试为另一个容器引擎实现另一个真正的驱动程序。到目前为止,我设法让 mocker 显示为驱动程序,但仍然没有找到如何让 fn 使用它而不是 docker。

4

1 回答 1

0

有一个构建带有扩展名的 fn 的示例:https ://github.com/fnproject/fn/blob/master/examples/extensions/main.go#L16 - 目前用于构建自定义驱动程序它需要使用相同的过程(即,如果不扩展它,就无法在运行时从 fn 核心的二进制文件配置另一个驱动程序)。

为了使用诸如 mocker 之类的替代驱动程序进行构建,用户将agent.WithDockerDriver在创建代理时使用选项来指定驱动程序,在此处记录https://godoc.org/github.com/fnproject/fn/api/agent#AgentOption示例如下:

func main() {
  mocker := mock.New()
  // configure logstore, mq
  da := agent.NewDirectCallDataAccess(logstore, mq)
  magent := agent.New(da, agent.WithDockerDriver(mocker))

  fns := server.New(server.WithAgent(magent), /*other options*/)
  fns.Start(context.Background())
}

我们需要整理代理接口以使它们更容易创建(数据访问的东西很复杂),但还不错。大部分内容都可以从该文件中窃取https://github.com/fnproject/fn/blob/master/api/server/server.go——我们也需要将其命名为 WithDriver :)

假设您正在考虑在后端使用类似 rkt 或更强大的驱动程序,可以通过实现驱动程序接口来连接它,过去我们已经尝试过,但我们目前没有维护它,因为它不是一个可行的选择(性能问题,可能会有所改进)。看看你是否设法让 rkt 工作会很酷,很高兴为它申请一个 PR 并弄清楚把它放在哪里:)

于 2018-07-27T20:45:55.360 回答