首页 > 其他分享 >k8s Persistent Volume 使用

k8s Persistent Volume 使用

时间:2023-01-30 14:57:09浏览次数:62  
标签:volume kubectl task pv Persistent kafka Volume PersistentVolume k8s

1. 官方文档

https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/

2. 介绍

存储的管理是一个与计算实例的管理完全不同的问题。 PersistentVolume 子系统为用户和管理员提供了一组 API, 将存储如何制备的细节从其如何被使用中抽象出来。 为了实现这点,我们引入了两个新的 API 资源:PersistentVolume 和 PersistentVolumeClaim。

持久卷(PersistentVolume,PV) 是集群中的一块存储,可以由管理员事先制备, 或者使用存储类(Storage Class)来动态制备。 持久卷是集群资源,就像节点也是集群资源一样。PV 持久卷和普通的 Volume 一样, 也是使用卷插件来实现的,只是它们拥有独立于任何使用 PV 的 Pod 的生命周期。 此 API 对象中记述了存储的实现细节,无论其背后是 NFS、iSCSI 还是特定于云平台的存储系统。

持久卷申领(PersistentVolumeClaim,PVC) 表达的是用户对存储的请求。概念上与 Pod 类似。 Pod 会耗用节点资源,而 PVC 申领会耗用 PV 资源。Pod 可以请求特定数量的资源(CPU 和内存);同样 PVC 申领也可以请求特定的大小和访问模式 (例如,可以要求 PV 卷能够以 ReadWriteOnce、ReadOnlyMany 或 ReadWriteMany 模式之一来挂载,参见访问模式)。

尽管 PersistentVolumeClaim 允许用户消耗抽象的存储资源, 常见的情况是针对不同的问题用户需要的是具有不同属性(如,性能)的 PersistentVolume 卷。 集群管理员需要能够提供不同性质的 PersistentVolume, 并且这些 PV 卷之间的差别不仅限于卷大小和访问模式,同时又不能将卷是如何实现的这些细节暴露给用户。 为了满足这类需求,就有了存储类(StorageClass) 资源。

volumeClaimTemplates == PersistentVolumeClaim array

3. 访问模式

PersistentVolume 卷可以用资源提供者所支持的任何方式挂载到宿主系统上。 如下表所示,提供者(驱动)的能力不同,每个 PV 卷的访问模式都会设置为对应卷所支持的模式值。 例如,NFS 可以支持多个读写客户,但是某个特定的 NFS PV 卷可能在服务器上以只读的方式导出。 每个 PV 卷都会获得自身的访问模式集合,描述的是特定 PV 卷的能力。

访问模式有:

ReadWriteOnce
卷可以被一个节点以读写方式挂载。 ReadWriteOnce 访问模式也允许运行在同一节点上的多个 Pod 访问卷。
ReadOnlyMany
卷可以被多个节点以只读方式挂载。
ReadWriteMany
卷可以被多个节点以读写方式挂载。
ReadWriteOncePod
卷可以被单个 Pod 以读写方式挂载。 如果你想确保整个集群中只有一个 Pod 可以读取或写入该 PVC, 请使用 ReadWriteOncePod 访问模式。这只支持 CSI 卷以及需要 Kubernetes 1.22 以上版本。

4. 持久卷创建以及申领

创建一个普通的持久卷:PersistentVolume.yaml

apiVersion: v1
kind: PersistentVolume
metadata:
  name: kafka-pv-volume
  labels:
    type: local
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/opt/kafka_data"

kubectl apply -f PersistentVolume.yaml

申领持久卷:PersistentVolumeClaim.yaml

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: kafka-pv-claim
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 300Mi

kubectl apply -f PersistentVolumeClaim.yaml

查看持久卷:

qiteck@server:~/program/docker_service/kafka$ sudo kubectl get pv
NAME              CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
kafka-pv-volume   1Gi        RWO            Retain           Bound    default/datadir-zk-0                            13m

查看持久卷申领:

qiteck@server:~/program/docker_service/kafka$ sudo kubectl get pvc
NAME             STATUS    VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE
kafka-pv-claim    Bound     task-pv-volume    1Gi        RWO            manual         34m

5. 持久卷匹配规则

