statefulset的数据持久化介绍
admin
2023-03-25 19:21:38
0

一:Statefulset

StatefulSet是为了解决有状态服务的问题,对应的Deployment和ReplicaSet是为了无状态服务而设计,其应用场景包括:
1.稳定的持久化存储,即Pod重新调度后还是能访问到相同的持久化数据,基于PVC来实现
2.稳定的网络标志,即Pod重新调度后其PodName和HostName不变,基于Headless Service(即没有Cluster IP的Service)来实现
3.有序部署,有序扩展,即Pod是有顺序的,在部署或者扩展的时候要依据定义的顺序依次依次进行(即从0到N-1,在下一个Pod运行之前所有之前的Pod必须都是Running和Ready状态),基于init containers来实现
4.有序收缩,有序删除(即从N-1到0)

因为statefulset要求Pod的名称是有顺序的,每一个Pod都不能被随意取代,也就是即使Pod重建之后,名称依然不变。为后端的每一个Pod去命名。

从上面的应用场景可以发现,StatefulSet由以下几部分组成:
1.用于定义网络标志的Headless Service(headless-svc:无头服务。因为没有IP地址,所以它不具备负载均衡的功能了。)
2.用于创建PersistentVolumes的volumeClaimTemplates
3.定义具体应用的StatefulSet

StatefulSet:Pod控制器。
RC、RS、Deployment、DS。 无状态的服务。
template(模板):根据模板创建出来的Pod,它们的状态都是一模一样的(除了名称、IP、域名之外)
可以理解为:任何一个Pod,都可以被删除,然后用新生成的Pod进行替换。

有状态的服务:需要记录前一次或者多次通信中的相关时间,以作为下一次通信的分类标准。比如:MySQL等数据库服务。(Pod的名称,不能随意变化。数据持久化的目录也是不一样,每一个Pod都有自己独有的数据持久化存储目录。)

每一个Pod-----对应一个PVC-----每一个PVC对应一个PV。

测试:要求
二、以自己的名称创建一个名称空间,以下所有资源都运行在此空间中。
用statefuset资源运行一个httpd  web服务,要求3个Pod,但是每个Pod的主界面内容不一样,并且都要做专有的数据持久化,尝试删除其中一个Pod,查看新生成的Pod,是否数据与之前一致。

1.基于NFS服务,创建NFS服务。

1.[root@master ~]# yum -y install nfs-utils rpcbind  2.[root@master ~]# mkdir /nfsdata  
br/>4./nfsdata  *(rw,sync,no_root_squash)  
5.[root@master ~]# systemctl start nfs-server.service   
br/>1.[root@master yaml]# kubectl apply -f nfs-deployment.yaml   
br/>1.[root@master yaml]# kubectl apply -f sc.yaml   
br/>1.[root@master yaml]# kubectl apply -f statefulset.yaml   
4.[root@master yaml]# kubectl get pod -n lbs-test   
br/>3.statefulset.apps/statefulset-test created  
4.[root@master yaml]# kubectl get pod -n lbs-test   
6.nfs-client-provisioner-5d88975f6d-wdbnc   1/1     Running   0          22m  
7.statefulset-test-0                        1/1     Running   0          8m59s  
8.statefulset-test-1                        1/1     Running   0          2m30s  
9.statefulset-test-2                        1/1     Running   0          109s 
 

**查看是否自动创建PV及PVC**
PV:
1.[root@master yaml]# kubectl get pv -n lbs-test   
2.NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                              STORAGECLASS   REASON   AGE  
3.pvc-0454e9ad-892f-4e39-8dcb-79664f65d1e5   100Mi      RWO            Delete           Bound    lbh-test/test-statefulset-test-2   sc-nfs                  4m23s  
4.pvc-2cb98c60-977f-4f3b-ba97-b84275f3b9e5   100Mi      RWO            Delete           Bound    lbh-test/test-statefulset-test-0   sc-nfs                  11m  
5.pvc-99137753-ccd0-4524-bf40-f3576fc97eba   100Mi      RWO            Delete           Bound    lbh-test/test-statefulset-test-1   sc-nfs                  5m4s  

