上一文已经说到了Linux的nfs服务,本文是将nfs服务应用到k8s上。
在这里要先理解好为什么需要nfs服务?
因为NFS 是一个网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源,这样子就可以帮助我们解决k8是数据储存的问题。k8s是容器编排系统,容器就涉及到cpu,内存,硬盘等调度分配,nfs就是k8s储存的一个解决方案
理解k8s的pv/pvc
关于pvc
1.accessMode:访问模型;对象列表:
- ReadWriteOnce – the volume can be mounted as read-write by a single node: RWO - ReadWriteOnce一人读写
- ReadOnlyMany – the volume can be mounted read-only by many nodes: ROX - ReadOnlyMany 多人只读
- ReadWriteMany – the volume can be mounted as read-write by many nodes: RWX - ReadWriteMany多人读写
2.resource:资源限制(比如:定义5GB空间,我们期望对应的存储空间至少5GB。)
3.selector:标签选择器。不加标签,就会在所有PV找最佳匹配。
4.storageClassName:存储类名称:
5.volumeMode:指后端存储卷的模式。可以用于做类型限制,哪种类型的PV可以被当前claim所使用。
6.volumeName:卷名称,指定后端PVC(相当于绑定)
PV和PVC是一一对应关系,当有PV被某个PVC所占用时,会显示banding,其它PVC不能再使用绑定过的PV。
PVC一旦绑定PV,就相当于是一个存储卷,此时PVC可以被多个Pod所使用。(PVC支不支持被多个Pod访问,取决于访问模型accessMode的定义)。
PVC若没有找到合适的PV时,则会处于pending状态。
PV是属于集群级别的,不能定义在名称空间中,而PVC时属于名称空间级别的
PV的reclaim policy选项:
- 默认是Retain保留,保留生成的数据。
- 可以改为recycle回收,删除生成的数据,回收pv
- delete,删除,pvc解除绑定后,pv也就自动删除。
现在开始编写pv vim mypv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv001
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
nfs:
path: /home/nfs
server: 192.168.0.159
应用该pv
[root@master pv]# kubectl create -f mypv.yaml
[root@master pv]# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv001 10Gi RWX Retain Bound default/myclaim 4h20m
编写pvc vim mypvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
应用pvc kubectl create -f mypvc.yaml
[root@master pv]# kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
myclaim Bound pv001 10Gi RWX 4h35m
编写pod 的yaml, vim myapp.yaml
apiVersion: v1
kind: Pod
metadata:
name: myapp-demo
namespace: default
spec:
containers:
- name: myapp
image: ikubernetes/myapp:v1
imagePullPolicy: IfNotPresent
ports:
- name: html
containerPort: 80
volumeMounts:
- name: nfs
mountPath: "/usr/share/nginx/html"
volumes:
- name: nfs
persistentVolumeClaim:
claimName: myclaim #绑定之前创建好的pvc
创建pod并查看状态
[root@master pv]# kubectl create -f myapp.yaml
[root@master pv]# kubectl get pods -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
myapp-demo 1/1 Running 0 77m 10.244.2.24 node2 <none> <none>
测试 进入到/home/nfs目录 编写测试文件
[root@master pv]# cd /home/nfs/
[root@master nfs]# ll
总用量 0
[root@master nfs]# vim index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1>hello world!</h1>
</body>
</html>
访问
[root@master nfs]# curl 10.244.2.24
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<h1>hello world!</h1>
</body>
</html>
k8s pv/pvc 的简单使用验证成功










网友评论