storageClassName和accessModes要一致才能申请到,不然pvc会一直处于Pending状态,此处不举例。
apiVersion: v1
kind: PersistentVolume
metadata:
  name: kafka-pv-volume
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/opt/kafka_data"

 

6. 持久卷申领删除

sudo kubectl delete pvc task-pv-claim2

qiteck@server:~/program/docker_service/kafka$ sudo kubectl get pvc
NAME             STATUS    VOLUME            CAPACITY   ACCESS MODES   STORAGECLASS   AGE
datadir-zk-0     Bound     kafka-pv-volume   1Gi        RWO                           3h46m
task-pv-claim    Bound     task-pv-volume    1Gi        RWO            manual         40m
task-pv-claim2   Pending                                               manual         12m
qiteck@server:~/program/docker_service/kafka$ sudo kubectl delete pvc task-pv-claim2
persistentvolumeclaim "task-pv-claim2" deleted

 

7. 持久卷删除

sudo kubectl delete pv task-pv-volume

qiteck@server:~/program/docker_service/kafka$ sudo kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
kafka-pv-volume 1Gi RWO Retain Bound default/datadir-zk-0 25m
task-pv-volume 1Gi RWO Retain Released default/task-pv-claim manual 43m


qiteck@server:~/program/docker_service/kafka$ sudo kubectl delete pv task-pv-volume
persistentvolume "task-pv-volume" deleted


qiteck@server:~/program/docker_service/kafka$ sudo kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
kafka-pv-volume 1Gi RWO Retain Bound default/datadir-zk-0 26m

 

标签:volume,kubectl,task,pv,Persistent,kafka,Volume,PersistentVolume,k8s
From: https://www.cnblogs.com/zhanchenjin/p/17075847.html

相关文章

  • k8s之deployment详解
    apiVersion:apps/v1#版本号kind:Deployment#类型metadata:#元数据name:#rs名称namespace:#所属命名空间labels:#标签controller:dep......
  • k8s集群不可用:The connection to the server 192.168.117.161:6443 was refused -
    虚拟机非正常关机后,k8s集群不可用获取节点,报如下错,kubectlgetnode 查看env:env|grep-ikubernetes 查看docker状态:systemctlstatusdocker 查看kubelet状态:systemct......
  • Kubernetes:开源 K8s 管理工具 Rancher 认知
    写在前面博文内容涉及​​Rancher​​的介绍,集群内安装查看​​Rancher​​的基本功能理解不足小伙伴帮忙指正我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如......
  • k8s部署nginx-ingress
    Kubernetes暴露服务的有三种方式,分别为LoadBlancerService、NodePortService、Ingress。官网对Ingress的定义为管理对外服务到集群内服务之间规则的集合,通俗点讲就是......
  • k8s之service详解
    apiVersion:v1#版本kind:Service#类型metadata:#元数据类型stringname:test#Service名称类型stringnamespace:test#命名空间,不指定时默认为default......
  • k8s之安装sonarqube
    1.k8s安装sonarqube记录,三个配置文件搞上来首先是创建postgre的PVPVC配置文件,kubectlapply-f pvc-xxxxxx.yaml 这里的目的是让sonarqube的数据库postgresql的数......
  • K8s - 使用 Minikube 部署
    Docker安装--更新版本sudoapt-getupdate--安装必须的包sudoapt-getinstallca-certificatescurlgnupglsb-release添加官方GPG密钥sudomkdir-p/etc/a......
  • 离线yum安装k8s(直接yum安装k8s)快速部署
    问题:如何在没有离线环境上服务器yum安装k8s环境?环境:准备一台互联网的服务器+离线的服务器写的比较简便。。。。。。。。1.互联网服务操作添加阿里云YUM的软件源cat>......
  • k8s01 - 使用 kubeadm部署Kubernetes 1.26
    目录1准备1.1系统配置1.2配置服务器支持开启ipvs的前提条件1.3部署容器运行时Containerd2.使用kubeadm部署Kubernetes2.1安装kubeadm和kubelet2.2使用kubeadminit初......
  • k8s中port、nodePort、targetPort概念的区分
    port是service端口,即k8s中服务之间的访问端口targetport是pod(也就是容器)的端口nodeport是容器所在node节点的端口,即外部机器可访问的端口。(通过nodeport类型的service......