Kubernetes Storage Class动态制备NFS PV入门教程

注:本文档不包含NFS服务器的安装教程(ubuntu和centos安装方式有细微区别,故不在本文赘述,本文重点在StorageClass动态制备的使用)

本次实验的架构图

本次实验的架构图

本次实验用StorageClass给nginx挂载上目录,并在里面添加一个index.html,index.html只有以下内容

<h1>hello</h1>

 
 

安装NFS制备器驱动

 
在使用StorageClass之前,要先准备制备器驱动
NFS制备器驱动安装看官网https://github.com/kubernetes-csi/csi-driver-nfs#readme
驱动安装文档安装文档

驱动安装之后应该有以下pod

NFS制备器相关POD

安装好之后可以按以下配置文件创建StorageClass

 
以下涉及4个资源需要创建

  • StorageClass
  • PersistentVolumeClaim
  • Pod
  • Service

StorageClass

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: example-nfs
provisioner: nfs.csi.k8s.io #制备器名
parameters:
  server: 192.168.204.15 #nfs服务器地址
  share: /nfsroot #nfs路径
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
- nfsvers=4.1

PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: example-nfs-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: example-nfs #对应前面sc的名字
  resources:
    requests:
      storage: 10Mi

Pod

apiVersion: v1
kind: Pod
metadata:
  name: example-nfs-pod
  labels:
    app: mynginx
spec:
  containers:
    - name: nginx-container
      image: nginx:latest
      ports:
        - containerPort: 80
      volumeMounts:
        - name: nfs-volume
          mountPath: /usr/share/nginx/html
  volumes:
    - name: nfs-volume
      persistentVolumeClaim:
        claimName: example-nfs-pvc

Service

apiVersion: v1
kind: Service
metadata:
  name: mynginx
  namespace: default
spec:
  selector:
    app: mynginx
  type: NodePort
  ports:
  - name: mynginx
    protocol: TCP
    port: 80
    targetPort: 80

 
 

实验结果验证

sc状态

sc状态
 
 

pvc状态

pvc状态
 
 

PV状态

PV状态
 
 

nfs目录

nfs目录
 
 

pod状态

测试pod状态
 
 
测试pod状态

<think>好的,我现在需要回答用户关于“PVC 怎么提供的持久化的存储”的问题。首先,我得确认自己对PVC(PersistentVolumeClaim)的理解是否正确。PVC是Kubernetes中用于请求存储资源的对象,属于持久卷声明的一部分。用户可能想了解PVC如何实现持久化存储,以及它在Kubernetes存储体系中的角色。 接下来,我需要整理Kubernetes存储的基本概念,包括PersistentVolume(PV)、StorageClass(SC)和PVC之间的关系。用户可能对PVC如何与这些组件交互不太清楚,所以需要分步骤解释。比如,PV是集群中的存储资源,由管理员预先配置或动态供给,而PVC是用户对存储的请求,通过StorageClass动态创建PV。 然后,要考虑用户可能存在的疑问点,比如PVC如何绑定到PV,访问模式(如ReadWriteOnce、ReadOnlyMany、ReadWriteMany)的区别,以及存储类的作用。这时候需要具体说明PVC的配置参数,如存储大小、访问模式、存储类名称等,并举例说明一个PVC的YAML定义。 另外,用户可能想知道PVC如何被Pod使用,因此需要说明如何在Pod的volumeMounts中引用PVC,确保存储的持久性。这里要强调即使Pod被删除,PVC和PV中的数据仍然保留,除非PVC被删除且回收策略允许清除。 还要注意检查是否有常见的误解,例如PVC和PV的生命周期管理,回收策略如Retain、Delete、Recycle的不同之处,特别是动态供给下StorageClass的回收策略。可能需要解释动态供给和静态供给的区别,以及它们对持久化的影响。 最后,要确保回答结构清晰,分步骤或分点说明,帮助用户逐步理解。使用实际例子加强说明,比如动态创建PVC的流程,以及Pod如何使用该PVC。同时,提醒用户注意配置参数的重要性,如访问模式和存储类选择,避免常见错误。</think>在 Kubernetes 中,PVC(PersistentVolumeClaim)通过以下分层机制实现持久化存储: ### 一、核心概念 1. **PersistentVolume (PV)** 集群管理员预配置的存储资源池,支持多种存储类型(如 NFS、云存储、本地磁盘等),具有明确的存储容量和访问模式属性。 2. **PersistentVolumeClaim (PVC)** 用户发起的存储资源请求,通过声明所需容量、访问模式(ReadWriteOnce/ReadOnlyMany/ReadWriteMany)和 StorageClass 名称,自动匹配或触发创建 PV。 3. **StorageClass (SC)** 定义动态供给的存储模板,包含制备器(provisioner)、回收策略(Retain/Delete)等参数,如: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast-ssd provisioner: kubernetes.io/gce-pd parameters: type: pd-ssd reclaimPolicy: Delete ``` ### 二、持久化流程 1. **静态供给** - 管理员预先创建 PV - 用户创建 PVC 后,系统通过容量和访问模式自动完成 PV-PVC 绑定 2. **动态供给(主流方案)** ```mermaid graph LR A[用户创建PVC] --> B{检查匹配StorageClass} B -->|存在| C[触发Provisioner创建PV] B -->|不存在| D[需预先静态PV] C --> E[自动绑定PVC-PV] ``` 3. **数据持久性保障** - Pod 删除时:PVC 和 PV 保持存在,数据保留 - PVC 删除时:根据 PV 的 `reclaimPolicy` 决定保留(Retain)或删除(Delete)后端存储数据 ### 三、实际应用示例 1. **PVC 定义文件** ```yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: app-data-pvc spec: storageClassName: fast-ssd # 关联StorageClass accessModes: - ReadWriteOnce resources: requests: storage: 10Gi ``` 2. **Pod 挂载声明** ```yaml apiVersion: v1 kind: Pod metadata: name: web-server spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: "/usr/share/nginx/html" name: app-storage volumes: - name: app-storage persistentVolumeClaim: claimName: app-data-pvc ``` ### 四、关键注意事项 1. **访问模式选择** - ReadWriteOnce(RWO):单节点读写 - ReadOnlyMany(ROX):多节点只读 - ReadWriteMany(RWX):多节点读写 2. **存储后端限制** 不同存储类型对访问模式的支持不同(如 NFS 支持 RWX,云盘通常仅支持 RWO) 3. **数据安全策略** - 生产环境建议使用 `reclaimPolicy: Retain` 避免误删 - 定期备份重要数据,即使使用持久化存储 通过这种机制,PVC 实现了与 Pod 生命周期的解耦,确保应用重启、迁移或扩展时存储数据的持久可用性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李南想做条咸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值