美文网首页
K8S学习之PV&&PVC

K8S学习之PV&&PVC

作者: david161 | 来源:发表于2022-03-22 09:05 被阅读0次

    部署mysql之前我们需要先了解一个概念有状态服务。这是一种特殊的服务,简单的归纳下就是会产生需要持久化的数据,并且有很强的I/O需求,且重启需要依赖上次存储到磁盘的数据。如典型的mysql,kafka,zookeeper等等。
    在我们有比较优秀的商业存储的前提下,非常推荐使用有状态服务进行部署,计算和存储分离那是相当的爽的。在实际生产中如果没有这种存储,localPV也是不错的选择,当然local pv其实和hostPath是一样的。当然我们在开发测试环境也是可以自己搭建一套简单的如NFS服务,来享受存储和计算分离的爽快感。
    kubernetes中定义一种了资源类型Stateful Service即有状态服务,有状态服务需要的持久化数据动态绑定我们可以利用存储的API PersistentVolume(PV)和PersistentVolumeClaim(PVC)来进行需要的相关数据的绑定和存储。

    PV概念

    persistentVolume:是由管理员设置的存储,它是集群的一部分。就像节点时集群中的资源一样,PV也是集群中的资源。PV是Volumes之类的卷插件,但具有独立于使用PV的pod的生命周期。此API对象包含存储实现的细节,即NFS、iSCSI或者特定于云供应商的存储系统

    PVC概念

    peresistentVolumeClaim是用户存储的请求。它与pod相似,pod消耗节点资源,PVC消耗PV资源。pod可以请求特定级别的资源(CPU和内存)。盛名可以请求特定的大小和访问模式。例如:可以以读/写一次或者 只读多次模式挂载。

    PV & PVC

    PV就好比是一个仓库,我们需要先购买一个仓库,即定义一个PV存储服务,例如CEPH,NFS,Local Hostpath等等。
    PVC就好比租户,pv和pvc是一对一绑定的,挂载到POD中,一个pvc可以被多个pod挂载。

    全部资源文件清单

    pv
    apiVersion: v1 
    kind: PersistentVolume 
    metadata: 
      labels: 
        app: mariadb-pv 
      name: data-mariadb-pv 
    spec: 
      accessModes: 
        - ReadWriteOnce 
      capacity: 
        storage: 10Gi 
      hostPath: 
        path: /data/mariadb 
        type: DirectoryOrCreate 
      persistentVolumeReclaimPolicy: Retain 
      storageClassName: standard 
      volumeMode: Filesystem
    
    pvc

    pvandpvchostpath/mariadbpvc.yml

    apiVersion: v1 
    kind: PersistentVolumeClaim 
    metadata: 
      name: k8sdemo-mariadb-pvclaim 
      labels: 
        app: k8sdemo-mariadb-pvc 
    spec: 
      accessModes: 
        - ReadWriteOnce 
      storageClassName: standard 
      resources: 
        requests: 
          storage: 1Gi
    
    service
    volumes: 
      - name: mysqlvolume 
        persistentVolumeClaim: 
          claimName: k8sdemo-mariadb-pvclaim
    

    完整文件信息
    pvandpvchostpath/mariadb.yml

    apiVersion: apps/v1 
    kind: Deployment 
    metadata: 
      name: mariadb-deploy 
      labels: 
        app: mariadb-deploy 
    spec: 
      replicas: 1 
      template: 
        metadata: 
          name: mariadb-deploy 
          labels: 
            app: mariadb-deploy 
        spec: 
          nodeSelector: 
            mariadb: mariadb 
          imagePullSecrets: 
            - name: lagouharbor 
          containers: 
            - name: mariadb-deploy 
              image: 192.168.198.155:5000/lagouedu/mariadb:10.5.2 
              imagePullPolicy: 
              IfNotPresent 
              ports: 
                - containerPort: 3307 
              env:
                - name: MYSQL_ROOT_PASSWORD 
                  #这是mysqlroot用户的密码 
                  valueFrom: 
                    secretKeyRef: 
                      key: password 
                      name: mariadbsecret 
                - name: TZ 
                  value: Asia/Shanghai 
              args: 
                - "--character-set-server=utf8mb4" 
                - "--collation-server=utf8mb4_unicode_ci" 
              volumeMounts: 
                - mountPath: /etc/mysql/mariadb.conf.d/ #容器内的挂载目录 
                  name: lagoumariadb #随便给一个名字,这个名字必须与volumes.name一致 
                - mountPath: /var/lib/mysql #容器内的挂载目录 
                  name: volume-mariadb 
          restartPolicy: Always 
          volumes: 
            - name: lagoumariadb 
              configMap: 
                name: mariadbconfigmap
            - name: volume-mariadb 
              persistentVolumeClaim: 
                claimName: mariadb-pvc 
      selector: 
        matchLabels: 
          app: mariadb-deploy 
    --- 
    apiVersion: v1 
    kind: Service 
    metadata: 
      name: mariadb-svc 
    spec: 
      selector: 
        app: mariadb-deploy 
      ports: 
        - port: 3307 
          targetPort: 3307 
          nodePort: 30036 
      type: NodePort
    
    secret

    pvandpvchostpath/mariadbsecret.yml

    apiVersion: v1 
    kind: Secret 
    metadata: 
      name: mariadbsecret 
    type: Opaque 
    data: 
      password: YWRtaW4=
    
    configmap

    pvandpvchostpath/mariadb.yml

    apiVersion: v1 
    data: 
      my.cnf: "省略中间数据部分,请各位同学前面章节" 
    kind: ConfigMap 
    metadata: 
      name: mariadbconfigmap
    

    客户端测试

    IP:192.168.198.157 
    username:root 
    password:admin 
    prot: 30036
    

    相关文章

      网友评论

          本文标题:K8S学习之PV&&PVC

          本文链接:https://www.haomeiwen.com/subject/pqsfdrtx.html