CC00194.CloudKubernetes——|KuberNetes&持久存储.V07|——|PV&PVC.v03|挂载NFS类型PV|

一、PV&PVC挂载NFS类型PV
### --- 创建了一个NFS的PV配置文件

~~~     # 创建挂载目录
[root@k8s-node01 ~]# mkdir  -p /data/testDir
### --- 查看NFS服务端主机IP地址

[root@k8s-node01 ~]# ip addr
ens33: inet 192.168.1.14/24
### --- 书写nfs类型pv的yaml文件

[root@k8s-master01 ~]# vim nfs-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv0001
spec:
  capacity:
    storage: 5Gi                    # 容量
  volumeMode: Filesystem
  accessModes:
    - ReadWriteMany                 # 多点读写,读写类型
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: nfs-slow                
  mountOptions:                     # 可以不写的
    - hard
    - nfsvers=4.1
  nfs:
    path: /data/k8s-data/testDir    # 挂载目录
    server: 192.168.1.14            # NFSserver地址
二、创建一个PV
### --- 创建PV

[root@k8s-master01 ~]# kubectl create -f nfs-pv.yaml 
persistentvolume/pv0001 created
### --- 查看PV的状态
~~~     # 若是使用者想要使用这个PV,需要创建一个PVC去申请
~~~     注:现在的状态是Available,
~~~     注:PV的状态:

 [root@k8s-master01 ~]# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
pv0001   5Gi        RWX            Recycle          Available           nfs-slow                13s
    Available:                  // 空闲的PV,没有被任何PVC绑定。
    Bound:                      // 已经被PVC绑定
    Released:                   // PVC被删除,但是资源未被重新使用
    Failed:                     // 自动回收失败。
三、创建一个PVC,绑定到指定类型的PV:配置文件
[root@k8s-master01 ~]# vim nfs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: myclaim
spec:
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 2Gi
  storageClassName: nfs-slow
### --- 注释:

  name: myclaim                     // 这个名称可以随便写,是PVC的名称
  accessModes:
    - ReadWriteMany                 // 读写类型
      storage: 2Gi                  // 存储是要比PV的空间要小,不可以比它高
  storageClassName: nfs-slow        // 要和PV的ClassName保持一致。
四、创建PVC
### --- 创建PVC

[root@k8s-master01 ~]# kubectl create -f nfs-pvc.yaml 
persistentvolumeclaim/myclaim created
### --- 查看创建的PVC 
~~~     注:创建完成之后直接绑定到PV0001了
~~~     状态;它的状态也变成了Bound,我们查看一下PV的状态

[root@k8s-master01 ~]# kubectl get pvc
NAME      STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    pv0001   5Gi        RWX            nfs-slow       7s
### --- 此刻Pod就可以直接使用它了
~~~     注:PV的状态也变成了Bound,
~~~     CLAIM:绑定的PVC是谁。

[root@k8s-master01 ~]# kubectl get pv
NAME     CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM             STORAGECLASS   REASON   AGE
pv0001   5Gi        RWX            Recycle          Bound    default/myclaim   nfs-slow
五、Pod去使用这个PVC;创建nfs.pv.pvc.yaml配置文件
### --- 创建所使用的Pod的yaml文件

