Kubernetes NFS应用场景:PVC 与 StatefulSet 持久化实践

来自AI助手的总结
NFS可通过PVC和StatefulSet为K8S提供持久共享存储。
Kubernetes NFS应用场景:PVC 与 StatefulSet 持久化实践

一、NFS在K8S中的应用场景

1.1 在PVC中调用StorageClass


# 定义pvc

[root@master01 2]# vim test-pvc.yaml

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: test-pvc

spec:

  storageClassName: nfs-storage #指定通过哪个StorageClass创建

  accessModes:

    - ReadWriteMany

  resources:

    requests:

      storage: 500Mi

# 应用

[root@master01 2]# kaf test-pvc.yaml

# 查看pv,pvc

[root@master01 2]# kg pvc

NAME       STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE

test-pvc   Bound    pvc-6fd5ccf3-e243-40e4-9ed0-3556fc06e43a   500Mi      RWX            nfs-storageclass   15s

[root@master01 2]# kg pv

NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM              STORAGECLASS       REASON   AGE

pvc-6fd5ccf3-e243-40e4-9ed0-3556fc06e43a   500Mi      RWX            Delete           Bound    default/test-pvc   nfs-storageclass            73s

1.2 在StatefulSet控制器中调用StorageClass

需求:使用statfulset部署nginx,每个pod使用不同的pvc存储数据


# 定义yaml文件

[root@master01 2]# vim nginx-statfuleset-pvc.yaml

apiVersion: apps/v1

kind: StatefulSet

metadata:

  name: nginx-storage-stat

spec:

  replicas: 3

  serviceName: "nginx"

  selector:

    matchLabels:

      app: nginx

  template:

    metadata:

      labels:

        app: nginx

    spec:

      containers:

      - name: nginx

        image: registry.cn-hangzhou.aliyuncs.com/zq-demo/nginx:1.21.6

        volumeMounts:

        - name: nginx-storage-test-pvc

          mountPath: /usr/share/nginx/html

  volumeClaimTemplates: #在statfulset.spec下定义pvc模板,里面的配置参数和pvc的一致

    - metadata: #定义元数据

        name: nginx-storage-test-pvc #pvc的名称,要与volumeMounts中的名称一致

      spec: #定义属性

        storageClassName: nfs-storage #指定使用哪个storageclass

        accessModes: #访问模式为多主机可读写

        - ReadWriteMany

        resources: #分配的资源大小

          requests:

            storage: 1Gi

# 应用

[root@master01 2]# kaf nginx-statfuleset-pvc.yaml

# 查看pod

[root@master01 2]# kgp  | grep nginx-storage-stat

nginx-storage-stat-0              2/2     Running   0             34s

nginx-storage-stat-1              2/2     Running   0             28s

nginx-storage-stat-2              2/2     Running   0             24s

# 查看pvc,观察到已为每个Pod分配了pvc

[root@master01 2]# kg pvc |grep nginx-storage-test

nginx-storage-test-pvc-nginx-storage-stat-0   Bound    pvc-098095ba-8116-4036-a84d-610bd105c309   1Gi        RWX            nfs-client     97s

nginx-storage-test-pvc-nginx-storage-stat-1   Bound    pvc-6f6b6b54-f339-43bd-bf12-c8ae91b642ed   1Gi        RWX            nfs-client     91s

nginx-storage-test-pvc-nginx-storage-stat-2   Bound    pvc-c70d6988-f88a-4eab-91e1-2660e8326191   1Gi        RWX            nfs-client     87s

# 在每个pod上写入数据验证持久化

[root@master01 2]# kubectl exec -it nginx-storage-stat-0 bash

root@nginx-storage-stat-0:/# echo nginx00000000000 > /usr/share/nginx/html/nginx-storage-stat-0

root@nginx-storage-stat-0:/# exit

exit

[root@master01 2]# kubectl exec -it nginx-storage-stat-1 bash

root@nginx-storage-stat-1:/# echo nginx11111111111 > /usr/share/nginx/html/nginx-storage-stat-1

root@nginx-storage-stat-1:/# exit

exit

[root@master01 2]# kubectl exec -it nginx-storage-stat-2 bash

root@nginx-storage-stat-2:/# echo nginx22222222222 > /usr/share/nginx/html/nginx-storage-stat-2

root@nginx-storage-stat-2:/# exit

# 验证,在nfs机器上查看数据是否写入,观察到数据已成功写入

[root@node01 ~]# cat /opt/sharedata/default-nginx-storage-test-pvc-nginx-storage-stat-0-pvc-098095ba-8116-4036-a84d-610bd105c309/nginx-storage-stat-0

nginx00000000000

[root@node01 ~]# cat /opt/sharedata/default-nginx-storage-test-pvc-nginx-storage-stat-1-pvc-6f6b6b54-f339-43bd-bf12-c8ae91b642ed/nginx-storage-stat-1

nginx11111111111

[root@node01 ~]# cat /opt/sharedata/default-nginx-storage-test-pvc-nginx-storage-stat-2-pvc-c70d6988-f88a-4eab-91e1-2660e8326191/nginx-storage-stat-2

nginx22222222222

# 删除sts资源

[root@master01 2]# k delete -f nginx-statfuleset-pvc.yaml

# 重新应用并验证,观察到数据仍然存在

[root@master01 1]# kaf nginx-statfuleset-pvc.yaml

[root@master01 1]# kubectl exec -it nginx-storage-stat-0 -- cat /usr/share/nginx/html/nginx-storage-stat-0

nginx00000000000

[root@master01 1]# kubectl exec -it nginx-storage-stat-1 -- cat /usr/share/nginx/html/nginx-storage-stat-1

nginx11111111111

[root@master01 1]# kubectl exec -it nginx-storage-stat-2 -- cat /usr/share/nginx/html/nginx-storage-stat-2

nginx22222222222

# 环境复原

[root@master01 2]# k delete -f nginx-statfuleset-pvc.yaml

[root@master01 2]# k delete -f test-pvc.yaml

[root@master01 2]# k delete pvc nginx-storage-test-pvc-nginx-storage-stat-0 nginx-storage-test-pvc-nginx-storage-stat-1 nginx-storage-test-pvc-nginx-storage-stat-2

1.3 应用建议

大中小型网站(2000万/日pv以下)线上应用,门户网站也可以使用;

对于大型网站且可靠性要求较高的企业,nfs网络文件系统的替代软件为分布式文件系统ceph,fastDFS;

© 版权声明
THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容