【微服务】Kubernetes对象之StatefulSets(有状态系统服务设计)

目录

Kubernetes StatefulSets(有状态系统服务设计)

具有以下特点时使用StatefulSets

限制

组件

部署和扩展

Pod管理

OrderedReady Pod Management

Update Strategies

删除

 

Kubernetes StatefulSets(有状态系统服务设计):

具有以下特点时使用StatefulSets:

稳定性,唯一的网络标识符。
稳定性,持久化存储。
有序的部署和扩展。
有序的删除和终止。
有序的自动滚动更新。
Pod调度运行时,如果应用不需要任何稳定的标示、有序的部署、删除和扩展,则应该使用一组无状态副本的控制器来部署应用,例如 Deployment 或 ReplicaSet更适合无状态服务需求。
 

限制:

StatefulSet还是beta特性,在Kubernetes 1.5版本之前任何版本都不可以使用。
与所有alpha / beta 特性的资源一样,可以通过apiserver配置-runtime-config来禁用StatefulSet。
Pod的存储,必须基于请求storage class的PersistentVolume Provisioner或由管理员预先配置来提供。
基于数据安全性设计,删除或缩放StatefulSet将不会删除与StatefulSet关联的Volume。
StatefulSets需要Headless Service负责Pods的网络的一致性(必须创建此服务)。
 

组件:

name为nginx的Headless Service用于控制网络域。
StatefulSet(name为web)有一个Spec,在一个Pod中启动具有3个副本的nginx容器。
volumeClaimTemplates使用PersistentVolumes供应商的PersistentVolume来提供稳定的存储
 

部署和扩展:

对于具有N个副本的StatefulSet,当部署Pod时,将会顺序从{0..N-1}开始创建。
Pods被删除时,会从{N-1..0}的相反顺序终止。
在将缩放操作应用于Pod之前,它的所有前辈必须运行和就绪。
对Pod执行扩展操作时,前面的Pod必须都处于Running和Ready状态。
在Pod终止之前,所有successors都须完全关闭。


不要将StatefulSet的pod.Spec.TerminationGracePeriodSeconds值设置为0,这样设置不安全,建议不要这么使用。
 

Pod管理:

tatefulSet放宽了排序规则,同时通过.spec.podManagementPolicy字段保留其uniqueness和identity guarantees
 

OrderedReady Pod Management:

OrderedReady Pod Management 是StatefulSets的默认行为。它实现了上述 “部署/扩展” 行为。
Parallel Pod Management:
Parallel Pod Management告诉StatefulSet控制器同时启动或终止所有Pod。
 

Update Strategies:

StatefulSet的.spec.updateStrategy字段允许配置和禁用StatefulSet中Pods的containers、labels、resource request/limits和annotations的滚动更新。
 

删除:

当StatefulSet .spec.updateStrategy.type设置为OnDelete,StatefulSet控制器将不会自动更新StatefulSet中的Pod,用户必须手动删除Pods以使控制器创建新的Pod。
滚动更新:
RollingUpdate更新策略实现了自动化,使StatefulSet中的Pod滚动更新。
当StatefulSet .spec.updateStrategy.type设置为RollingUpdate,StatefulSet控制器将删除并重新创建StatefulSet中的每个Pod。
它将以与Pod终止相同的顺序进行(从最大的序数到最小的顺序)来更新每个Pod。
Partitions:
通过指定 .spec.updateStrategy.rollingUpdate.partition来分割RollingUpdate更新策略。
如果指定了partition,则当更新StatefulSet时,将更新具有大于或等于partition的序数的所有Pods .spec.template,小于partition的序数的所有Pod将不会被更新。
如果一个StatefulSet的.spec.updateStrategy.rollingUpdate.partition大于它.spec.replicas,它的更新.spec.template将不会被传Pods。

 

在通常数情况下,不需要使用partition,但如果需要进行更新,推出金丝雀或执行分阶段推出,可以使用partition。

 

 

内容整理自Kubernetes中文社区:https://www.kubernetes.org.cn/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值