什么处理 StatefulSet 复制?

What handles a StatefulSet replication?

如果 Deployment 使用 ReplicaSets 来扩展和缩小 Pods,而 StatefulSets 没有 ReplicaSets...

那么,它是如何设法扩大和缩小 Pods 的?我的意思是,什么资源负责?为了扩展,StatefulSet 会提出哪些请求?

简而言之,StatefulSet Controller 处理 statefulset 副本。

StatefulSet 是一个 Kubernetes API 对象,用于管理有状态的应用程序工作负载。 StatefulSets 处理 Kubernetes 集的部署和扩展 pods,为它们的唯一性和顺序提供保证。

与部署类似,StatefulSets 使用相同的容器规范管理 pods。它们在为每个 pod 维护持久标识方面有所不同。虽然 pods 都是基于相同的规范创建的,但它们不可互换,因此每个 pod 都被赋予一个持久标识符,该标识符通过重新调度来维护。

StatefulSet 部署的优势包括:

唯一标识符—StatefulSet 中的每个 pod 都被分配了一个唯一的、稳定的网络标识,由基于应用程序名称和实例编号的主机名组成。例如,具有三个实例的 Web 应用程序的 StatefulSet 可能具有 pods 标记的 web1、web2 和 web3。

持久存储—每个 pod 都有自己稳定的持久卷,默认情况下或按存储定义class。当集群中的 pods 被缩减或删除时,其关联的卷不会丢失,并且数据会持续存在。在删除未使用的 pods.

之前,可以通过将 StatefulSet 缩小为 0 来清除不需要的资源

有序部署和扩展——StatefulSet中的pods是根据它们的增量按顺序创建和部署的。 Pods 也以(相反)顺序关闭,确保部署和运行时可靠且可重复。 StatefulSet 不会扩展,直到所有需要的 pod 都达到 运行,因此如果 pod 失败,它将在尝试根据扩展要求添加更多实例之前重新创建 pod。

自动化、有序的更新—StatefulSets可以处理滚动更新,关闭每个节点并根据原始顺序重建它,直到每个节点都被替换并且旧版本清理干净。持久卷可以重复使用,所以数据会自动迁移到新版本。