[root@k8s-master01 ~]# vim demo-nginx.nfs.pv.pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "15"
  creationTimestamp: "2020-03-16T14:36:14Z"
  generation: 16
  labels:
    app: demo-nginx
  name: demo-nginx
  namespace: default
  resourceVersion: "2644673"
  selfLink: /apis/apps/v1/namespaces/default/deployments/demo-nginx
  uid: ca0c135f-31a3-464c-b1f2-10f88e9f1c90
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: demo-nginx
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 1
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: demo-nginx
    spec:
      containers:
      - command:
        - sh
        - -c
        - sleep 36000000000
        image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx2
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /mnt
          name: cache-volume
        - mountPath: /tmp/nfs
          name: nfs-test
      - command:
        - sh
        - -c
        - sleep 36000000000
        image: nginx
        imagePullPolicy: IfNotPresent
        name: nginx
        ports:
        - containerPort: 80
          name: web
          protocol: TCP
        resources:
          limits:
            cpu: 100m
            memory: 270Mi
          requests:
            cpu: 100m
            memory: 70Mi
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /etc/nginx/nginx.conf
          name: config-volume
          subPath: etc/nginx/nginx.conf
        - mountPath: /mnt/
          name: config-volume-non-subpath
        - mountPath: /tmp/1
          name: test-hostpath
        - mountPath: /tmp/2
          name: cache-volume
        - mountPath: /tmp/pvc
          name: pvc-test
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      shareProcessNamespace: true
      terminationGracePeriodSeconds: 30
      volumes:
      - hostPath:
          path: /etc/hosts
          type: File
        name: test-hostpath
      - configMap:
          defaultMode: 420
          items:
          - key: nginx.conf
            path: etc/nginx/nginx.conf
          name: nginx-conf
        name: config-volume
      - configMap:
          defaultMode: 420
          name: nginx-conf
        name: config-volume-non-subpath
      - emptyDir:
          medium: Memory
        name: cache-volume
      - name: nfs-test
        nfs:
          path: /data/k8s-data/testDir
          server: 192.168.1.14
      - name: pvc-test
        persistentVolumeClaim:
          claimName: myclaim
### --- 注释说明:

~~~     # 挂载地址配置
        - mountPath: /tmp/pvc
          name: pvc-test
~~~     # NFS配置
        nfs:
          path: /data/k8s-data/testDir
          server: 192.168.1.14          
      - name: pvc-test              // 新加一个名称
        persistentVolumeClaim:      // 类型
          claimName: myclaim        // PVC的名称;要和PV绑定下PVC的人名词保持一致
### --- nfs下创建一个共享目录   
~~~     创建并授权挂载目录

[root@k8s-node01 ~]# mkdir -p /data/k8s-data/testDir
### --- 授权可以访问该共享目录的用户

[root@k8s-node01 ~]# vim /etc/exports 
/data/nfs/ 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)
/data/k8s-data/ 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash)                                                                
[root@k8s-node01 ~]# exportfs -r
[root@k8s-node01 ~]# systemctl reload nfs-server
### --- 在k8s-master01下直接挂载测试
~~~     在每个节点安装nfs的插件,不然识别不了。

[root@k8s-master01 ~]# yum install -y nfs-utils 
[root@k8s-master01 ~]# mount -t nfs 192.168.1.14:/data/k8s-data/ /mnt/
六、replace这个pod,给nginx去挂载这个PVC;验证结果
### --- 查看pod

[root@k8s-master01 ~]# kubectl create -f demo-nginx.nfs.pv.pvc.yaml 
deployment.apps/demo-nginx created
[root@k8s-master01 ~]# kubectl get po -owide
NAME                          READY   STATUS    RESTARTS   AGE    IP               NODE           NOMINATED NODE   READINESS GATES
busybox                       1/1     Running   121        9d     172.25.244.211   k8s-master01   <none>           <none>
demo-nginx-67ff7f7bb5-cvfjn   2/2     Running   0          4m3s   172.27.14.221    k8s-node02     <none>           <none>
demo-nginx-67ff7f7bb5-rvvcp   2/2     Running   0          4m3s   172.25.92.83     k8s-master02   <none>           <none>
### --- 进入容器

[root@k8s-master01 ~]# kubectl exec -ti demo-nginx-67ff7f7bb5-rvvcp -c nginx -- bash
root@demo-nginx-67ff7f7bb5-rvvcp:/# df -Th
192.168.1.14:/data/k8s-data/testDir nfs4      95G  3.8G   92G   4% /tmp/pvc
### --- 写入文件

root@demo-nginx-67ff7f7bb5-rvvcp:/# echo ****yanqi_pv.test**** >> /tmp/pvc/yanqi_pv+pvc.test
### --- 在nfs服务端查看文件是否写入同步
~~~     文件已经同步完成。说明这个NFS挂载成功。 

[root@k8s-node01 ~]# cat /data/k8s-data/testDir/yanqi_pv+pvc.test 
****yanqi_pv.test****
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值