Container Orchestration 用于根据用户操作配置单个容器

Container Orchestration for provisioning single containers based on user action

我对Docker编排和管理容器群还很陌生。我想构建一个应用程序,当用户 运行 一个命令时,它会为用户提供一个容器。实现此目标的最佳工具和最佳方法是什么?

我计划有一个 CoreOS 服务器池来 运行 容器,我想象调度程序有一个 API 我可以调用它来创建容器。

我在 Nomad、Kubernetes、Docker Swarm 等方面看到的大部分内容是如何提供多个容器集群,它们都做同样的事情。我希望能够基于用户命令创建单个容器,然后能够与该容器上的 API 进行通信。有人有这方面的经验吗?

我会看看 Kubernetes + Jobs API (short lived) or Deployments(长期存在)

我不确定你所说的命令到底是什么意思,但我假设它是由 CLI 触发的某种开发环境,make-dev

  1. 用户触发器 make-dev,它会向位于作业 API 前面的应用程序发送一个 webhook,最好是进行速率限制 and/or 验证。
  2. 您的应用接受命令,对其进行完整性检查,然后触发 Job/Deployment 请求 + Ingress rule + Service
  3. Kubernetes 会在您的机器群中安排它
  4. 您的应用等待 pod 启动,然后 returns 使用唯一标识符返回 API 的地址(入口规则中的相同内容),例如 devclusters.com/foobar123
  5. 用户现在可以在该地址访问他们的服务。在内部,Kubernetes 使用入口和服务将请求路由到您的 pod

这应该可以很好地扩展,如果您的不同环境使用相同的基础容器映像,它们应该可以非常快速地启动。

插件:如果你想要一个简单的 CoreOS + Kubernetes 集群加上 UI 尝试 https://coreos.com/tectonic

I plan on having a pool of CoreOS servers to run the containers on and I'm imagining the scheduler to have an API that I can just call to create the container

kubernetes 附带一个 RESTful API,您可以使用它在集群中直接创建 pods(kubernetes 中包含一个或多个容器的工作单元)。

命令行实用程序 kubectl 也通过 api 以完全相同的方式与集群交互。目前有用golang、Java和Python编写的客户端库,正在与其他人一起帮助与集群通信。

如果您以后想要更高级别的抽象来管理 pods、更新它们并管理它们的生命周期,查看其中一个控制器(复制集、复制控制器、部署、statefulset)应该会有所帮助。