statefulset控制器
前言
statefulset控制器用于部署无状态应用,所谓无状态应用简单理解就是各个节点存在主从关系,如ZK集群存在leader、fllower,mysql集群的master和slave,他们各个独立有序运行,有单独的存储,这里存储就要用到前面咱们学习的PV/PVC。
一、statefulset控制器
特点:
- 部署有状态应用(deployment部署都是无状态应用)
- 解决Pod独立生命周期,保持Pod启动顺序和唯一性
- 稳定,唯一的网络标识符,持久存储
- 有序,优雅的部署和扩展、删除和终止
- 有序,滚动更新
应用场景:分布式应用、数据库集群
K8s中实现statefulset控制器两个必备条件,网络和存储
-
稳定的网络ID
使用Headless Service(相比普通Service只是将spec.clusterIP定义为None)来维护Pod网络身份。
并且添加serviceName: "nginx"字段指定StatefulSet控制器要使用这个Headless Service。
DNS解析名称:...svc.cluster.local -
稳定的存储
StatefulSet的存储卷使用VolumeClaimTemplate创建,称为卷申请模板,当StatefulSet使用
VolumeClaimTemplate创建一个PersistentVolume时,同样也会为每个Pod分配并创建一个编号的PVC。
二、示例
# cat statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web-statefulset
spec:
selector:
matchLabels:
app: nginx1 # has to match .spec.template.metadata.labels
serviceName: "nginx-svc" # match service
replicas: 2 # by default is 1
template:
metadata:
labels:
app: nginx1 # has to match .spec.selector.matchLabels
spec:
terminationGracePeriodSeconds: 10
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www-volume
mountPath: /usr/share/nginx/html
volumeClaimTemplates:

本文详细介绍了Kubernetes中的StatefulSet控制器,包括其特点、应用场景、部署示例以及与Deployment的区别。重点讨论了如何使用HeadlessService和VolumeClaimTemplate来实现稳定网络和持久化存储。还以Consul为例展示了StatefulSet的实际应用。
最低0.47元/天 解锁文章
843

被折叠的 条评论
为什么被折叠?



