Kubernetes必备知识: StatefulSet

简介: StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现 有序部署,有序扩展,即Pod是有顺序的

所属技术领域:

K8s

|名词定义|

StatefulSet是为了解决有状态服务的问题(对应Deployments和ReplicaSets是为无状态服务而设计),其应用场景包括
 稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
 稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
 有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
 有序收缩,有序删除(即从N-1到0)
从上面的应用场景可以发现,StatefulSet由以下几个部分组成:
 用于定义网络标志(DNS domain)的Headless Service
 用于创建PersistentVolumes的volumeClaimTemplates
 定义具体应用的StatefulSet
StatefulSet中每个Pod的DNS格式为statefulSetName-{0..N-1}.serviceName.namespace.svc.cluster.local,其中
 serviceName为Headless Service的名字
 0..N-1为Pod所在的序号,从0开始到N-1
 statefulSetName为StatefulSet的名字
 namespace为服务所在的namespace,Headless Servic和StatefulSet必须在相同的namespace
 .cluster.local为Cluster Domain,

|技术特点|

StatefulSet:主要是时面向有状态应用管理的控制器
StatefulSet能较好地满足一些有状态应用特有的需求
1.每个Pod有Order序号,会按序号创建、删除、更新Pod
2.通过配置headless service,使每个Pod有一个唯一的网络标识(hostname)
3.通过配置pvc template,每个Pod有一块独享的pv存储盘
 StatefulSet范例创建
图片.png
图片.png

 StatefulSet状态
$kubectl get endpoints nginx
$kubectl get sts nginx-web
 管理模式
StatefulSet会创建管理的资源:
ControlleRevision:通过这个资源,StatefulSet可以很方便地管理不同版本的template模板
PVC:如果在StatefulSet中定义了volumeClaimTemplates,StatefulSet会在创建Pod之前,先根据这个模板创建PVC,并把PVC加到Pod volumes中。
Pod:StatefulSet按照顺序创建和、删除、更新Pod,每个Pod有唯一的序号。
 StatefulSet控制器
图片.png

 扩容模拟
StatefulSet的Pod,从序号0开始创建。因此,replicas=N的一个StatefulSet,创建出的Pod序号为[0,N)
图片.png

 扩缩容管理策略
StatefulSet.spec中,有一个字段名为位podManagementPolicy,可选策略为OrderedReady和Parallel,默认为前者。
OrderReady:扩缩容按照order顺序执行。扩容时,必须前面序号的Pod都ready了,才能扩下一个;缩容时,按照倒序删除。
Parallel:并行扩缩容,不需要等前面Pod都ready或删除后再处理下一个。
图片.png

 发布模拟
图片.png

 StatefulSet注意事项
1.还在beta状态,需要kubernetes v1.5版本以上才支持
2.所有Pod的Volume必须使用PersistentVolume或者是管理员事先创建好
3.为了保证数据安全,删除StatefulSet时不会删除Volume
4.StatefulSet需要一个Headless Service来定义DNS domain,需要在StatefulSet之前创建好
5.目前StatefulSet还没有feature complete,比如更新操作还需要手动patch。

|资料来源|

名词定义:https://www.kubernetes.org.cn/statefulset
技术特点:https://www.kubernetes.org.cn/statefulset

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
存储 Kubernetes 网络协议
【K8S系列】深入解析StatefulSet(一)
【K8S系列】深入解析StatefulSet(一)
157 1
|
6月前
|
存储 应用服务中间件 nginx
kubernetes Statefulset控制器
kubernetes Statefulset控制器
|
6月前
|
存储 Kubernetes 负载均衡
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
【Kubernetes系统原理、核心资源、Pod原理与创建及生命周期管理、Job、Cronjob、Statefulset、Service负载均衡Ingress】
356 2
|
4月前
|
存储 Kubernetes 网络协议
k8s学习-StatefulSet(模板、更新、扩缩容、删除等)
k8s学习-StatefulSet(模板、更新、扩缩容、删除等)
129 0
|
6月前
|
存储 Kubernetes 数据库
剖析 Kubernetes 控制器:Deployment、ReplicaSet 和 StatefulSet 的功能与应用场景
剖析 Kubernetes 控制器:Deployment、ReplicaSet 和 StatefulSet 的功能与应用场景
214 0
|
9月前
|
Kubernetes Go Docker
【k8s 系列】k8s 学习二十六-3,Statefulset 实战 1
上一部分与大家分享到 Statefulset 与 RplicaSet 的区别,以及 Statefulset 的特点,能做的一些事情及一些注意事项
|
4月前
|
Kubernetes NoSQL MongoDB
k8s教程(pod篇)-使用StatefulSet搭建MongoDB集群
k8s教程(pod篇)-使用StatefulSet搭建MongoDB集群
457 1
|
6月前
|
存储 Kubernetes 网络协议
【K8S系列】深入解析StatefulSet(二)
【K8S系列】深入解析StatefulSet(二)
31 0
|
9月前
|
Kubernetes 索引 Perl
【k8s 系列】k8s 学习二十六-5,Statefulset 实战 3
上一部分我们说到如何使用 Statefulset 部署有状态的应用,Statefulset 可以做到部署的 每一个 pod 能够独立的拥有一个持久卷声明和持久卷
|
9月前
|
存储 Kubernetes 索引
【k8s 系列】k8s 学习二十六-2,Statefulset 部署应用
上一部分我们分享到了使用 RS 没有办法让自己管理的多个 pod 都有一个独立的持久化声明,RS 没有办法在指定模板中对不同的 pod 做差异化处理
116 0

推荐镜像

更多