存储卷体系:EmptyDir/HostPath/PV/PVC/StorageClass 的选型决策树

文章目录

    • 痛点先行
    • 一、存储卷类型全景图
    • [二、EmptyDir:Pod 生命周期内的临时存储](#二、EmptyDir:Pod 生命周期内的临时存储)
      • [2.1 典型使用场景](#2.1 典型使用场景)
      • [2.2 EmptyDir 的存储介质](#2.2 EmptyDir 的存储介质)
    • 三、HostPath:宿主机目录的直接映射
      • [3.1 HostPath 的本质](#3.1 HostPath 的本质)
      • [3.2 HostPath 与 Pod 调度的矛盾](#3.2 HostPath 与 Pod 调度的矛盾)
      • [3.3 安全风险:为什么 HostPath 是安全扫描的高频告警项](#3.3 安全风险:为什么 HostPath 是安全扫描的高频告警项)
      • [3.4 Pod Security Standards 对 HostPath 的控制](#3.4 Pod Security Standards 对 HostPath 的控制)
    • [四、Local PV:节点级持久存储的正确打开方式](#四、Local PV:节点级持久存储的正确打开方式)
      • [4.1 Local PV vs HostPath:本质区别](#4.1 Local PV vs HostPath:本质区别)
      • [4.2 Local PV 的创建与使用](#4.2 Local PV 的创建与使用)
      • [4.3 Local PV 的适用场景](#4.3 Local PV 的适用场景)
    • 五、PV/PVC:存储资源的声明式抽象
      • [5.1 PV 的生命周期](#5.1 PV 的生命周期)
      • [5.2 Reclaim Policy 的三种策略](#5.2 Reclaim Policy 的三种策略)
      • [5.3 PVC 误删后的数据恢复:Retain 策略的救命用法](#5.3 PVC 误删后的数据恢复:Retain 策略的救命用法)
      • [5.4 StatefulSet 的 volumeClaimTemplates 与 PVC 绑定](#5.4 StatefulSet 的 volumeClaimTemplates 与 PVC 绑定)
      • [5.5 StatefulSet 缩容时的 PVC 行为](#5.5 StatefulSet 缩容时的 PVC 行为)
    • 六、StorageClass:动态存储供给
      • [6.1 StorageClass 的组成](#6.1 StorageClass 的组成)
      • [6.2 CSI 架构:Out-of-Tree 存储驱动的标准](#6.2 CSI 架构:Out-of-Tree 存储驱动的标准)
      • [6.3 StorageClass 选型决策树](#6.3 StorageClass 选型决策树)
    • 七、验证命令清单
    • 总结

前置知识:本文假设读者已掌握 Pod、Deployment、Namespace、Node 的基本概念。StorageClass 部分涉及云厂商存储,AWS EBS/GCP PD 作为典型示例说明。

环境说明:示例使用 Kubernetes 1.28 + CSI Migration 已默认开启的环境。云厂商托管集群通常默认提供常用 StorageClass。


痛点先行

存储是 Kubernetes 中出错率最高的领域之一,原因在于存储卷的生命周期与 Pod 不完全一致------Pod 删除后 PV 可能还在,PVC 删除后数据未必真的消失,StorageClass 选错会导致 Pod 无法调度。这些边界情况在入门文档中很少被覆盖。


一、存储卷类型全景图

Kubernetes 存储卷并非一个单一概念,而是多个抽象层次的组合:
控制平面
网络级持久存储
节点级持久存储
临时存储
EmptyDir

Pod 生命周期

同 Node 多 Pod 共享
HostPath

宿主机目录

无调度保证
Local PV

绑定特定节点

有调度约束
NFS / 云托管存储

跨节点访问

CSI 驱动
AWS EBS / GCP PD

块存储

单 Pod 绑定
CephFS / NFS

文件存储

多 Pod 共享
PersistentVolume

集群级存储资源

管理员预分配或 SC 动态创建
PersistentVolumeClaim

Pod 的存储请求

声明式
StorageClass

存储类型定义

动态 Provisioning

理解这张图的关键在于:PV/PVC 是 Kubernetes 对存储资源的通用抽象,无论底层是本地 SSD 还是云厂商的分布式存储,Pod 都通过相同的 PVC 接口请求存储。


二、EmptyDir:Pod 生命周期内的临时存储

EmptyDir 是最简单的一种存储卷------Pod 调度到某个 Node 后,Kubernetes 在该节点上创建一个空目录,挂载到容器内。Pod 删除时,该目录及其内容也随之删除。

2.1 典型使用场景

场景一:同容器内多进程的共享目录

某些应用需要在一个 Pod 内启动多个容器进程(例如 Sidecar 模式),主容器和 Sidecar 容器之间通过共享目录交换数据:

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: log-aggregator
spec:
  containers:
    - name: app
      image: app:v1
      volumeMounts:
        - name: shared-data
          mountPath: /var/log/app
    - name: log-forwarder
      image: log-forwarder:v1
      volumeMounts:
        - name: shared-data
          mountPath: /var/log/collected
  volumes:
    - name: shared-data
      emptyDir: {}

场景二:磁盘密集型操作中的临时工作目录

yaml 复制代码
volumes:
  - name: scratch-space
    emptyDir:
      medium: Memory          # 存储到内存而非磁盘(tmpfs),适合高性能临时操作
      sizeLimit: 1Gi          # 内存模式下必须设置上限

2.2 EmptyDir 的存储介质

默认情况下,EmptyDir 使用节点上的默认存储(通常是根文件系统所在的磁盘)。通过 medium 字段可以选择存储介质:

medium 存储位置 I/O 性能 数据持久性
默认(空) 节点根文件系统 取决于节点磁盘 与节点磁盘相同
Memory tmpfs(内存文件系统) 极高(内存速度) Pod 删安心即丢失,节点重启也丢失
HugePages HugePages 文件系统 极高(支持大页) 同 Memory

生产环境中,谨慎使用 medium: Memory,因为节点内存有限且 OOMKill 的阈值判断会变得复杂。


三、HostPath:宿主机目录的直接映射

HostPath 将宿主机上的文件或目录直接挂载到容器内。这是 Kubernetes 中最具安全风险的基础存储卷类型。

3.1 HostPath 的本质

HostPath 绕过了 Kubernetes 的存储抽象层------容器内看到的是宿主机上的真实文件系统路径。如果 Pod 调度到不同节点,路径的含义就完全不同:

yaml 复制代码
volumes:
  - name: node-logs
    hostPath:
      path: /var/log/pods         # 宿主机上的 K8s 日志目录
      type: DirectoryOrCreate     # 目录不存在时自动创建

3.2 HostPath 与 Pod 调度的矛盾

这是 HostPath 最容易被忽视的问题:Pod 被调度到哪个节点,HostPath 就指向哪个节点的目录。如果 Pod 因为资源不足或亲和性约束被调度到其他节点,数据就会丢失或指向错误的位置。

换句话说:HostPath 不保证 Pod 与数据的节点亲和性

3.3 安全风险:为什么 HostPath 是安全扫描的高频告警项

HostPath 可以访问宿主机上的任意文件,这带来了严重的安全风险:

yaml 复制代码
# 危险操作:用 HostPath 访问宿主机 Docker Socket
volumes:
  - name: docker-socket
    hostPath:
      path: /var/run/docker.sock   # 如果被攻击,容器可以接管宿主机
      type: Socket

常见的高危 HostPath 路径:

路径 风险 建议
/var/run/docker.sock 容器可接管宿主机 Docker 禁止
/ 全盘读写 禁止
/etc/passwd 可修改宿主机用户 禁止
/var/log/pods 读取其他 Pod 日志 低风险,审计用途可允许
/hostpath/...(自定义目录) 取决于目录内容 配置 Pod Security Standards 白名单

3.4 Pod Security Standards 对 HostPath 的控制

Kubernetes 1.25 之后,Pod Security Policy(PSP)已被废弃,接替者是 Pod Security Standards(PSS)Pod Security Admission(PSA)

yaml 复制代码
# namespace 级别强制执行 restricted 策略
apiVersion: v1
kind: Namespace
metadata:
  name: production
  labels:
    pod-security.kubernetes.io/enforce: restricted
    pod-security.kubernetes.io/enforce-version: latest

restricted 策略会默认拒绝所有 HostPath 挂载 。如果确实需要特定路径,需要在 allowedHostPaths 中配置白名单:

yaml 复制代码
apiVersion: policy/v1beta1
kind: PodSecurityPolicy   # 注:PSP 在 K8s 1.25 已废弃,以下为 1.24 环境示例
metadata:
  name: allow-specific-hostpath
spec:
  allowedHostPaths:
    - pathPrefix: /var/log/myapp
      readOnly: true
    - pathPrefix: /data/myapp
      readOnly: false

关键建议 :在生产环境中,尽量避免 HostPath。如果必须使用(例如节点级日志收集 agent),确保配置 readOnly: true 和精确的 allowedHostPaths 白名单。


四、Local PV:节点级持久存储的正确打开方式

Local PV 是 Kubernetes 1.14 正式 GA 的存储卷类型,专门用于有状态应用需要高性能本地盘的场景。它解决了 HostPath 的核心问题:Pod 调度和存储位置之间的绑定关系

4.1 Local PV vs HostPath:本质区别

维度 HostPath Local PV
调度亲和性 ❌ 无保证 ✅ 通过 nodeAffinity 约束到特定节点
持久性 ❌ Pod 删除即消失 ✅ Pod 删除后数据保留
PVC 绑定 ❌ 无法与 PVC 绑定 ✅ 支持 PVC 声明式绑定
动态 Provisioning ❌ 不支持 ✅ StorageClass 支持(需 CSI driver)
数据高可用 ❌ 单副本,节点故障即丢失 ❌ 同上(本地盘本质限制)

Local PV 的核心设计思想是:存储跟着节点走,Pod 也跟着存储走。两者都被 Kubernetes 调度系统约束到同一节点,自然解决了 HostPath 的调度矛盾。

4.2 Local PV 的创建与使用

方式一:静态 Provisioning(手动预分配)

yaml 复制代码
# Step 1: 在节点上准备存储目录(手动在节点上执行)
# mkdir -p /mnt/disk/ssd1

# Step 2: 创建 Local PV
apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv-ssd
spec:
  capacity:
    storage: 500Gi
  volumeMode: Filesystem
  accessModes:
    - ReadWriteOnce           # 单节点读写(Local PV 只支持 RWO)
  persistentVolumeReclaimPolicy: Retain   # 重要:本地盘数据珍贵,默认 Retain
  storageClassName: local-storage
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: node.kubernetes.io/storage-type
              operator: In
              values:
                - ssd-local
  local:
    path: /mnt/disk/ssd1
---
# Step 3: 创建 StorageClass(标记为延迟绑定)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer    # 关键:延迟绑定,等 Pod 调度后再绑定 PV

volumeBindingMode: WaitForFirstConsumer 是 Local PV 的关键参数------它告诉 Kubernetes:不要在 PVC 创建时就绑定 PV,而是等 Pod 被调度到某个节点后,再绑定到该节点上的 PV。如果先绑定 PV 再调度 Pod,而 Pod 因为资源不足无法调度到该节点,绑定就会失效。

方式二:TOPO-LVM + local-storage provisioner(社区方案)

手动创建 PV 不可扩展。社区提供了 sig-storage-local-static-provisioner 来自动发现节点上的存储资源并创建 Local PV:

bash 复制代码
helm install local-storage-provisioner \
  sig-storage-library/local-storage-provisioner \
  -n storage-system --create-namespace \
  --set storageClass.name=local-storage

该 provisioner 会自动扫描 /mnt/disk/... 等配置的路径,为每个发现的新目录创建对应的 Local PV。

4.3 Local PV 的适用场景

Local PV 不是银弹,其设计局限决定了适用场景:

  • 适合 :数据库(MySQL、PostgreSQL)、消息队列(Kafka、RocketMQ)、日志聚合(Elasticsearch Hot Node)等对 I/O 延迟敏感且可以接受单副本的有状态应用
  • 不适合:需要多副本高可用的分布式存储(这类场景应该用 CephFS/NFS/云厂商托管存储)

Local PV 本质上是将节点本地盘"伪装"成 PV,节点故障时 Pod 需要手动或配合 Operators 迁移到其他节点。生产中使用 Local PV 通常需要搭配专门的 StatefulSet 管理器(如 Rook-Ceph 或 OpenEBS)来处理故障转移。


五、PV/PVC:存储资源的声明式抽象

PV(PersistentVolume)和 PVC(PersistentVolumeClaim)是 Kubernetes 对存储资源的通用抽象层------管理员定义 PV(或通过 StorageClass 自动创建),应用声明式地申请 PVC。

5.1 PV 的生命周期

已删除状态
释放状态
已绑定状态
可用状态
kubectl apply -f pvc.yaml
kubectl delete pvc xxx
Retain 策略

手动处理
Delete 策略

自动删除
Recycle 策略

数据清空后可用
Available

已创建,未绑定
Bound

PVC 已绑定 PV

Pod 可使用
Released

PVC 已删除

数据仍保留

取决于 Reclaim Policy
Deleted

底层存储资源

已释放

PV 的状态转换中,Released 状态是最容易出问题的节点。

5.2 Reclaim Policy 的三种策略

策略 PVC 删除后行为 数据安全性 适用场景
Retain(默认) PV 保留,数据保留,进入 Released 状态 ✅ 最安全 生产环境、重要数据
Delete PV 和底层存储资源一起删除 ⚠️ 数据不可恢复 云厂商托管存储(默认)、临时数据
Recycle 清空数据,PV 重新进入 Available ⚠️ 数据清空不可恢复 已废弃,用 Dynamic Provisioning 替代

5.3 PVC 误删后的数据恢复:Retain 策略的救命用法

这是生产环境中非常重要但很少被提及的场景:PVC 误删后,数据能恢复吗?

答案取决于 PV 的 Reclaim Policy:

情况一:ReclaimPolicy = Retain(救回来了)

bash 复制代码
# Step 1: 发现 PVC 误删,PV 状态变为 Released
kubectl get pv
# NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM
# my-pv       100Gi      RWO            Retain           Released   default/my-pvc

# Step 2: 查看 PV 详情,确认数据仍在
kubectl describe pv my-pv
# Finalizers: [kubernetes.io/pv-protection]
# ...
# Claim: default/my-pvc (已删除的 PVC UID)

# Step 3: 创建新的 PVC(名称无所谓,关键是 storageClassName 和 resources 要匹配)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc-recovered
  namespace: default
spec:
  storageClassName: standard
  resources:
    requests:
      storage: 100Gi
  volumeName: my-pv    # 显式绑定到原 PV
bash 复制代码
kubectl apply -f my-pvc-recovered.yaml

# Step 4: 验证绑定成功,数据完整
kubectl get pvc my-pvc-recovered
# STATUS: Bound   VOLUME: my-pv

这个方法能成功的前提是:原 PV 的 storageClassName、容量、accessModes 与新 PVC 兼容,且 PV 处于 Released 状态而非 Deleted

情况二:ReclaimPolicy = Delete(几乎无法恢复)

PVC 删除时,云厂商的 CSI Driver 会同步删除云盘/云存储。数据直接丢失。这就是为什么生产环境强烈建议将 StorageClass 的默认 ReclaimPolicy 设为 Retain

5.4 StatefulSet 的 volumeClaimTemplates 与 PVC 绑定

StatefulSet 的 volumeClaimTemplates 为每个 Pod 实例创建一个独立的 PVC。这个机制是 StatefulSet 实现"稳定身份"的核心:

yaml 复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  serviceName: mysql
  replicas: 3
  selector:
    matchLabels:
      app: mysql
  template:
    metadata:
      labels:
        app: mysql
    spec:
      containers:
        - name: mysql
          image: mysql:8.0
          volumeMounts:
            - name: data
              mountPath: /var/lib/mysql
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: "standard"
        resources:
          requests:
            storage: 100Gi

创建后,Kubernetes 会自动生成三个 PVC:

  • data-mysql-0(绑定到 Pod mysql-0)
  • data-mysql-1(绑定到 Pod mysql-1)
  • data-mysql-2(绑定到 Pod mysql-2)

关键在于:Pod 名称是 Identity,PVC 绑定是 Identity 的一部分 。Pod mysql-0 崩溃后,Kubernetes 会创建一个新的同名 Pod,而新的 Pod 会自动绑定到原有的 data-mysql-0 PVC------数据不会丢失。这才是"Pod 名称固定"的真正含义:不是名字碰巧不变,而是 Kubernetes 保证 Identity 不变,从而 PVC 绑定关系保持

5.5 StatefulSet 缩容时的 PVC 行为

Kubernetes 1.27 引入的 whenScaled 策略解决了 StatefulSet 缩容时的 PVC 保留问题:

yaml 复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  volumeClaimTemplates:
    - metadata:
        name: data
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: "standard"
        resources:
          requests:
            storage: 100Gi
  # 新增:缩容时的 PVC 处理策略
  persistentVolumeClaimRetentionPolicy:
    whenDeleted: Retain    # StatefulSet 删除时,PVC 保留(默认 Retain)
    whenScaled: Retain     # 缩容时 PVC 保留(K8s 1.27+)
whenScaled 配置 缩容时 PVC 行为 数据安全 说明
whenScaled: Retain(推荐) PVC 保留,不删除 ✅ 安全 Pod 删除但 PVC/PV 仍在
whenScaled: Delete 缩容时 PVC 随之删除 ⚠️ 危险 数据永久丢失,不要在生产中使用
默认(无配置) 缩容时 PVC 保留 ✅ 安全 K8s 1.27+ 的默认行为

六、StorageClass:动态存储供给

手动创建 PV 不可扩展。StorageClass 通过动态 Provisioning 让存储资源按需创建------Pod 申请 PVC 时,StorageClass 的 provisioner 自动在底层存储系统中创建对应的卷。

6.1 StorageClass 的组成

yaml 复制代码
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: fast-ssd
provisioner: ebs.csi.aws.com           # CSI Driver 标识
parameters:
  type: gp3                            # AWS EBS 类型
  iops: "3000"
  throughput: "125"
volumeBindingMode: WaitForFirstConsumer  # 延迟绑定
allowVolumeExpansion: true               # 允许在线扩容
reclaimPolicy: Retain                    # 重要!

provisioner 是最关键的字段,它决定了谁来创建底层存储资源:

provisioner 存储后端 场景
kubernetes.io/aws-ebs AWS EBS AWS EKS
pd.csi.storage.gke.io GCP Persistent Disk GKE
disk.csi.aliyuncs.com 阿里云云盘 ACK
cephfs.csi.ceph.com CephFS 私有云
nfs.csi.k8s.io NFS Server 通用文件共享
kubernetes.io/no-provisioner 本地存储(静态) Local PV

6.2 CSI 架构:Out-of-Tree 存储驱动的标准

在 Kubernetes 1.14 之前,存储驱动是 In-Tree 的(代码在 K8s 核心仓库中)。In-Tree 驱动的问题在于:存储厂商每次更新驱动都需要跟随 K8s 版本发布,灵活性极差。

CSI(Container Storage Interface) 解决了这个问题------它是存储厂商独立于 K8s 核心仓库开发驱动的标准接口:
CSI_Components
Kubernetes
调用 CSI ControllerCreateVolume
gRPC
操作底层存储
PersistentVolume

对象
PersistentVolumeClaim

对象
CSI Driver

(第三方实现)
NodePlugin DaemonSet

在每个节点运行

注册 CSI Driver
ControllerPlugin

Deployment 部署

处理 Create/Delete Volume

和 Controller Publish
node-driver-registrar

Sidecar 容器

向 kubelet 注册 Driver
CSI_liveness_probe

Sidecar 容器

健康检查
云存储 / 分布式存储

CSI Driver 通常包含两个组件:

ControllerPlugin(也叫 External Provisioner) :运行在控制平面,通过 storage.k8s.io/v1CSIDriver 资源注册自己。当 PVC 被创建且 bound 到一个使用对应 StorageClass 的 PV 时,ControllerPlugin 收到通知,调用 CSI 的 ControllerCreateVolume 接口,在云存储中创建卷。

NodePlugin(DaemonSet) :运行在每个节点上,响应 NodeStageVolumeNodePublishVolume 调用------将云存储卷挂载到节点并暴露给 Pod。同时通过 node-driver-registrar sidecar 向 kubelet 注册 CSI Driver。

6.3 StorageClass 选型决策树













存储需求
是否需要

跨 Pod 共享?
是否需要

跨节点访问?
是否需要

Pod 删除后保留数据?
NFS / 云厂商

文件存储 (CFS/EFS)

storageClassName: nfs
云块存储

EBS / CloudDisk

单 Pod 绑定 (RWO)
EmptyDir

临时存储

medium: Memory / Disk
是否对 I/O

延迟敏感?
是否可以接受

单副本(节点故障=数据风险)?
云厂商托管存储

高可用多副本

读写性能适中
Local PV

高性能本地 SSD

nodeAffinity 约束
云厂商托管存储

高可用多副本

  • 跨可用区
    是否需要

动态 Provisioning?
StorageClass

  • 对应 CSI Driver
    手动创建 PV

静态供给
存储方案确定


七、验证命令清单

bash 复制代码
# 1. 查看所有 PV 和 PVC 状态
kubectl get pv,pvc -A

# 2. 查看 StorageClass 列表及默认 SC
kubectl get sc
kubectl get sc -o jsonpath='{.items[?(@.metadata.annotations.storageclass\.kubernetes\.io/is-default-class=="true")].metadata.name}'

# 3. 查看 Pod 使用的 PVC 及容量
kubectl get pod <pod-name> -o jsonpath='{.spec.volumes[*].persistentVolumeClaim.claimName}'
kubectl describe pvc <pvc-name> | grep -E "Volume|Status|Capacity"

# 4. 检查 Local PV 的节点亲和性是否正确
kubectl get pv <pv-name> -o jsonpath='{.spec.nodeAffinity}'

# 5. 验证 StatefulSet 缩容时的 PVC 保留策略
kubectl get statefulset <name> -o jsonpath='{.spec.persistentVolumeClaimRetentionPolicy}'

# 6. 查看 CSI Driver 运行状态
kubectl get csidriver
kubectl get pods -n kube-system -l app=csi

# 7. 在 Pod 内验证存储卷挂载和 I/O 性能
kubectl exec <pod-name> -- df -h /mnt/data
kubectl exec <pod-name> -- dd if=/dev/zero of=/mnt/data/test bs=1M count=100 oflag=direct

# 8. 测试 PVC 扩容(如果 allowVolumeExpansion: true)
kubectl patch pvc <pvc-name> -p '{"spec":{"resources":{"requests":{"storage":"200Gi"}}}}'

总结

Kubernetes 存储体系的核心是 PV/PVC 的两层抽象:管理员或 StorageClass 负责提供存储资源,应用通过 PVC 声明式申请。理解了这个抽象,就能理解所有存储卷类型的共同基础。

各类型存储的核心区别:

  • EmptyDir:Pod 生命周期,数据随 Pod 消亡而消失。适合临时共享和临时工作目录
  • HostPath:绕过 Kubernetes 抽象,访问宿主机目录。有严重安全风险,生产中尽量避免
  • Local PV:将节点本地盘纳入 K8s 存储抽象,有 nodeAffinity 调度约束。适合高性能有状态应用,但需接受单副本限制
  • 云厂商托管存储:通过 CSI 驱动接入,动态 Provisioning,高可用多副本。是生产环境最推荐的选择
  • Reclaim Policy :生产环境务必使用 Retain,这是误删 PVC 后数据恢复的唯一保障

StorageClass 的 volumeBindingMode: WaitForFirstConsumer 是 Local PV 的必备配置;StatefulSet 的 persistentVolumeClaimRetentionPolicy.whenScaled: Retain 是生产环境的保命配置------这两个参数经常被忽视,但都是数据安全的最后防线。


如果这篇文章对你有帮助,欢迎点赞、关注!

存储卷相关的生产故障排查,有哪些令你印象深刻的问题?欢迎在评论区交流。

相关推荐
网络安全许木2 小时前
自学渗透测试第20天(防火墙基础与规则配置)
运维·服务器·网络·网络安全·渗透测试
亚空间仓鼠2 小时前
Docker 容器技术入门与实践 (二):Dockerfile文件
运维·docker·容器
沉默中爆发的IT男2 小时前
BGP基础配置实验总结
linux·服务器·前端
遇见火星2 小时前
linux设置开启启动服务
linux·运维·服务器·nginx
亚空间仓鼠2 小时前
Docker 容器技术入门与实践 (一):命令与镜像、容器管理
运维·docker·容器
AI_大白2 小时前
Python + Redis 实时行情共享:WebSocket 数据流的订阅管理与断线恢复实践
python·架构
.柒宇.2 小时前
Python 运维实战:psutil 监控系统资源 + paramiko 远程管理服务器
运维·服务器·python
王的宝库2 小时前
【K8s】集群安全机制(二):授权(Authorization)详解与实战
学习·云原生·容器·kubernetes
ReaF_star2 小时前
K8s Pod调度【学习笔记】
笔记·学习·kubernetes