在现实世界中扩展 Docker 容器

2024-04-03

我有一些关于扩展 Docker 容器的基本问题:

我有 5 个不同的应用程序。它们彼此没有连接。在拥有容器之前,我会在每个虚拟机上运行 1 个应用程序,并在云中单独扩展和缩小它们。

现在,有了容器,我就可以在虚拟机之上实现隔离,因此现在我可以运行一台带有 5 个 docker 容器的主机,其中每个应用程序都隔离在自己的容器中。

只要我的主机上有足够的资源,我就可以随着流量的增长或收缩而单独扩展和缩减这些容器。例如我有 3 个容器运行应用程序 1,但只有 1 个容器运行应用程序 2。

在高峰时段,应用程序 3 会获得大量流量,我需要启动第二台主机,该主机仅运行应用程序 3 的容器。

我的第一个问题是,以上内容是否有道理,或者我是否误解了某些内容。我的第二个问题是,目前有哪些技术可以自动完成这一切。我需要一个负载均衡器和一个自动扩展组,它能够实现上述场景,而无需我进行手动干预。

我研究了 AWS ECS,但不太确定它是否能满足我上面概述的需求。

有谁知道如何实现这一目标,或者是否有更好的方法来管理和扩展我缺少的 5 个应用程序?

UPDATE:

通过 Twitter 我被指出库伯内斯 http://kubernetes.io/特别是关于文档水平 Pod 自动缩放器 http://kubernetes.io/v1.1/docs/user-guide/horizontal-pod-autoscaler.html.

可能对其他人也有用。当我了解更多信息时,我会更新这个问题。


有多种选择,但据我所知,没有一个可以解决所有问题:您需要两件事:根据信号自动缩放主机,然后自动缩放主机上的容器。

以下是部署和扩展的解决方案容器在主机上(不一定auto-规模虽然):

库伯内斯是一个编排工具,允许调度和(使用可选的自动缩放器)自动缩放集群中的 pod(容器组)。如果主机出现故障,它可以确保您的容器在某个地方运行。 Google Container Engine (GKE) 将此作为一项服务提供,但我不确定它们是否具有与 AWS 相同的功能来自动缩放集群中的虚拟机数量。

Mesos:有点类似于 Kubernetes,但不专门用于运行容器。

码头工人群:Docker 多主机部署解决方案,允许您像控制单个 Docker 主机一样控制多个主机。我不相信它有任何类型的“自动缩放”功能,而且我不相信它负责确保 Pod 始终在某个地方运行:它基本上是用于集群的 docker。

[编辑] Docker 支持使用以下命令重新启动失败的容器restart=always另外,从 Docker 1.11 开始,Docker Swarm 是 Docker Daemon 中的一种模式,并支持在节点故障时重新调度容器:如果节点不再可用,它将在不同节点上重新启动容器。

Docker 1.11+ 在功能方面变得越来越像 Kubernetes。它有一些不错的功能(例如默认情况下节点之间的 TLS),但仍然缺乏静态 IP 和存储配置等功能

这些解决方案都不会为您自动缩放主机数量,但它们可以缩放主机上的容器数量。

对于自动缩放主机,解决方案特定于您的云提供商,因此这些是专用解决方案。对您而言,关键部分是将两者整合起来: AWS允许在CoreOS上部署Kubernetes;我认为他们不会将此作为服务提供,因此您需要部署自己的 CoreOS 集群和 Kubernetes。

现在我个人的意见(和免责声明)

我主要在 GKE 和裸机上使用 Kubernetes,以及大约 6 个月前的 Swarm,并且我在 GKE 上运行了大约 35 个服务的基础设施:

坦率地说,带有 Kubernetes 即服务的 GKE 可以提供您想要的大部分功能,但它不是 AWS。扩展主机仍然有点棘手,需要做一些工作。

在 AWS 或裸机上设置您自己的 Kubernetes 或 Mesos 是非常可行的,但有一个相当长的学习曲线:这完全取决于您是否真的强烈想要使用 AWS 并愿意花时间。

Swarm 可能是最容易使用的,但也有更多限制,但是自制脚本可以很好地完成核心工作:使用 AWS API 来扩展主机,并使用 Swarm 进行部署。不过,可用性保证需要您监控并在节点发生故障时重新启动容器。

除此之外,还有容器托管提供商可以为您完成这项工作:

  • Scalingo 是我所知道的一种,但还有其他的。https://scalingo.com/ https://scalingo.com/

  • OVH Sail Below 在 alpha 版本中提供了此服务。https://www.runabove.com/sailabove.xml https://www.runabove.com/sailabove.xml

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在现实世界中扩展 Docker 容器 的相关文章

