骑摩托车的女孩。 插图
Kubernetes 是容器编排领域的 300 磅重的大猩猩。 它适用于世界上一些最大的容器系统,但价格昂贵。
对于较小的团队来说特别昂贵,这将需要大量的支持时间和陡峭的学习曲线。 这对我们的四人团队来说太大了。 所以我们开始寻找替代品 - 并且爱上了
你想要什么
我们的团队支持许多常见的性能监控和分析服务:用 Go 编写的指标 API 端点、Prometheus 导出、Logstash 等日志解析器和
我们从容器编排的要求列表开始:
- 在许多机器上运行一组服务。
- 正在运行的服务概述。
- 服务之间的链接。
- 如果服务出现故障,自动重新启动。
- 由小团队维护基础设施。
此外,以下内容也不错,但不是必需的补充:
- 根据机器的功能对其进行标记(例如,为具有用于繁重 I/O 服务的快速磁盘的机器进行标记)。
- 能够独立于编排器运行服务(例如,在开发期间)。
- 共享配置和秘密的公共场所。
- 指标和日志的端点。
为什么 Kubernetes 不适合我们
当我们使用 Kubernetes 进行原型设计时,我们注意到我们正在添加我们严重依赖的越来越复杂的逻辑层。
例如,Kubernetes 通过以下方式支持内置服务配置
此外,Kubernetes 生态系统正在快速发展。 需要花费大量的时间和精力来了解最新的最佳实践和最新的工具。 Kubectl、minikube、kubeadm、helm、tiller、kops、oc——这样的例子不胜枚举。 刚开始时,并非需要所有这些工具,但您不知道需要什么,因此您需要了解所有内容。 因此,学习曲线相当陡峭。
何时使用 Kubernetes
在我们公司,很多人都使用 Kubernetes,并且对此非常满意。 这些实例由 Google 或 Amazon 管理,它们拥有支持它们的资源。
Kubernetes 附带
问题是您是否真的需要所有这些功能。 你不能仅仅依赖于抽象;还要依赖抽象。
我们的团队远程提供大部分服务(由于与主要基础设施的紧密连接),因此我们不想建立自己的 Kubernetes 集群。 我们只是想提供服务。
不含电池
Nomad 只占编排工作的 20%,可提供 80% 的需求。 它所做的只是管理部署。 Nomad 负责部署,在出现错误时重新启动容器......仅此而已。
Nomad 的全部意义在于它的作用 最低限度:没有精细的权限管理或
我认为 Nomad 已经找到了易用性和实用性之间的完美折衷。 它适合小型、独立的服务。 如果您需要更多控制,则必须自己提高它们或使用不同的方法。 游牧民族是 只是 协调者。
Nomad 最好的一点是它很简单 替代。 实际上与供应商没有任何联系,因为它的功能很容易集成到管理服务的任何其他系统中。 它只是像常规二进制文件一样在集群中的每台机器上运行,仅此而已!
松散耦合组件的游牧生态系统
Nomad 的真正优势在于其生态系统。 它与其他完全可选的产品集成得很好,例如
template {
data = <<EOH
LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}"
API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}"
EOH
destination = "secrets/file.env"
env = true
}
这里我们读取密钥 service/geo-api/log-verbosity
来自 Consul,在工作时我们将其暴露给环境变量 LOG_LEVEL
。 我们还提供了关键 secret/geo-api-key
从Vault作为 API_KEY
。 简单但功能强大!
由于其简单性,Nomad 可以通过 API 轻松扩展其他服务。 例如,支持任务标签。 我们用指标标记所有服务 trv-metrics
。 这样Prometheus就可以通过Consul轻松找到这些服务并定期检查端点 /metrics
以获得新数据。 例如,对于日志,可以使用同样的方法
还有许多其他可扩展性的例子:
- 使用钩子运行 Jenkins 作业,当服务配置发生变化时,Consul 监控 Nomad 作业的重新部署。
- Ceph为Nomad添加了分布式文件系统。
法比奥 用于负载平衡。
这一切都让
公平警告
没有一个系统是完美的。 我不建议立即将最新功能引入生产。 当然存在错误和缺失的功能,但这同样适用于 Kubernetes。
与 Kubernetes 相比,Nomad 社区并没有那么大。 Kubernetes 已经拥有约 75 次提交和 000 名贡献者,而 Nomad 拥有约 2000 次提交和 14 名贡献者。 Nomad 将很难跟上 Kubernetes 的速度,但也许不必如此! 与 Kubernetes 相比,它是一个更专业的系统,较小的社区也意味着您的拉取请求更有可能被注意到和接受。
总结
底线:不要仅仅因为其他人都在使用 Kubernetes 就使用它。 仔细评估您的需求并检查哪种工具更有利。
如果您计划在大规模基础设施上部署大量同质服务,那么 Kubernetes 是一个不错的选择。 请注意增加的复杂性和运营成本。 通过使用托管 Kubernetes 环境可以避免一些成本,例如
如果您只是在寻找一个易于维护且可扩展的可靠编排器,为什么不尝试 Nomad 呢? 您可能会惊讶地发现这将带您走多远。
如果将 Kubernetes 比作一辆汽车,那么 Nomad 就是一辆踏板车。 有时您需要一件事,有时您需要另一件事。 两者都有存在的权利。
来源: habr.com