Kubernetes 持久化 第一篇 (PV、PVC、StorageClass)

PV 描述的,是持久化存储数据卷。这个 API 对象主要定义的是一个持久化存储在宿主机上的目录,比如一个 NFS 的挂载目录
通常情况下,PV 对象是由运维人员事先创建在 Kubernetes 集群里待用的。比如,运维人员可以定义这样一个 NFS 类型的 PV,如下所示:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs
spec:
  storageClassName: manual
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 10.244.1.4
    path: "/"

而PVC 描述的,则是 Pod 所希望使用的持久化存储的属性。比如,Volume 存储的大小、可读写权限等等。
PVC 对象通常由开发人员创建;或者以 PVC 模板的方式成为 StatefulSet 的一部分,然后由 StatefulSet 控制器负责创建带编号的 PVC

比如,开发人员可以声明一个 1 GiB 大小的 PVC,如下所示:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: manual
  resources:
    requests:
      storage: 1Gi

而用户创建的 PVC 要真正被容器使用起来,就必须先和某个符合条件的 PV 进行绑定。这里要检查的条件,包括两部分:
第一个条件,当然是 PV 和 PVC 的 spec 字段。比如,PV 的存储(storage)大小,就必须满足 PVC 的要求。
第二个条件,则是 PV 和 PVC 的 storageClassName 字段必须一样。
在成功地将 PVC 和 PV 进行绑定之后,Pod 就能够像使用 hostPath 等常规类型的
Volume 一样,在自己的 YAML 文件里声明使用这个 PVC 了,如下所示:

apiVersion: v1
kind: Pod
metadata:
  labels:
    role: web-frontend
spec:
  containers:
  - name: web
    image: nginx
    ports:
    - name: web
      containerPort: 80
    volumeMounts:
    - name: nfs
      mountPath: "/usr/share/nginx/html"
  volumes
### 如何在Ubuntu中设置Kubernetes NFS StorageClass配置示例及故障排除 #### 安装NFS服务器 为了使NFS能够正常工作,在Ubuntu上需更新软件列表并安装`nfs-kernel-server`,这可以通过执行命令来完成[^1]。 ```bash sudo apt update && sudo apt install -y nfs-kernel-server ``` #### 创建共享目录与导出配置 创建一个用于挂载的文件夹,并编辑`/etc/exports`文件以允许特定网络内的客户端访问此路径。例如: ```bash sudo mkdir -p /srv/nfs/kube-pv echo "/srv/nfs/kube-pv *(rw,sync,no_subtree_check)" | sudo tee -a /etc/exports ``` 重启NFS服务以便应用更改: ```bash sudo systemctl restart nfs-kernel-server ``` #### 配置StorageClass资源对象 定义YAML格式描述符来声明持久化卷类(PVC),其中指定了provisioner参数为外部插件名称或内部驱动程序标识符。对于简单的静态PV分配方案,则不需要动态供应器;而对于自动化的PVC绑定过程则必需指定合适的provisioner实现方式。 下面是一个适用于大多数场景下的通用模板: ```yaml apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: managed-nfs-storage provisioner: example.com/nfs # 或者使用社区支持版本如 "fuseim.pri/ifs" parameters: archiveOnDelete: "false" reclaimPolicy: Retain # 可选值有 Delete 和 Retain,默认是 Delete mountOptions: - hard - nolock allowVolumeExpansion: true # 启用扩展功能 volumeBindingMode: WaitForFirstConsumer ``` 注意替换上述代码中的`example.com/nfs`部分为实际使用的第三方组件提供的有效字符串表示形式之一。 #### 故障排查指南 当遇到问题时可以按照如下方法进行初步诊断: - 使用kubectl describe查看Pod状态日志; - 查看Node节点上的/var/log/syslog是否有任何关于NFS错误的信息记录; - 确认防火墙规则是否阻止了必要的端口通信(默认情况下TCP 2049); - 测试从任意集群成员机器到NFS Server主机之间的连通性和性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kjkdd

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

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

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

打赏作者

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

抵扣说明:

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

余额充值