Kubernetes CSI 工作原理详解:Kubernetes 是如何对接存储系统的?¶
文章摘要¶
在 Kubernetes 中,Pod 是临时资源。
当 Pod 被删除或重新创建时,容器内部的数据通常也会随之丢失。
因此 Kubernetes 需要一种统一的方式来对接各种存储系统。
这就是 CSI(Container Storage Interface)存在的意义。
本文将详细讲解 CSI 的设计目标、工作原理、Volume 生命周期以及 Kubernetes 如何通过 CSI 对接 NFS、Ceph、Longhorn、云盘等存储系统。
学习目标¶
阅读完本文后,你将掌握:
- 什么是 CSI
- 为什么 Kubernetes 需要 CSI
- CSI 的工作原理
- CSI Driver 是什么
- Volume 生命周期
- 动态存储供应机制
- Kubernetes 如何对接存储系统
- 常见 CSI 插件介绍
适用人群¶
本文适合:
- Kubernetes 初学者
- Linux 运维工程师
- DevOps 工程师
- 云原生学习者
- Kubernetes 面试准备人员
为什么需要 CSI?¶
先思考一个问题。
创建一个 Pod:
运行后:
内部写入数据:
如果 Pod 被删除:
然后重新创建。
会发现:
原因很简单:
因此 Kubernetes 需要:
能力。
Kubernetes 为什么不直接管理存储?¶
因为存储系统种类太多。
例如:
如果 Kubernetes 为每种存储都单独开发代码:
因此 Kubernetes 采用:
方案。
这就是 CSI。
什么是 CSI?¶
CSI 全称:
中文:
它本质上是一套标准规范。
类似:
USB 定义:
而:
是具体实现。
同样:
定义:
而:
则是具体实现。
CSI 在 Kubernetes 中的位置¶
架构如下:
例如:
或者:
CSI Driver 是什么?¶
很多新人容易混淆。
CSI:
CSI Driver:
例如:
类似:
而:
则是:
真正工作的组件。
Kubernetes 存储创建流程¶
假设创建:
流程:
最终:
整个过程自动完成。
什么是 Volume?¶
简单理解:
例如:
Volume 创建后:
使用。
Volume 生命周期¶
CSI 主要管理:
Create Volume¶
创建磁盘。
Attach Volume¶
挂载到节点。
Mount Volume¶
挂载到容器。
Unmount Volume¶
卸载。
Delete Volume¶
删除磁盘。
流程如下:
CSI 与 Kubelet 的关系¶
这里非常重要。
真正负责挂载存储的是:
CSI Driver 负责:
例如:
CSI Driver:
Kubelet:
动态存储供应¶
这是 CSI 最大优势之一。
传统模式:
然后:
过程繁琐。
CSI 支持:
用户提交:
系统自动:
无需人工干预。
StorageClass 的作用¶
StorageClass 可以理解为:
例如:
用户只需要:
系统自动创建对应存储。
常见 CSI 插件¶
NFS CSI¶
最简单。
适合实验环境。
架构:
Ceph CSI¶
生产环境常见。
支持:
Longhorn CSI¶
轻量级云原生存储。
适合:
AWS EBS CSI¶
AWS 官方插件。
阿里云 Disk CSI¶
阿里云官方实现。
腾讯云 CBS CSI¶
腾讯云官方实现。
CSI 与 CRI 的区别¶
面试经常考。
| 项目 | CRI | CSI |
|---|---|---|
| 作用 | 容器接口 | 存储接口 |
| 对接对象 | Container Runtime | Storage System |
| 使用场景 | 创建容器 | 创建存储 |
| 代表实现 | Containerd | Ceph CSI |
简单记忆:
生产环境最佳实践¶
优先使用 CSI¶
不要使用已废弃的 In-Tree 插件。
使用 StorageClass¶
避免手工创建 PV。
监控存储容量¶
关注:
定期测试恢复¶
验证:
流程。
常见故障排查¶
PVC 一直 Pending¶
查看:
通常原因:
Volume 挂载失败¶
查看:
CSI Driver 异常¶
查看:
确认 CSI 组件状态。
存储容量不足¶
查看:
运维排查命令¶
查看 PVC:
查看 PV:
查看 StorageClass:
查看 CSI Driver:
查看挂载情况:
面试常见问题¶
CSI 的作用是什么?¶
统一 Kubernetes 与存储系统之间的接口。
CSI Driver 是什么?¶
具体存储插件实现。
CSI 与 StorageClass 的关系?¶
StorageClass 通过 CSI 创建存储。
CSI 与 CRI 的区别?¶
CRI 管容器。
CSI 管存储。
Kubernetes 自带存储吗?¶
不提供。
通过 CSI 对接外部存储。
FAQ¶
不安装 CSI 可以使用 Kubernetes 吗?¶
可以。
但无法使用动态存储。
CSI 一定需要 PV 和 PVC 吗?¶
绝大多数场景需要。
CSI 支持本地磁盘吗?¶
支持。
例如:
方案。
总结¶
CSI 是 Kubernetes 存储体系的核心接口标准。
它负责:
- 创建存储
- 删除存储
- 挂载存储
- 动态供应存储
可以记住一句话:
CRI 负责让 Kubernetes 管理容器,而 CSI 负责让 Kubernetes 管理存储。