Kubernetes--有状态应用编排:StatefulSet

Deployment认为:管理的所有同版本的pod都是一模一样的副本

StatefulSet能够比较好的满足一些有状态应用特有的要求

1、每个Pod有Order序号,会按照序号创建、删除、更新pod

2、通过配置headless service,使每个pod有唯一的网络标识(HOSTNAME)

3、通过配置pvc template,每个pod有一块独享的pv存储盘

4、支持一定数量的灰度发布

一个简单的Statefulset范例创建

# 创建service.yaml
apiVersion: v1
kind: Service    
metadata:
  name: nginx
  namespace: dev
  labels:
    app: nginx
spec: 
  ports: 
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx  


# 创建pc-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: pc-statefulset
  namespace: dev
spec:
  selector:
    matchLabels:
      app: nginx
  serviceName: "nginx"
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.17.1
        ports:
        - containerPort: 80
          name: nginx

到这,创建好了一个svc和一个statefulset,查看一下状态:

# 查看service
[root@master ~]# kubectl get svc nginx -n dev
NAME    TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
nginx   ClusterIP   None         <none>        80/TCP    3h4m

# 查看一下ip
[root@master ~]# kubectl get endpoints nginx -n dev
NAME    ENDPOINTS                                                           AGE
nginx   10.244.169.183:80,10.244.169.184:80,10.244.169.185:80 + 3 more...   2s

# 查看创建的statefulset
[root@master ~]# kubectl get sts -n dev
NAME             READY   AGE
pc-statefulset   3/3     85m

# 查看sts创建的pod
[root@master ~]# kubectl get pod -n dev -o wide        
pc-statefulset-0        1/1     Running   1 (6m21s ago)   87m    10.244.169.185   k8s-node2   <none>           <none>
pc-statefulset-1        1/1     Running   1 (6m21s ago)   87m    10.244.169.183   k8s-node2   <none>           <none>
pc-statefulset-2        1/1     Running   1 (6m7s ago)    87m    10.244.36.90     k8s-node1   <none>           <none>

Pod版本

        不同于Deployment使用ReplicaSet来管理版本和维持副本数,Statefulset controller直接管理下属的pod,而pod中用一个label来标识版本:controller-revision-hash

[root@master ~]# kubectl get pod -L controller-revision-hash -n dev
NAME                    READY   STATUS    RESTARTS        AGE     CONTROLLER-REVISION-HASH
demo-cloneset-bc6jq     1/1     Running   6 (6m13s ago)   2d4h    demo-cloneset-7b4f8f8579
demo-cloneset-gnd5c     1/1     Running   6 (5m55s ago)   2d4h    demo-cloneset-7b4f8f8579
demo-cloneset-vzg4j     1/1     Running   6 (6m32s ago)   2d4h    demo-cloneset-7b4f8f8579
nginx-f87cbb8b5-6xf6p   1/1     Running   2 (28m ago)     10h     
pc-statefulset-0        1/1     Running   0               3m34s   pc-statefulset-589995765c
pc-statefulset-1        1/1     Running   0               3m3s    pc-statefulset-589995765c

管理模式

Statefulset会创建管理的资源:

● ControllerRevision:通过这个资源,Statefulset可以很方便的管理不同版本的template模板

● PVC:如果在Statefulset中定义了volumeClaimTemplates,Statefulset会在创建Pod之前,先根据这个模板创建PVC,并把PVC加到Pod volume中。

● Pod:Statefulset按照顺序创建、删除、更新Pod,每个Pod有唯一的序号

扩缩容管理策略

Statefulset.spec中,有一个字段名为podManagementPolicy,可选策略为OrderedReady和Parallel,默认为前者:

● OrderedReady: 扩缩容按照order顺序执行,扩容时,必须前面序号的Pod都ready了,才能扩下一个,缩容时,按照倒序删除

● Parallel:并行扩缩容,不需要等待前面Pod都ready或删除后再删除下一个

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值