使用 NFS 作为K8S后端存储

PV的全称是:PersistentVolume(持久化卷),是对底层的共享存储的⼀种抽象,PV由管理员进⾏创建和配置,它和具体的底的共享存储技术的实现⽅式有关,⽐如Ceph、GlusterFS、NFS等,都是通过插件机制完成与共享存储的对接。

PVC的全称是:PersistentVolumeClaim(持久化卷声明),PVC是⽤户存储的⼀种声明,PVC和Pod⽐较类似,Pod消耗的是节点,PVC消耗的是PV资源,Pod可以请求CPU和内存,⽽PVC可以请求特定的存储空间和访问模式。对于真正使⽤存储的⽤户不需要关⼼底层的存储实现细节,只需要直接使⽤PVC即可。

使用 NFS 创建 PV、PVC

1、在NFS(192.168.2.3)服务器创建目录/home/k8s-nfs, 并共享这个目录。

[root@nfs-server ~]# cat /etc/exports
/home/k8s-nfs *(rw,sync,no_root_squash)

[root@nfs-server ~]# exportfs -avr
exporting *:/home/k8s-nfs

[root@nfs-server ~]# mkdir -p /home/k8s-nfs/pv01

2、创建pv
创建pv01.yaml文件

[root@master ~]# mdkir nfs-pv-pvc
[root@master ~]# cd nfs-pv-pvc
[root@master nfs-pv-pvc]# cat pv01.yaml 
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01
spec:
  capacity:
    storage: 1Gi
  volumeMode: Filesystem
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: slow
  mountOptions:
  - hard
  - nfsvers=3
  nfs:
    path: /home/k8s-nfs/pv01
    server: 192.168.2.3

AccessModes(访问模式)
AccessModes 是⽤来对PV进⾏访问模式的设置,⽤于描述⽤户应⽤对存储资源的访问权限,访问权限包括下⾯⼏种⽅式:
ReadWriteOnce(RWO):读写权限,但是只能被单个节点挂载
ReadOnlyMany(ROX):只读权限,可以被多个节点挂载
ReadWriteMany(RWX):读写权限,可以被多个节点挂载
注意:⼀些 PV 可能⽀持多种访问模式,但是在挂载的时候只能使⽤⼀种访问模式,多种访问模式是不会⽣效的。

创建pv

[root@master nfs-pv-pvc]# kubectl apply -f pv01.yaml 
persistentvolume/pv01 created

查看pv

[root@master nfs-pv-pvc]# kubectl get pv 
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM                STORAGECLASS          REASON   AGE
pv01                                       1Gi        RWO            Recycle          Available                        slow                           5s

2、创建pvc
创建pvc01.yaml文件

[root@master nfs-pv-pvc]# cat pvc01-yaml 
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc01
spec:
  accessModes:
  - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 1Gi
  storageClassName: slow

创建pvc

[root@master nfs-pv-pvc]# kubectl apply -f pvc01-yaml 
persistentvolumeclaim/pvc01 created

查看pvc

[root@master nfs-pv-pvc]# kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS          REASON   AGE
persistentvolume/pv01                                       1Gi        RWO            Recycle          Bound    default/pvc01        slow                           6m11s

NAME                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS          AGE
persistentvolumeclaim/pvc01        Bound    pv01                                       1Gi        RWO            slow                  2m56s

3、创建一个pod,并挂载这个pvc
创建pod01.yaml 文件

[root@master nfs-pv-pvc]# cat pod01.yaml 
kind: Pod
apiVersion: v1
metadata:
  name: pod-01
spec:
  containers:
  - name: pod-01
    image: busybox:1.24
    command:
      - "/bin/sh"
    args:
      - "-c"
      - "touch /mnt/SUCCESS && exit 0 || exit 1"
    volumeMounts:
      - name: nfs-pvc
        mountPath: "/mnt"
  restartPolicy: "Never"
  volumes:
    - name: nfs-pvc
      persistentVolumeClaim:
        claimName: pvc01

创建pod

[root@master nfs-pv-pvc]# kubectl apply -f pod01.yaml 

查看pod

[root@master nfs-pv-pvc]# kubectl get pod
NAME                                     READY   STATUS      RESTARTS   AGE
pod-01                                   0/1     Completed   0          100s

4、查看验证:
在nfs服务器 /home/k8s-nfs/pv01/目录会创建一个SUCCESS文件

[root@nfs-server ~]# ls /home/k8s-nfs/pv01/
SUCCESS
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