GKE 中的 StatefulSet 简介


本页面介绍如何在 Google Kubernetes Engine (GKE) 中使用 StatefulSet 对象。您还可以了解如何部署有状态应用

StatefulSet 简介

StatefulSet 表示一组具有唯一持久身份和稳定主机名的 Pod。无论这些 Pod 调度到何处,GKE 都会对其进行维护。任何指定 StatefulSet Pod 的状态信息和其他弹性数据都存放在与该 StatefulSet 中的每个 Pod 关联的永久性卷中。StatefulSet Pod 可以随时重启。

对于无状态应用,请使用 Deployment

StatefulSet 在 GKE 和 Kubernetes 中的功能类似。本文档介绍了所有特定于 GKE 的注意事项。如需了解 StatefulSet 的工作原理,请参阅有关 StatefulSet 的 Kubernetes 文档

规划 StatefulSet 的网络

StatefulSet 以永久性卷和唯一网络身份(主机名)的形式提供永久性存储空间。下表包含应用运营商在配置 StatefulSet 时应该注意的事项:

网络注意事项 说明 最佳实践
GKE Service,而不是固定 IP 地址

虽然 Pod 副本具有唯一的序数索引,支持基于每个副本的卷和网络身份(主机名)识别,但分配给副本的 IP 地址可能会在 GKE 重新调度或逐出 Pod 时发生变化。

为缓解网络问题,架构应使用 Kubernetes Service 资源。如需了解详情,请参阅 Kubernetes Service 的类型

无头服务

初始化时,StatefulSet 会与匹配的无头服务配对。

请确保 Service 中的“metadata.name”与 StatefulSet 中的 serviceName 字段匹配。这样一来,应用中的每个 Pod 都可以通过明确定义的唯一网络地址进行寻址。此外,无头服务可为 StatefulSet 中的每个副本提供多 IP 记录,支持完整的对等发现。

对等发现

有状态应用只需最小数量的副本(仲裁),便可提供完整的可用性。

由于 Pod 可能会发生崩溃、被重新调度或被逐出,因此 StatefulSet 中的每个副本都应能够退出并重新联接仲裁。需要对等互连的应用应能够通过 Kubernetes 中的无头服务发现其他对等体。

基于就绪性探测和活跃性探测的健康检查

在适用的情况下,您的应用应正确配置就绪性、活跃性和启动探测。根据应用的要求,配置每个探测的超时设置。

对于就绪性探测,请遵循以下最佳做法来配置应用,在应用准备好处理流量时将其标记为准备就绪:

  • 活跃性探测:您可以使用活跃性探测来指示容器健康状况是否良好。例如,数据库副本可以使用活跃性探测来指示 GKE 应重启副本,例如在死锁条件下。
  • 就绪性探测:您可以使用就绪性探测暂时移除用以处理流量的某个副本。例如,如果您有一个需要执行备份的数据库副本,便可以使用就绪性探测使该副本暂停接收请求。
  • 启动探测:您可以使用启动探测来延迟健康检查,直到长时间运行的初始化完成为止。例如,如果您有一个数据库副本,便可以使用启动探测来等待系统完成对磁盘中存储的数据的初始化流程。

如需详细了解探测,请参阅配置活跃性、就绪性和启动探测

使用 StatefulSet

如需了解如何在 GKE 集群中部署 StatefulSet 并与其进行交互,请参阅关于 StatefulSet 基础知识的 Kubernetes 文档。

后续步骤