Kubernetes - 4.5 Workload - StatefulSet
什么是StatefulSet?
StatefulSet表示一组具有唯一持久身份标识和稳定主机名的有状态Pod,无论Pod在哪一个Node上运行,身份标识及持久化的数据其都会保留。一般用于持久化存储、固定网络标记、有序部署、有伸缩等场景。
什么是有状态应用?
有状态应用是将数据或应用程序状态持久化到关联的存储中,例如MySQL、Kafka、Zookeeper等应用场景,需要对其进行唯一持久身份的标识及数据的永久保存到存储中。
StatefulSet操作
像Deployment一样StatefulSet管理基于相同容器规范的Pod。但唯一不同的是StatefulSet为其每个Pod维护一个标识身份,StatefulSet需要Headless Service来负责Pod的网络身份。每个Pod具有一个存储类及存储声明,无论Pod被调度到哪一个节点,相关的存储挂载将伴随Pod。在删除Pod或者Stateful时,不会删除掉关联的PersistentVolume及PersistentVolumes。
通过yaml资源定义清单创建
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
ports:
- port: 80
clusterIP: None
selector:
app: nginx
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: "nginx"
replicas: 3
template:
metadata:
labels:
app: nginx
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx:1.16
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
查看StatefulSet列表kubectl get statefulset
查看StatefulSet描述信息kubectl describe statefulset
StatefulSet更新策略
通过指定 spec: updateStrategy
中定义的更新策略来确定如何处理更新。
OnDelete: 当手动删除旧的Pod时新的Pod才会被自动被创建。
RollingUpdate: 默认的更新策略。旧的Pod自动被删除,新的Pod也自动创建。
分区
通过指定 .spec.updateStrategy.rollingUpdate.partition
中定义的来对 RollingUpdate 更新策略进行分区,如果指定了分区,则当 StatefulSet 的 .spec.template 更新时,具有大于或等于分区序数的所有 Pod 将被更新。具有小于分区的序数的所有 Pod 将不会被更新,即使删除它们也将被重新创建。
如果 StatefulSet 的 .spec.updateStrategy.rollingUpdate.partition 大于其 .spec.replicas,则其 .spec.template 的更新将不会传播到 Pod。一般情况下不需要使用分区,在金丝雀、预发布等场景下是比较有用的。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
k8s拉取私库镜像
创建阿里云私有Registry 参考阿里云官方文档,仓库名称:express-apppull地址:registry.cn-hangzhou.aliyuncs.com/neibo/express-app 将镜像推送到Registry docker login --username=内博科技 registry.cn-hangzhou.aliyuncs.com docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/neibo/express-app:[镜像版本号] docker push registry.cn-hangzhou.aliyuncs.com/neibo/express-app:[镜像版本号] 备注:即修改镜像名称和tag同镜像仓库一致 从Registry中拉取镜像 docker login --username=内博科技 registry.cn-hangzhou.aliyuncs.com docker pull registry.cn-hangzhou.aliyuncs.com/neibo/express-app:v1 编...
-
下一篇
Kubernetes - 4.6 Workload - DaemonSet
什么是DaemonSet? DaemonSet是部署在所有节点上用于在集群存储、日志收集、性能监控等场景。Pod的生命周期跟随节点,保证集群内的每一个(或者一些)节点都运行一组相同功能的Pod。在新的Kubernetes节点加入时,将会在节点上自动新增一个Pod,在节点移除后Pod也进行回收。 DaemonSet操作 DaemonSet使用Pod模板,此模板包含适用于其Pod的规范。Pod规范确定每个Pod的内容:应在其容器内运行的应用、应装载的卷、其标签和选择器等。 apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx spec: selector: matchLabels: name: nginx template: metadata: labels: name: nginx spec: containers: - name: nginx image: nginx:1.16 查看StatefulSet列表kubectl get daemonset查看StatefulSet描述信息kubectl describe daem...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Linux系统CentOS6、CentOS7手动修改IP地址
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果