六、k8s入门系列----StatefulSet、Headless Services、LoadBalancer Services

  这节讲下 有状态服务应用 StatefulSet 和另外两种 Service:Headless  和 LoadBalancer 。

  应用的状态有如下定义:

    • 无状态应用(Stateless Application)是指应用不会在会话中保存下次会话所需要的客户端数据。每一个会话都像首次执行一样,不会依赖之前的数据进行响应
    • 有状态的应用(Stateful Application)是指应用会在会话中保存客户端的数据,并在客户端下一次的请求中来使用那些数据     

  有状态应用关键点是可以复用原来的数据,而无状态应用每次都是新的状态。

  Deployment 和 StatefulSet 分别应用于无状态服务应用和有状态服务应用,StatefulSet 常见的应用场景:

    • 稳定的持久化存储,即POD重新调度后还是能访问到相同的持久化数据,基于PVC来实现
    • 稳定的网络标识,即POD重新调度后其PodName 和 HostName 不变,基于 Headless Service 来实现
    • 有序部署,有序扩展,即 POD 是有顺序的,在部署或者扩展的时候要依据定义的顺序依次进行(即使从0 到 N-1,在下一个Pod 运行之前所有之前的Pod必须都是Running Man和Ready状态),基于init contas来实现
    • 有序收缩,有序删除(即从 N-1 到 0)

  编写statefulset 资源配置文件,其中serviceName 为必填字段,关联一个Headless Service,其他配置跟deployment大同小异:

[root@ylserver10686071 ~]# cat statefulset.yml 
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: stateapp
  namespace: prod
spec:
  serviceName: stateapp-svc
  selector:
    matchLabels:
      k8s-app: stateapp
  replicas: 3
  template:
    metadata:
      labels:
        k8s-app: stateapp
    spec:
      containers:
      - name: stateapp
        image: tomcat:8.0
        ports:
        - name: stateapp-8080
          containerPort: 8080
          protocol: TCP

  创建statefulset资源,并查看相关信息,可以看到 Pod 的名称是按照顺序命名的,不是随机生成的:

[root@ylserver10686071 ~]# kubectl apply -f statefulset.yml 
statefulset.apps/stateapp created
[root@ylserver10686071 ~]# kubectl get statefulset -n prod -o wide
NAME       READY   AGE   CONTAINERS   IMAGES
stateapp   3/3     63s   stateapp     tomcat:8.0
[root@ylserver10686071 ~]# kubectl get pods -n prod -o wide |grep stateapp
stateapp-0                      1/1     Running   0          60s   10.233.72.43   ylserver10686073   <none>           <none>
stateapp-1                      1/1     Running   0          48s   10.233.67.38   ylserver10686072   <none>           <none>
stateapp-2                      1/1     Running   0          33s   10.233.75.66   ylserver10686071   <none>           <none>
[root@ylserver10686071 ~]# 

  

上一篇:自定义Kubernetes调度程序来编排高可用性应用程序


下一篇:K8S--有状态服务存储及部署(PV&PVC&StatefulSet&StrogeClass)