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
赞(7)
未经允许不得转载:工具盒子 » k8s statefulset (StatefulSet控制器资源实战)