一、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;