K8S学习之基础二十四:k8s的持久化存储之pv和pvc

K8S的存储之pv和pvc

在 Kubernetes (k8s) 中,持久化存储是通过 PersistentVolume (PV) 和 PersistentVolumeClaim (PVC) 来实现的。PVC 是用户对存储资源的请求,而 PV 是集群中的实际存储资源。PVC 和 PV 的关系类似于 Pod 和 Node 的关系。

PersistentVolume (PV)

PV 是集群中的一块存储资源,可以由管理员预先配置,或者通过 StorageClass 动态创建。PV 是集群级别的资源,独立于 Pod 的生命周期。

PersistentVolumeClaim (PVC)

PVC 是用户对存储资源的请求。用户通过 PVC 来申请特定大小和访问模式的存储资源。PVC 会绑定到一个合适的 PV 上,从而为 Pod 提供持久化存储。

PVC 的使用流程

  1. 创建 PV:管理员预先创建 PV,或者通过 StorageClass 动态创建 PV。
  2. 创建 PVC:用户创建 PVC,指定所需的存储大小和访问模式。
  3. 绑定 PV 和 PVC:Kubernetes 会根据 PVC 的要求,自动绑定一个合适的 PV。
  4. Pod 使用 PVC:在 Pod 的配置中引用 PVC,Pod 就可以使用该 PVC 所绑定的 PV 进行持久化存储。

PVC 的 YAML 示例

以下是一个 PVC 的 YAML 示例:

复制代码
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
  storageClassName: standard
  • accessModes :指定存储的访问模式,常见的有 ReadWriteOnce(单个节点读写)、ReadOnlyMany(多个节点只读)、ReadWriteMany(多个节点读写)。
  • resources.requests.storage:指定所需的存储大小。
  • storageClassName:指定使用的 StorageClass 名称。如果省略,则使用默认的 StorageClass。

Pod 使用 PVC 的 YAML 示例

以下是一个 Pod 使用 PVC 的 YAML 示例:

复制代码
apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
  - name: my-container
    image: nginx
    volumeMounts:
    - mountPath: "/usr/share/nginx/html"
      name: my-storage
  volumes:
  - name: my-storage
    persistentVolumeClaim:
      claimName: my-pvc
  • volumeMounts:指定容器内挂载的路径。
  • volumes:指定使用的 PVC。

动态 Provisioning

Kubernetes 支持动态创建 PV,这是通过 StorageClass 来实现的。StorageClass 定义了存储的类型和参数,当用户创建 PVC 时,Kubernetes 会根据 StorageClass 自动创建 PV。

以下是一个 StorageClass 的 YAML 示例:

复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  • provisioner:指定用于创建 PV 的插件。
  • parameters:指定存储的具体参数。

总结

  • PVC 是用户对存储资源的请求。
  • PV 是集群中的实际存储资源。
  • PVC 和 PV 的绑定可以是静态的(预先创建 PV)或动态的(通过 StorageClass 动态创建 PV)。

PV-PVC-POD测试(使用nfs):

复制代码
vi pv-pvc-pod.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: v1
spec:
  capacity:
    storage: 10Mi  #pv的存储空间容量
  accessModes: ["ReadWriteOnce"]
  nfs:
    path: /data/volumes/v1     #把nfs的存储空间创建成pv
    server: 172.16.80.131      #nfs服务器的地址
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  accessModes: ["ReadWriteOnce"]
  resources:
    requests:
      storage: 10Mi
---
apiVersion: v1
kind: Pod
metadata:
  name: pod-pvc
spec:
  containers:
  - name: nginx
    image: 172.16.80.140/nginx/nginx:1.26
    volumeMounts:
    - name: nginx-html
      mountPath: /usr/share/nginx/html
  volumes:
  - name: nginx-html
    persistentVolumeClaim:
      claimName: my-pvc

mkdir /data/volume/v1
echo 'pvc test' > /data/volume/v1/index.html
kubectl get pv
kubectl get pvc
kubectl get pods -owide
curl 10.244.196.129
相关推荐
ygqygq23 分钟前
Kubernetes Gateway API 与 Envoy Gateway 部署使用指南
kubernetes·gateway·envoy·ingress
山土成旧客27 分钟前
【Python学习打卡-Day33】你好,PyTorch!从“自动挡”到“手动挡”的深度学习之旅
python·深度学习·学习
强子感冒了38 分钟前
Java集合框架深度学习:从Iterable到ArrayList的完整继承体系
java·笔记·学习
Code知行合壹1 小时前
Kubernetes微服务DevOps
微服务·kubernetes·devops
来不及辣哎呀1 小时前
学习Java第六十二天——Hot 100-09-438. 找到字符串中所有字母异位词
java·开发语言·学习
鸿途优学-UU教育1 小时前
2025搜狐教育年度盛典|UU教育CEO彭普杰:成人学习不止于知识传递,科技赋能背后更需温度守护
科技·学习
后端小张1 小时前
【TextIn大模型加速器 + 火山引擎】TextIn大模型加速器与火山引擎协同构建智能文档处理新范式
人工智能·学习·数据挖掘·langchain·tensorflow·gpt-3·火山引擎
yuhaiqun19892 小时前
发现前端性能瓶颈的巧妙方法:建立“现象归因→分析定位→优化验证”的闭环思维
前端·经验分享·笔记·python·学习·课程设计·学习方法
d111111111d2 小时前
使用STM32 HAL库配置ADC单次转换模式详解
笔记·stm32·单片机·嵌入式硬件·学习
会飞的土拨鼠呀2 小时前
Docker 部署开源蜜罐Cowrie
docker·容器·开源