随机推荐

  • 配置“:app:api”包含在依赖项解析中后无法更改它的依赖项

    无法更改配置的依赖关系 应用程序 api 当它被包含在依赖解析中之后 我也遇到了同样的错误 谢谢 Dominik https stackoverflow com users 1653268 dominik kunicki用于链接到重复项is
  • 正则表达式匹配数字或特定字符串(即“全部”)

    这听起来很简单 但我的正则表达式知识有限 我需要一个表达式来匹配十进制数或字符串 all 就像在范围验证器中允许单词 all 代表最大范围一样 我认为这样的事情可能会起作用 d d any 但以上不适用于 任何 这是一个不使用正则表达式的解
  • .Net Framework 版本 C# 7.2 可用

    我尝试安装 net框架4 7 2 项目属性中目标框架仍然为空 我尝试运行的程序使用只读结构体 这是一部分C 7 2 你能指导我 Net Framework 版本有C 7 2 语言功能独立于 Net 版本 框架 核心 标准 您将需要使用能够理
  • OSX 状态菜单在 Swift 中不起作用

    我尝试使用 swift 将一个简单的状态菜单添加到状态栏 但它不会显示 与 Objective c 一起工作 AppDelegate h interface AppDelegate NSObject
  • 从苹果下载 iPhone 示例代码 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 iphone sdk 文档包含示例代码的链接 但您必须从网络上单独下载它们 有没有可以从苹果一次性下载的捆绑包 例如 阅读第一个 iPho
  • 当我更改配置设置时,Visual Studio 生成“Settings1.Designer.vb”

    有时 并非总是 当我在 我的项目 页面中编辑设置时 当我从那里添加一个设置或编辑一个值时 会收到错误消息 Settings is ambiguous between declaration in Modules
  • 跳进C语言的一个块

    如果我像这个例子一样跳进一个块 跳过 声明 include
  • 找到 2 个 java.sql.Timestamps 之间的小时或分钟差异?

    我存储一个java sql Timestamp in a PostgreSQL数据库为时间戳数据类型 我想找出数据库中存储的数据类型与当前数据类型之间的差异 以分钟或小时为单位 时间戳 这样做的最佳方法是什么 是否有内置方法 或者我必须将其
  • 文本背景颜色溢出

    我将背景颜色应用于国家 地区列表中的链接 总体来说效果很好 然而 对于名称较长的国家来说 它的效果不太好 我试图让黄色溢出一切并清楚地显示国家的全名 HTML div class flagList div class flagColumn
  • Jade 模板布局无法与 Node.js 结合使用

    我正在尝试在 Node js 中创建一个使用 Jade 模板和布局的简单服务器 由于某种原因 它只会加载模板而不加载布局 这是我所得到的 main js var express require express var app express
  • 如何正确使用Feature2D(如SimpleBlobDetector)? (Python + OpenCV)

    我正在尝试使用一些简单的代码运行斑点检测 img cv2 imread args image height width channels img shape params cv2 SimpleBlobDetector Params para
  • 如何绘制样本的 PMF?

    是否有任何函数或库可以帮助我绘制样本的概率质量函数 就像绘制样本的概率密度函数一样 例如 使用 pandas 绘制 PDF 就像调用以下命令一样简单 sample plot kind density 如果没有简单的方法 我如何计算 PMF
  • 有人知道 10 位原始 RGB 吗?关于全视

    我正在使用 Omnivision ov5620 http electronics123 net amazon datasheet OV5620 CLCC DS 20 1 3 pdf http electronics123 net amazo
  • NLog 在发布模式下不工作

    我正在使用 NLog 记录我的 asp net mvc C 应用程序中的异常 NLog 在发布模式下不工作 在调试模式下运行时也是如此 可能是什么问题 有什么解决办法吗 我和你遇到了同样的问题 ASP NET MVC 3 NET 4 IIS
  • OrientDB 中带有子选择的根空间查询

    我正在尝试组合一个查询来查找图中节点 2 公里以内的节点 假设我有一个数据集 标记了纳斯卡线中的一些地理符号 Name Latitude Longitude Hummingbird 14 692131 75 148892 Monkey 14
  • 如何选择哪个 iPhone 型号模拟器来运行我的 React Native 应用程序?

    我正在开发 React Native 应用程序 并在 iOS 模拟器上进行测试 但是 它始终在 iPhone 6 上运行 我不知道如何切换到其他 iPhone 型号 例如 iPhone 6 Plus 或 5 我可以通过转到模拟器 gt 硬件
  • 警告:活动未启动,其当前任务已被带到前面[重复]

    这个问题在这里已经有答案了 我觉得这个问题很常见 Stackoverflow 上的许多结果都谈到了这一点 一般的答案是 因为一个旧的应用程序正在运行 并且我尝试从 Eclipse 运行一个新的应用程序 但编译没有改变 所以 Android
  • 模板类类型别名在成员声明中无法替换

    假设你有一个模板class像这样 template
  • 如何清除“运行”->“参数”菜单中的“参数”字段?

    我正在使用 CodeGear RAD Studio IDE 为了使用命令行参数测试我的应用程序 我多次使用 运行 gt 参数 菜单中的 参数 字段 但每次我为它提供一个新值时 它都无法从 下拉框 中删除 我需要清理这个字段 删除所有值 因为
  • 在现实世界中扩展 Docker 容器

    我有一些关于扩展 Docker 容器的基本问题 我有 5 个不同的应用程序 它们彼此没有连接 在拥有容器之前 我会在每个虚拟机上运行 1 个应用程序 并在云中单独扩展和缩小它们 现在 有了容器 我就可以在虚拟机之上实现隔离 因此现在我可以运