什么是pv和pvc

  • PersistentVolume(PV)持久卷,是一块集群里由管理员手动提供,或 kubernetes 通过 StorageClass 动态创建的存储。 PersistentVolumeClaim(PVC)持久卷声明,是一个满足对 PV 存储需要的请求。简单来说,可以这样理解,pv是生产者,pvc是消费者

pv和pvc的使用

  • 这里我们使用的是NFS—PV—PVC架构,先使用NFS创建PV,PVC使用我们用NFS创建的PV

  • 在这里插入图片描述
    我们这里的实验使用两台虚拟机,一台作为NFS服务器,一台搭建minikube

  • 搭建NFS服务器:
    1、在两台机器上yum install -y nfs-utils
    2、在NFS服务器上创建共享目录 mkdir /nfsdata
    3、chmod 777 /nfsdata
    4、vim /etc/exports—/nfsdata 192.168.0.0/24(rw,no_root_squash,no_all_squash,sync)
    5、export -rv
    6、systemctl start nfs

  • 在minikube上创建PV

    [root@minikube pv_pvc_nfs]# cat pv_nfs.yaml 
    apiVersion: v1
    kind: PersistentVolume  #资源类型
    metadata:
      name: mysql-nginx
      labels:
        type: mysql-nginx-nfs
    spec:
      capacity:
        storage: 5Gi 
      accessModes:
        - ReadWriteMany  #访问模式,多个客户端读写
      persistentVolumeReclaimPolicy: Recycle #回收策略-可以回收
      storageClassName: nfs
      nfs:
        path: "/nfsdata"
        server: 192.168.0.153 #k8s-nfs matser
        readOnly: false  #只读
    
  • 创建PVC

    [root@minikube pv_pvc_nfs]# cat pvc_nfs.yaml 
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-nginx-pvc
    spec:
      accessModes:
      - ReadWriteMany      
      resources:
         requests:
           storage: 5Gi
      storageClassName: nfs
    
  • 创建Deployment

    [root@minikube pv_pvc_nfs]# cat mysql_nfs.yaml 
    apiVersion: extensions/v1beta1
    kind: Deployment            #副本控制器Deployment
    metadata:  
      name: biaobiaomysql                          #Deployment的名称,全局唯一
    spec:
      replicas: 1                          #Pod副本的期待数量
      template:                            #根据此模版创建Pod的副本(实例)
        metadata:
           labels:
             app: biaobiaomysql                    #Pod副本拥有的标签,对应Deployment的selector
        spec:
           containers:                     #Pod内,定义容器
           - name: biaobiaomysql                   #容器名称
             image: mysql:5.7.31              #Docker image
             ports:
             - containerPort: 3306         #容器应用监听的端口
             
             volumeMounts:
             - name: mysql-data-pvc  #和下面一致
               mountPath: /var/lib/mysql  #是mysql默认存放数据的目录 datadir
             env:                          #注入容器内的环境变量
             - name: MYSQL_ROOT_PASSWORD   #这里设置root初始密码
               value: "123456"
           volumes:  #
           - name: mysql-data-pvc #pvc名字
             persistentVolumeClaim:
               claimName: mysql-nginx-pvc
    
  • 将它们写到kustomization.yaml这个文件(kubectl会自动识别这个文件里面的内容,统一管理)

    [root@minikube pv_pvc_nfs]# cat kustomization.yaml 
    resources:
      - mysql_nfs.yaml
      - pv_nfs.yaml
      - pvc_nfs.yaml
    
  • 应用

    [root@minikube pv_pvc_nfs]# kubectl  apply  -k .
    deployment.extensions/biaobiaomysql created
    persistentvolume/mysql-nginx created
    persistentvolumeclaim/mysql-nginx-pvc created
    
Logo

开源、云原生的融合云平台

更多推荐