51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

k8s statefulset (StatefulSet控制器资源实战)

k8s statefulset

以Nginx的为例,当任意一个Nginx挂掉,其处理的逻辑是相同的,即仅需重新创建一个Pod副本即可,这类服务我们称之为无状态服务。

以MySQL主从同步为例,master,slave两个库任意一个库挂掉,其处理逻辑是不相同的,这类服务我们称之为有状态服务。

有状态服务面临的难题:
	(1)启动/停止顺序;
	(2)pod实例的数据是独立存储;
	(3)需要固定的IP地址或者主机名;

StatefulSet一般用于有状态服务,StatefulSets对于需要满足以下一个或多个需求的应用程序很有价值。

	(1)稳定唯一的网络标识符。
	(2)稳定独立持久的存储。
	(4)有序优雅的部署和缩放。
	(5)有序自动的滚动更新。

稳定的网络标识:

其本质对应的是一个service资源,只不过这个service没有定义VIP,我们称之为headless service,即"无头服务"。
通过"headless service"来维护Pod的网络身份,会为每个Pod分配一个数字编号并且按照编号顺序部署。
综上所述,无头服务("headless service")要求满足以下两点:
(1)将svc资源的clusterIP字段设置None,即"clusterIP: None";
(2)将sts资源的serviceName字段声明为无头服务的名称;

独享存储:

Statefulset的存储卷使用VolumeClaimTemplate创建,称为"存储卷申请模板"。
当sts资源使用VolumeClaimTemplate创建一个PVC时,同样也会为每个Pod分配并创建唯一的pvc编号,每个pvc绑定对应pv,从而保证每个Pod都有独立的存储。

StatefulSet控制器资源实战

cat 02-sts-network-volumes.yaml

apiVersion: v1
kind: Service
metadata:
  name: sts-svc
spec:
  clusterIP: None
  type: ClusterIP
  selector:
    apps: v1
  ports:
  - port: 80
    targetPort: 80

apiVersion: apps/v1 kind: StatefulSet metadata: name: baimei-sts-all spec: replicas: 3

指定无头服务(headless Service)

serviceName: sts-svc selector: matchExpressions: - key: apps values: - "v1" operator: In

定义卷申请模板

volumeClaimTemplates:

  • spec: storageClassName: managed-nfs-storage accessModes:
    • ReadWriteMany resources: requests: storage: 2M metadata: name: data template: metadata: labels: apps: v1 school: baimei spec: containers:
    • name: v1 image: harbor.baimei.com/baimei-apps/apps:v1 volumeMounts:
      • name: data mountPath: /usr/share/nginx/html
赞(8)
未经允许不得转载:工具盒子 » k8s statefulset (StatefulSet控制器资源实战)