Kubernetes指南
Linux性能优化实战
eBPF 核心技术与实战
SDN指南
个人博客
搜索文档…
中文
序言
基础入门
Kubernetes 简介
Kubernetes 基本概念
Kubernetes 101
Kubernetes 201
Kubernetes 集群
核心原理
核心原理
架构原理
设计理念
核心组件
资源对象
部署配置
部署指南
kubectl 安装
单机部署
特性开关
最佳配置
版本支持
集群部署
附加组件
Kubernetes-The-Hard-Way
插件扩展
API 扩展
访问控制
Scheduler 扩展
网络插件
运行时插件 CRI
存储插件
容器存储接口 CSI
FlexVolume
glusterfs
网络策略
Ingress Controller
Cloud Provider 扩展
Device 插件
服务治理
服务治理
Istio
Devops
实践案例
实践概览
资源控制
集群高可用
应用高可用
调试
端口映射
端口转发
用户管理
GPU
HugePage
安全
审计
备份恢复
证书轮换
大规模集群
大数据与机器学习
Serverless
排错指南
排错概览
集群排错
Pod 排错
网络排错
PV 排错
Windows 排错
云平台排错
排错工具
社区贡献
开发指南
单元测试和集成测试
社区贡献
附录
生态圈
学习资源
国内镜像
如何贡献
参考文档
由
GitBook
提供支持
容器存储接口 CSI
Container Storage Interface (CSI) 是从 v1.9 引入的容器存储接口,并于 v1.13 版本正式 GA。实际上,CSI 是整个容器生态的标准存储接口,同样适用于 Mesos、Cloud Foundry 等其他的容器集群调度系统。
版本信息
Kubernetes
CSI Spec
Status
v1.9
v0.1.0
Alpha
v1.10
v0.2.0
Beta
v1.11-v1.12
v0.3.0
Beta
v1.13
v0.3.0
,
v1.0.0
GA
Sidecar 容器版本
Container Name
Description
CSI spec
Latest Release Tag
external-provisioner
Watch PVC and create PV
v1.0.0
v1.0.1
external-attacher
Operate VolumeAttachment
v1.0.0
v1.0.1
external-snapshotter
Operate VolumeSnapshot
v1.0.0
v1.0.1
node-driver-registrar
Register kubelet plugin
v1.0.0
v1.0.2
cluster-driver-registrar
Register
CSIDriver Object
v1.0.0
v1.0.1
livenessprobe
Monitors health of CSI driver
v1.0.0
v1.0.2
原理
类似于 CRI,CSI 也是基于 gRPC 实现。详细的 CSI SPEC 可以参考
这里
,它要求插件开发者要实现三个 gRPC 服务:
Identity Service
:用于 Kubernetes 与 CSI 插件协调版本信息
Controller Service
:用于创建、删除以及管理 Volume 存储卷
Node Service
:用于将 Volume 存储卷挂载到指定的目录中以便 Kubelet 创建容器时使用(需要监听在
/var/lib/kubelet/plugins/[SanitizedCSIDriverName]/csi.sock
)
由于 CSI 监听在 unix socket 文件上, kube-controller-manager 并不能直接调用 CSI 插件。为了协调 Volume 生命周期的管理,并方便开发者实现 CSI 插件,Kubernetes 提供了几个 sidecar 容器并推荐使用下述方法来部署 CSI 插件:
Recommended CSI Deployment Diagram
该部署方法包括:
StatefuelSet:副本数为 1 保证只有一个实例运行,它包含三个容器
用户实现的 CSI 插件
External Attacher
:Kubernetes 提供的 sidecar 容器,它监听
VolumeAttachment
和
PersistentVolume
对象的变化情况,并调用 CSI 插件的 ControllerPublishVolume 和 ControllerUnpublishVolume 等 API 将 Volume 挂载或卸载到指定的 Node 上
External Provisioner
:Kubernetes 提供的 sidecar 容器,它监听
PersistentVolumeClaim
对象的变化情况,并调用 CSI 插件的
ControllerPublish
和
ControllerUnpublish
等 API 管理 Volume
Daemonset:将 CSI 插件运行在每个 Node 上,以便 Kubelet 可以调用。它包含 2 个容器
用户实现的 CSI 插件
Driver Registrar
:注册 CSI 插件到 kubelet 中,并初始化
NodeId
(即给 Node 对象增加一个 Annotation
csi.volume.kubernetes.io/nodeid
)
配置
API Server 配置:
1
--allow-privileged
=
true
2
--feature-gates
=
CSIPersistentVolume
=
true,MountPropagation
=
true
3
--runtime-config
=
storage.k8s.io/v1alpha1
=
true
Copied!
Controller-manager 配置:
1
--feature-gates
=
CSIPersistentVolume
=
true
Copied!
Kubelet 配置:
1
--allow-privileged
=
true
2
--feature-gates
=
CSIPersistentVolume
=
true,MountPropagation
=
true
Copied!
示例
Kubernetes 提供了几个
CSI 示例
,包括 NFS、ISCSI、HostPath、Cinder 以及 FlexAdapter 等。在实现 CSI 插件时,这些示例可以用作参考。
Name
Status
More Information
Cinder
v0.2.0
A Container Storage Interface (CSI) Storage Plug-in for Cinder
DigitalOcean Block Storage
v0.0.1 (alpha)
A Container Storage Interface (CSI) Driver for DigitalOcean Block Storage
AWS Elastic Block Storage
v0.0.1(alpha)
A Container Storage Interface (CSI) Driver for AWS Elastic Block Storage (EBS)
GCE Persistent Disk
Alpha
A Container Storage Interface (CSI) Storage Plugin for Google Compute Engine Persistent Disk
OpenSDS
Beta
For more information, please visit
releases
and
https://github.com/opensds/nbp/tree/master/csi
Portworx
0.2.0
CSI implementation is available
here
which can be used as an example also.
RBD
v0.2.0
A Container Storage Interface (CSI) Storage RBD Plug-in for Ceph
CephFS
v0.2.0
A Container Storage Interface (CSI) Storage Plug-in for CephFS
ScaleIO
v0.1.0
A Container Storage Interface (CSI) Storage Plugin for DellEMC ScaleIO
vSphere
v0.1.0
A Container Storage Interface (CSI) Storage Plug-in for VMware vSphere
NetApp
v0.2.0 (alpha)
A Container Storage Interface (CSI) Storage Plug-in for NetApp's
Trident
container storage orchestrator
Ember CSI
v0.2.0 (alpha)
Multi-vendor CSI plugin supporting over 80 storage drivers to provide block and mount storage to Container Orchestration systems.
Nutanix
beta
A Container Storage Interface (CSI) Storage Driver for Nutanix
Quobyte
v0.2.0
A Container Storage Interface (CSI) Plugin for Quobyte
下面以 NFS 为例来看一下 CSI 插件的使用方法。
首先需要部署 NFS 插件:
1
git
clone https://github.com/kubernetes-csi/drivers
2
cd
drivers/pkg/nfs
3
kubectl create -f deploy/kubernetes
Copied!
然后创建一个使用 NFS 存储卷的容器
1
kubectl create -f examples/kubernetes/nginx.yaml
Copied!
该例中已直接创建 PV 的方式使用 NFS
1
apiVersion
:
v1
2
kind
:
PersistentVolume
3
metadata
:
4
name
:
data
-
nfsplugin
5
labels
:
6
name
:
data
-
nfsplugin
7
annotations
:
8
csi.volume.kubernetes.io/volume-attributes
:
'{"server":"10.10.10.10","share":"share"}'
9
spec
:
10
accessModes
:
11
-
ReadWriteOnce
12
capacity
:
13
storage
:
100Gi
14
csi
:
15
driver
:
csi
-
nfsplugin
16
volumeHandle
:
data
-
id
17
---
18
apiVersion
:
v1
19
kind
:
PersistentVolumeClaim
20
metadata
:
21
name
:
data
-
nfsplugin
22
spec
:
23
accessModes
:
24
-
ReadWriteOnce
25
resources
:
26
requests
:
27
storage
:
100Gi
28
selector
:
29
matchExpressions
:
30
-
key
:
name
31
operator
:
In
32
values
:
[
"data-nfsplugin"
]
Copied!
也可以用在 StorageClass 中
1
kind
:
StorageClass
2
apiVersion
:
storage.k8s.io/v1
3
metadata
:
4
name
:
csi
-
sc
-
nfsplugin
5
provisioner
:
csi
-
nfsplugin
6
parameters
:
7
8
---
9
apiVersion
:
v1
10
kind
:
PersistentVolumeClaim
11
metadata
:
12
name
:
request
-
for
-
storage
13
spec
:
14
accessModes
:
15
-
ReadWriteOnce
16
resources
:
17
requests
:
18
storage
:
5Gi
19
storageClassName
:
csi
-
sc
-
nfsplugin
Copied!
参考文档
Kubernetes CSI Documentation
CSI Volume Plugins in Kubernetes Design Doc
插件扩展 - 以前
存储插件
下一个
FlexVolume
最近更新
1yr ago
复制链接
内容
原理
配置
示例
参考文档