我明白
StatefulSet
- 管理/维护稳定的主机名、网络 ID 和持久存储。HeadlessService
- 稳定的网络 ID,您需要为有状态应用程序定义无头服务
来自 K8s Docs -> 有时您不需要或不想要负载平衡和单个服务 IP。在这种情况下,您可以通过为集群 IP (.spec.clusterIP) 指定“无”来创建“无头”服务。
我对“有状态与无状态”应用程序/组件的看法
UI
属于无状态应用程序/组件,因为它不维护任何数据。但它来自数据库并显示DB
,Cache
(Redis) 是有状态的应用程序/组件,因为它必须维护数据
我的问题。
Persistence storage in Apps
- 为什么我应该考虑将postgress(例如)部署为StatefulSet
?我可以定义PV
s 和PVC
inDeployement
来将数据存储在 PV 中。即使 Pod 重新启动,它也会获得 PV,因此不会丢失数据。Network
- Redis(例如)应该部署为StatefulSet
,这样我们每次都可以获得唯一的“网络 ID”/名称,即使在重新启动 pod 后也是如此。例如;Redis-0
,Redis-1
在StatefulSet
,我可以定义Redis-0
为大师,所以大师name
永远不会改变。现在我为什么要考虑Headless Service
应用StatefulSet
程序?我可以直接访问/连接 POD 本身,对吗?有什么用Headless Service
?我听说过
Operators
,管理应用程序的最佳方式StatefulSet
。我在下面找到了一些例子。为什么这些(或其他)对于部署为StatefulSet
. 例如,Prometheus
或ElasticSearch
;我可以定义PVs
和PVC
存储数据而不会丢失。
我为什么/什么时候应该关心StatefulSet
and Headless Serivice
?