k8s:PVC 的使用

PVC 的使用

在我们真正使用的时候是使用的 PVC,就类似于我们的服务是通过 Pod 来运行的,而不是 Node,只是 Pod 跑在Node 上而已,

准备工作

在使用 PVC 之前,我们还得把其他节点上的 nfs 客户端给安装上

我们需要在所有节点安装 nfs 客户端程序,安装方法和上节课的安装方法一样的。必须在所有节点都安装 nfs 客户端,否则可能会导致 PV 挂载不上的问题

新建 PVC

新建一个数据卷声明,请求 1Gi 的存储容量,访问模式也是ReadWriteOnce,YAML 文件如下:(pvc-nfs.yaml)

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1-nfs
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi

可以看到我们这里的声明方法几乎和新建 PV 是一样的,在新建 PVC 之前,我们可以看下之前创建的 PV 的状态:

[root@master ~]# kubectl  get pv
pv1                                        1Gi        RWO            Recycle          Available                                                          93m

我们可以看到当前 pv1 是在 Available 的一个状态,所以这个时候我们的 PVC 可以和这个 PV 进行绑定:

[root@master ~]# kubectl  get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
pvc-nfs          Bound    pv1                                        1Gi        RWO                                 5m13s

[root@master ~]# kubectl  get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS         REASON   AGE
pv1                                        1Gi        RWO            Recycle          Bound    default/pvc-nfs                                        97m

可以看到 PV 也是 Bound 状态了,对应的声明是 default/pvc-nfs,就是 default 命名空间下面的 pvc-nfs,证明我们刚刚新建的 pvc-nfs和我们的 pv-nfs 绑定成功了。

系统自动匹配pv\pvc
他会根据我们的声明要求去查找处于 Available 状态的 PV,如果没有找到的话那么我们的 PVC 就会一直处于 Pending 状态,找到了的话当然就会把

新建没有合适的pv看下状态会是什么样子的

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: pvc1-nfs
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  selector:
    matchLabels:
      app: nfs
[root@master ~]# kubectl  get pvc
NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
pvc2-nfs         Pending                                                                                             5s

[root@master ~]# kubectl  get pv
NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS         REASON   AGE
pv001                                      1Gi        RWO            Recycle          Bound    default/www-web-0                                      22h
pv002                                      1Gi        RWO            Recycle          Bound    default/www-web-1                                      22h
pv1                                        1Gi        RWO            Recycle          Bound    default/pvc-nfs                                        164m
pvc-558f0315-7994-4b22-a32a-c3978c7794ce   5Gi        RWX            Delete           Bound    default/www-test-pvc-0   course-nfs-storage            8d
pvc-fe7e15b0-da47-4f2c-a43a-aba53b1f8a87   1Gi        RWX            Delete           Bound    default/test-pvc         course-nfs-storage            8d

可以看到没有匹配PVC2的pv所以PVC2会一直处于pending状态,直到有符合的PV才会bound

创建一个符合PVC2的pv

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pvc2-pv
  labels:
    app: nfs
spec:
  capacity:
    storage: 2Gi
  accessModes:
  - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    server: 192.168.0.38
    path: /data/k8s
[root@master ~]# kubectl  get pv
 NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                    STORAGECLASS         REASON   AGE
 pvc2-pv                                    2Gi        RWO            Recycle          Bound    default/pvc2-nfs                                       15s

[root@master ~]# kubectl  get pvc
NAME             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS         AGE
 pvc2-nfs         Bound    pvc2-pv                                    2Gi        RWO                                 7m18s

可以看到正常绑定                 

需要注意的是不管PVC多大只要没有超过PV容量大小都正常绑定PV,PV有多大的容量空间就可以使用多大容量的空间。

使用 PVC

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pvc-nginx
spec:
  selector:
    matchLabels:
      app: pvc-nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: pvc-nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - name: web
          containerPort: 80
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
          subPath: html
      volumes:
      - name: www
        persistentVolumeClaim:
          claimName: pvc2-nfs
---
apiVersion: v1
kind: Service
metadata:
  name: pvc-nginx
spec:
  type: NodePort
  ports:
  - name: web
    port: 80
    targetPort: 80
  selector:
    app: pvc-nginx
[root@master ~]# kubectl get svc,pv,pvc
 service/pvc-nginx    NodePort    10.100.178.66    <none>        80:30054/TCP   13m
 persistentvolume/pvc2-pv                                    2Gi        RWO            Recycle          Bound    default/pvc2-nfs                                       14m
 persistentvolumeclaim/pvc2-nfs         Bound    pvc2-pv                                    2Gi        RWO                                 13m
 
[root@master k8s]# pwd
/data/k8s
[root@master k8s]# ll html/
总用量 4
-rw-r--r--. 1 root root 12 3月  13 15:45 index.html
                

访问nginx
在这里插入图片描述
注意:
删除顺序 pod>pvc>pv
如果删除PV则不影响已挂载的pod但影响新建的pod挂载
删除PVC需要看回收策略是否影响数据持久化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值