即便是分布式系统,也不可避免地会出现故障,有种解决方案是运行多个服务实例。本文探讨了一些在 Kubernetes 实现该目标的不同方法。
作者:Harry Martland
翻译:Bach(才云)
校对:星空下的文仔(才云)、bot(才云)
分布式系统会不可避免地发生些故障,我们需要计划好如何解决,其中有种方法是运行多个服务实例,这样即便有一个故障了,其他的可以继续接管。在本文中,我们将探讨一些在 Kubernetes 上实现此目标的不同方法。
None
冗余(Redundancy)是有代价的,我们在考虑弹性时就应想到这一点。当然,如果客户可以忍受少量中断,并且对他们的体验没有太大影响,那么这点就无所谓了。
只要应用程序不是经常崩溃,我们就可以运行一个 Pod 并依靠 K8s 重新运行,不过这需要一个 Pod 来处理服务接收的负载。
N
随着服务开始需要更多的 Pod 来处理负载,我们可以对其进行扩展。如果流量是随时间变化的(例如中午高峰),那我们要有足够的 Pod 在高峰时间处理负载。这种策略在 Pod 接收的流量会明显减少时,才能提供较好的弹性。
在讨论伸缩时,大家可能听过一些术语,例如 in、out、up 和 down。通常,up 和 down 意味着保持相同数量的实例,但增加或减少 CPU 或 Server 的内存。In 和 out 是增加或删除服务实例,但保持资源不变。明白这些后,我们可以进一步实现伸缩,但要注意会受到可使用的最大 CPU 或内存限制。
N+1
与 N
一样,我们要了解需要多少 Pod 来处理高峰流量,这次添加了一个额外 Pod 来为我们提供保护,以防止高峰期间出现 Pod 故障的情况。这种策略的弹性成本就是一个 Pod,这是额外的成本,并只在故障情况下才需要。这就是为什么即便有一个 Pod 可以处理所有流量,但我们仍要有一个额外 Pod。
伸缩
与其手动计算高峰时段所需的 Pod 数量,不如让 K8s 代为完成。有了伸缩指标(scaling metric),K8s 可以根据当前需求伸缩服务,在需求较低时缩小规模,在需要时扩大规模,这样就降低了成本。虽然伸缩本身并不能使 Pod 从故障中恢复过来,但是可以应对激增的需求。控制好 Pod 的内存和 CPU 可以使我们更精确地扩展规模并降低成本。
75% 伸缩
知道自动伸缩以及何时伸缩服务时,我们就可以控制所需的弹性。将服务容量伸缩到 75% 时,我们会损失 25% 的 Pod,拥有的 Pod 越多,损失的也就越多,同时我们还要为未利用的 Pod 支付大量费用。即便是这样,当我们运行着大量的 Pod 时,依旧要考虑降低弹性百分比,因为可能会出现大量 Pod 发生故障的情况。
伸缩 + N
如果想精确地控制冗余而不是某个百分比,那么可以选择扩展容量,再增加 N
中的额外 Pod。这样即便 N
的 Pod 故障,我们仍然有足够的容量,来精确控制冗余 Pod。
N
的 Pod。两个副本集使用相同的标签标记容器,并且 Service 将路由到该标签。该 Service 在所有 Pod 中平均分配流量,从而允许在扩展服务的同时维护
N
的冗余 Pod。
多集群
我们还可以将应用程序部署到两个 K8s 集群中,这样即便整个集群出现故障,都还能继续维护服务。负载均衡器在集群前面,并在集群之间路由流量。
数量与冗余
拥有的 Pod 越多,单个 Pod 的故障对其他 Pod 的影响就越小。假设我们有十个可以服务 100rps 的 Pod,如果以 90rps 的比例伸缩并且有一个 Pod 故障,那么其余 Pod 要接收 100rps,并达到容量极限;如果我们有 20 个 Pod,其中有一个 Pod 故障,其余的 Pod 仅需处理 95rps。这两种情况都是假定服务能准确接收请求。实际上,服务通常会收到比这少的流量,如果扩大规模,收到的流量会稍多一些。
总结
自动伸缩是一个复杂的问题,有很多选择需要我们考虑。通过本文,希望大家对此有更好的了解,并且可以使用它来减少云账单成本,同时保持服务的正常运行。
原文链接:https://medium.com/better-programming/kubernetes-pod-redundancy-strategies-a6d9b560749a
推荐阅读:
文章转载自K8sMeetup社区。点击这里阅读原文了解更多。
扫描二维码联系我们!
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF(云原生计算基金会)致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。
本文分享自微信公众号 - CNCF(lf_cncf)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4254704/blog/4642829