本文档建议采用 Kubernetes 容器工作负载策略,以使您的应用在 Google Distributed Cloud (GDC) 网闸隔离的多可用区环境中更具容错能力。GDC 支持 Kubernetes 原生容器应用,这些应用在 Google Kubernetes Engine (GKE) 上得到广泛使用和支持。
本文档中的策略适用于负责创建弹性工作负载的应用开发者。
如需了解详情,请参阅 GDC 网闸隔离配置文档的受众群体。
针对高可用性应用的 Kubernetes 注意事项
在 Kubernetes 中实现高可用性 (HA) 不仅仅是控制平面。您还必须在 Google Distributed Cloud (GDC) 经过网闸隔离的环境中以弹性方式设计和部署容器工作负载。Kubernetes 提供了多种强大的机制,可最大限度地减少停机时间,并提供高可用性服务,即使在遇到基础设施问题或进行日常维护时也是如此。以下主题是需要考虑的关键高可用性策略:
通过副本和自动扩缩功能保持可用性:确保应用有足够的正在运行的实例来处理延迟需求,并能在单个 pod 发生故障时正常运行。
Pod 副本:维护一组稳定的相同 Pod 副本。如果某个 pod 发生故障,
ReplicaSet控制器会自动创建一个新 pod 来替代它。如需了解详情,请参阅 KubernetesReplicaSet文档。Pod 横向自动扩缩器 (HPA):根据 CPU 利用率等指标自动调整副本数量,让您的应用能够应对流量高峰。如需了解详情,请参阅 Kubernetes HPA 文档。
使用
PodDisruptionBudget(PDB) 尽可能缩短停机时间:使用 PDB 限制在主动中断(例如节点维护)期间可同时停机的 pod 数量。此策略可确保最低级别的可用性。如需了解详情,请参阅 Kubernetes PDB 文档。通过反亲和性规则分散风险:使用 Pod 反亲和性来确保同一应用的多个副本不会调度到同一节点上。此策略可防止单个基础架构故障导致所有副本都无法正常运行。如需了解详情,请参阅 Kubernetes 亲和性文档。
使用探测的健康检查:实现活跃性、就绪性和启动探测,以帮助 Kubernetes 检测并从不健康的 pod 中恢复。探测可确保流量仅路由至能够处理流量的 pod。如需了解详情,请参阅 Kubernetes 探测文档。
通过服务实现稳定的端点:使用 Kubernetes
Service对象为 Pod 提供稳定的 IP 地址和 DNS 名称,从而将客户端与各个 Pod 生命周期分离,并提供内部负载均衡。如需了解详情,请参阅 Kubernetes 服务文档。使用部署实现平稳更新和回滚:使用 Kubernetes
Deployment对象为容器工作负载提供平稳更新和回滚。如需了解详情,请参阅 Kubernetes Deployment 文档。设置资源请求和限制:定义容器所需的 CPU 和内存资源。这些规范有助于 Kubernetes 调度器有效地放置 pod,以防止资源争用影响可用性。如需了解详情,请参阅 Kubernetes 资源管理文档。