kubernetes实践之四十二:StatefulSet
一: 前言1.使用StatefulSet的场景
a.稳定、唯一的网络标识
b.稳定、持久的存储
c.按照顺序、优雅的部署和扩容
d.按照顺序、优雅的删除和终止
e.按照顺序、自动滚动更新
2.StatefulSet的限制
a.在Kubernetes 1.9版本之前是beta版本,在Kubernetes 1.5版本之前是不提供的。
b.Pod存储由PersistentVolume(storage类或者管理员预先创建)提供。
c.删除或者缩容StatefulSet不会删除与StatefulSet关联的数据卷,这样能够保证数据的安全性。
d.当前的StatefulSets需要一个Headless服务来为Pod提供网络标识,此Headless服务需要通过手工创建。
二:存储供应模式1.静态资源供应模式,通过PV和PVC完成绑定。
2.动态资源供应模式,通过StorageClass和PVC完成资源动态绑定
三: StatefulSet Nginx 应用实例1. 创建三个pv (name分别为glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)
-
apiVersion: v1
-
kind: PersistentVolume
-
metadata:
-
name: glusterfs-nginx-0
-
namespace: default
-
spec:
-
capacity:
-
storage: 1Gi
-
accessModes:
-
- ReadWriteOnce
-
glusterfs:
-
endpoints: "glusterfs-cluster"
-
path: "k8s-volume"
-
readOnly: false
2.创建三个pvc (name分别为glusterfs-nginx-0,glusterfs-nginx-1,glusterfs-nginx-2)
-
kind: PersistentVolumeClaim
-
apiVersion: v1
-
metadata:
-
name: glusterfs-nginx-0
-
namespace: default
-
spec:
-
accessModes:
-
- ReadWriteOnce
-
resources:
-
requests:
-
storage: 1Gi
3.创建Headless服务
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: nginx
-
labels:
-
name: nginx
-
spec:
-
ports:
-
- port: 80
-
targetPort: 80
-
clusterIP: None
-
selector:
-
role: mongo
4.创建StatefulSet
-
apiVersion: apps/v1beta1
-
kind: StatefulSet
-
metadata:
-
name: nginx
-
spec:
-
serviceName: "nginx"
-
replicas: 3
-
template:
-
metadata:
-
labels:
-
role: nginx
-
spec:
-
terminationGracePeriodSeconds: 10
-
containers:
-
- name: nginx
-
image: nginx
-
ports:
-
- containerPort: 80
-
volumeMounts:
-
- name: glusterfs
-
mountPath: /usr/share/nginx/html
-
volumeClaimTemplates:
-
- metadata:
-
name: glusterfs
-
spec:
-
accessModes: ["ReadWriteOnce" ]
-
resources:
-
requests:
-
storage: 1Gi
四:备注1.StatfuleSet Pod拥有一个唯一的身份标识,它由顺序、稳定的网络标识和稳定的存储所组成。此身份标识一直跟随着Pod,不过它被调度到那个Node上。
2.对于拥有N个副本集的StatefulSet,在StatefulSet中的每一个Pod都会被指派一个整型的序数,此序数在0和N之间,在整个集合中是唯一的。
3.在StatefulSet中,每一个Pod的主机名称都由StatefulSet的名称和序数所组成。Pod的主机名称的格式:$(statefulset name)-$(ordinal)。如果创建了三个Pod,这他们的主机名称为web-0,web-1,web-2。StatefulSet能够使用Headless服务来控制Pod的域。Service管理的域的格式为:$(service name).$(namespace).svc.cluster.local,cluster.local是集群域。对于每一个被创建的Pod,它将得到一个DNS子域,格式为: $(podname).$(governing service domain),这里的管理服务在StatefulSet中,通过serviceName设置。
文章标题:kubernetes实践之四十二:StatefulSet
标题URL:
http://dzwzjz.com/article/jephhg.html