PVC:
1.[root@master yaml]# kubectl get pvc -n lbs-test   
2.NAME                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE  
3.test-statefulset-test-0   Bound    pvc-2cb98c60-977f-4f3b-ba97-b84275f3b9e5   100Mi      RWO            sc-nfs         13m  
4.test-statefulset-test-1   Bound    pvc-99137753-ccd0-4524-bf40-f3576fc97eba   100Mi      RWO            sc-nfs         6m42s  
5.test-statefulset-test-2   Bound    pvc-0454e9ad-892f-4e39-8dcb-79664f65d1e5   100Mi      RWO            sc-nfs         6m1s  

查看是否创建持久化目录:
1.[root@master yaml]# ls /nfsdata/  
2.lbh-test-test-statefulset-test-0-pvc-2cb98c60-977f-4f3b-ba97-b84275f3b9e5  
3.lbh-test-test-statefulset-test-1-pvc-99137753-ccd0-4524-bf40-f3576fc97eba  
4.lbh-test-test-statefulset-test-2-pvc-0454e9ad-892f-4e39-8dcb-79664f65d1e5  

6.在pod资源内创建数据。并访问测试。

1.[root@master yaml]# cd /nfsdata/  
2.[root@master nfsdata]# echo 111 > lbs-test-test-statefulset-test-0-pvc-2cb98c60-977f-4f3b-ba97-b84275f3b9e5/index.html  
3.[root@master nfsdata]# echo 222 > lbs-test-test-statefulset-test-1-pvc-99137753-ccd0-4524-bf40-f3576fc97eba/index.html  
4.[root@master nfsdata]# echo 333 > lbs-test-test-statefulset-test-2-pvc-0454e9ad-892f-4e39-8dcb-79664f65d1e5/index.html  
5.[root@master nfsdata]# kubectl get pod -o wide -n lbs-test   
6.NAME                                      READY   STATUS    RESTARTS   AGE     IP           NODE     NOMINATED NODE   READINESS GATES  
7.nfs-client-provisioner-5d88975f6d-wdbnc   1/1     Running   0          30m     10.244.2.2   node02                
8.statefulset-test-0                        1/1     Running   0          17m     10.244.1.2   node01                
9.statefulset-test-1                        1/1     Running   0          10m     10.244.2.3   node02                
10.statefulset-test-2                        1/1     Running   0          9m57s   10.244.1.3   node01                
11.[root@master nfsdata]# curl 10.244.1.2  
12.111  
13.[root@master nfsdata]# curl 10.244.2.3  
14.222  
15.[root@master nfsdata]# curl 10.244.1.3  
16.333  
7.删除其中一个pod,查看该pod资源的数据是否会**重新创建并存在。**
1.[root@master ~]# kubectl get pod -n lbs-test   
2.NAME                                      READY   STATUS    RESTARTS   AGE  
3.nfs-client-provisioner-5d88975f6d-wdbnc   1/1     Running   0          33m  
4.statefulset-test-0                        1/1     Running   0          20m  
5.statefulset-test-1                        1/1     Running   0          13m  
6.statefulset-test-2                        1/1     Running   0          13m  
7.[root@master ~]# kubectl delete pod -n lbs-test statefulset-test-0   
8.pod "statefulset-test-0" deleted  
**9.  删除后会重新创建pod资源**
10.[root@master ~]# kubectl get pod -n lbs-test -o wide  
11.NAME                                      READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES  
12.nfs-client-provisioner-5d88975f6d-wdbnc   1/1     Running   0          35m   10.244.2.2   node02                
13.statefulset-test-0                        1/1     Running   0          51s   10.244.1.4   node01                
14.statefulset-test-1                        1/1     Running   0          15m   10.244.2.3   node02                
15.statefulset-test-2                        1/1     Running   0          14m   10.244.1.3   node01                
**数据依旧存在。**
16.[root@master ~]# curl 10.244.1.4  
17.111  
18.[root@master ~]# cat /nfsdata/lbs-test-test-statefulset-test-0-pvc-2cb98c60-977f-4f3b-ba97-b84275f3b9e5/index.html   
19.111  

StatefulSet资源对象,针对有状态的服务的数据持久化测试完成。
通过测试,即使删除Pod,重新生成调度后,依旧能访问到之前的持久化数据。

相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...