K8S资源之PV&PVC

概念

类似于Docker的数据卷挂载,将Pod中重要的文件挂载到宿主机上,如果Pod发生崩溃等情况自愈时,保证之前存储的数据没有丢失。

如上图中,将各个Pod中的目录挂载到存储层,如果Pod宕机后自愈均从存储层获取之前的数据,保证数据不会丢失。

网络文件系统-NFS

Master节点搭建一个NFS-Server,Node节点搭建NFS-Client,任意一个节点发生数据变化,均会同步给其他节点,即双向同步。

搭建

所有节点安装nfs-utils
shell 复制代码
yum install -y nfs-utils
Master节点配置NFS-Server
shell 复制代码
#nfs主节点
echo "/nfs/data/ *(insecure,rw,sync,no_root_squash)" > /etc/exports

mkdir -p /nfs/data
systemctl enable rpcbind --now
systemctl enable nfs-server --now
#配置生效
exportfs -r
Node节点配置映射文件
shell 复制代码
# 测试是否映射成功
showmount -e ${换成自己Master节点的IP:192.168.65.130}

#执行以下命令挂载 nfs 服务器上的共享目录到本机路径 /root/nfsmount
mkdir -p /nfs/data

mount -t nfs ${换成自己Master节点的IP:192.168.65.130}:/nfs/data /nfs/data
# 写入一个测试文件
echo "hello nfs server" > /nfs/data/test.txt
验证

原生方式数据挂载

需要提前在nfs/data/目录下创建nginx-pv目录

使用以下文件创建一个Deployment,同时挂载到nginx-pv目录下,进行验证:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-pv-demo
  name: nginx-pv-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-pv-demo
  template:
    metadata:
      labels:
        app: nginx-pv-demo
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
        - name: html
          nfs:
            server: 192.168.65.130
            path: /nfs/data/nginx-pv

在Master/Node节点的nginx-pv目录下创建index.html,然后在pod中执行可以看到:

PV & PVC

PV:持久卷(Persistent Volume),将应用需要持久化的数据保存到指定位置

PVC:持久卷申明(Persistent Volume Claim),申明需要使用的持久卷规格

创建PV池

属于静态创建

shell 复制代码
#nfs主节点
mkdir -p /nfs/data/01
mkdir -p /nfs/data/02
mkdir -p /nfs/data/03

创建PV

yaml 复制代码
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv01-10m
spec:
  capacity:
    storage: 10M
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/01
    server: 192.168.65.130
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv02-1gi
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/02
    server: 192.168.65.130
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv03-3gi
spec:
  capacity:
    storage: 3Gi
  accessModes:
    - ReadWriteMany
  storageClassName: nfs
  nfs:
    path: /nfs/data/03
    server: 192.168.65.130

PVC的创建与绑定

其会根据storageClassName与需要的storage在静态PV池中获取符合需求的,然后进行自动绑定

yaml 复制代码
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-pvc
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 200Mi
  storageClassName: nfs

创建Pod时绑定PVC

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx-deploy-pvc
  name: nginx-deploy-pvc
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-deploy-pvc
  template:
    metadata:
      labels:
        app: nginx-deploy-pvc
    spec:
      containers:
      - image: nginx
        name: nginx
        volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
      volumes:
        - name: html
          persistentVolumeClaim:
            claimName: nginx-pvc


参考

相关推荐
小义_11 小时前
【Kubernetes】(十二)配置存储卷
云原生·容器·kubernetes
运维全栈笔记1 天前
K8S部署Redis高可用全攻略:1主2从3哨兵架构实战
redis·docker·云原生·容器·架构·kubernetes·bootstrap
尘世壹俗人1 天前
使用K8s部署模型
kubernetes
AI木马人1 天前
9.人工智能实战:GPU 服务如何上 Kubernetes?从单机部署到 K8s + NVIDIA Device Plugin + HPA 的生产级改造
人工智能·容器·kubernetes
码点滴1 天前
告别显存焦虑:PagedAttention 如何将大模型吞吐量提升 4 倍?
人工智能·架构·kubernetes·大模型·pagedattention
键盘鼓手苏苏1 天前
Kubernetes 容器安全最佳实践
云原生·kubernetes·k8
键盘鼓手苏苏1 天前
Kubernetes 安全最佳实践
云原生·kubernetes·k8
木雷坞2 天前
K8s GPU 推理服务 ImagePullBackOff 排查与预热
云原生·容器·kubernetes·gpu算力
吴爃2 天前
Spring Boot 项目在 K8S 中的打包、部署与运维发布实践
运维·spring boot·kubernetes
The Straggling Crow2 天前
Monitoring 2026-04-30
kubernetes