zoukankan      html  css  js  c++  java
  • k8s-PV、PVC(7)

    1、什么是PV、PVC

    PV(PersistentVolume):持久化卷

    PVC(PersistentVolumeClaim):持久化声明

    为何有了Volumes,还要引进PV、PVC?因为Volumes的类型有很多,每次切换不同的类型如hotsPath,第三方的云存储,都需要手动改动yaml的对应的类型,且每种类型的写法声明方式都不同,导致不灵活不好维护。为了解决该问题,通过PV来抽象了各种类型,具体实现由具体存储方去实现,客户端只需要通过PVC声明,指定对应的storageClassName,即可匹配符合的第三方PV,无需关心其实现细节,且无需做任何修改。

    2、通过mysql来实操PV、PVC

    一、创建PV,类型为hostPath:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: mysql-pv-volume
      labels:
        type: local
    spec:
      storageClassName: manual  #与请求的PVC对应
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteOnce
      hostPath:
        path: "/var/lib/mysql"
    
    kubectl apply -f mysql-pv.yaml
    

    查看状态:

    kubectl get pv
    

    1604928203(1)

    二、创建PVC

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: mysql-pv-claim
    spec:
      storageClassName: manual #与PV的对应
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    
    kubectl apply -f mysql-pvc.yaml
    

    查看状态:

    1604928348(1)

    由STATUS为Bound可知已经与上面的PV绑定。

    三、创建Mysql Deployment

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mysql-pv-deploy
    spec:
      replicas: 1
      selector:
        matchLabels:
          name: k8s-mysql
      template:
        metadata:
          labels:
            name: k8s-mysql
        spec:
          containers:
          - name: mysql
            image: registry.cn-shenzhen.aliyuncs.com/luozhilian/k8s:mysql5.6
            env:
            - name: MYSQL_ROOT_PASSWORD
              value: password
            imagePullPolicy: IfNotPresent
            ports:
            - containerPort: 3306
              name: mysql
            volumeMounts:
            - mountPath: /var/lib/mysql
              name: mysql-persistent-storage
          volumes:
          - name: mysql-persistent-storage
            persistentVolumeClaim:  # 此处使用pvc声明
              claimName: mysql-pv-claim
    ---
    kind: Service
    apiVersion: v1
    metadata:
      name: k8s-mysql-service
    spec:
      type: NodePort
      ports:
      - port: 5000
        targetPort: 3306
        nodePort: 32000
      selector:
        name: k8s-mysql
    
    
    kubectl apply -f mysql-deploy.yaml
    
    kubectl get pod,svc -o wide
    

    image-20201109213346952

    用Navicat连接mysql,创建一个测试数据库:

    1604928890(1)

    查看node1主机的挂载的路径数据 /var/lib/mysql/:

    1604929966(1)

    删除mysql 对应的pod,让k8s重新创建pod:

    kubectl delete pod mysql-pv-deploy-d7b7fd5b5-m6n44
    

    再登录连接mysql,查看创建的数据库是否还存在:

    1604928890(1)

    如上图,依然存在

  • 相关阅读:
    sqlserver,获取调用存储过程返回数据的方法。
    手动为弹窗添加一个阴影背景。
    bootstrap资料链接
    进入Linux救援(rescue)模式的四大法门
    virtual box 5.2.12 扩展包安装
    pypi配置国内开源镜像
    vs2015利用python加载dll调试配置
    ubuntu18安装ubuntu kylin软件中心
    firefox快捷键窗口和标签类
    设置双网卡路由
  • 原文地址:https://www.cnblogs.com/roluodev/p/13951300.html
Copyright © 2011-2022 走看看