Kubernetes
  • 序言
  • 基礎入門
    • Kubernetes 簡介
    • Kubernetes 基本概念
    • Kubernetes 101
    • Kubernetes 201
    • Kubernetes 集群
  • 核心原理
    • 核心原理
    • 架構原理
    • 設計理念
    • 核心組件
      • etcd
      • kube-apiserver
      • kube-scheduler
      • kube-controller-manager
      • kubelet
      • kube-proxy
      • kube-dns
      • Federation
      • kubeadm
      • hyperkube
      • kubectl
    • 資源對象
      • Autoscaling
      • ConfigMap
      • CronJob
      • CustomResourceDefinition
      • DaemonSet
      • Deployment
      • Ingress
      • Job
      • LocalVolume
      • Namespace
      • NetworkPolicy
      • Node
      • PersistentVolume
      • Pod
      • PodPreset
      • ReplicaSet
      • Resource Quota
      • Secret
      • SecurityContext
      • Service
      • ServiceAccount
      • StatefulSet
      • Volume
  • 部署配置
    • 部署指南
    • kubectl 安裝
    • 單機部署
    • 特性開關
    • 最佳配置
    • 版本支持
    • 集群部署
      • kubeadm
      • kops
      • Kubespray
      • Azure
      • Windows
      • LinuxKit
      • kubeasz
    • 附加組件
      • Addon-manager
      • DNS
      • Dashboard
      • 監控
      • 日誌
      • Metrics
      • GPU
      • Cluster Autoscaler
      • ip-masq-agent
    • Kubernetes-The-Hard-Way
      • 準備部署環境
      • 安裝必要工具
      • 創建計算資源
      • 配置創建證書
      • 配置生成配置
      • 配置生成密鑰
      • 部署 Etcd 群集
      • 部署控制節點
      • 部署計算節點
      • 配置 Kubectl
      • 配置網絡路由
      • 部署 DNS 擴展
      • 煙霧測試
      • 刪除集群
  • 插件擴展
    • API 擴展
      • Aggregation
      • CustomResourceDefinition
    • 訪問控制
      • 認證
      • RBAC 授權
      • 准入控制
    • Scheduler 擴展
    • 網絡插件
      • CNI
      • Flannel
      • Calico
      • Weave
      • Cilium
      • OVN
      • Contiv
      • SR-IOV
      • Romana
      • OpenContrail
      • Kuryr
    • 運行時插件 CRI
      • CRI-tools
      • Frakti
    • 存儲插件
      • 容器存儲接口 CSI
      • FlexVolume
      • glusterfs
    • 網絡策略
    • Ingress Controller
      • Ingress + Letsencrypt
      • minikube Ingress
      • Traefik Ingress
      • Keepalived-VIP
    • Cloud Provider 擴展
    • Device 插件
  • 服務治理
    • 服務治理
      • 一般準則
      • 滾動升級
      • Helm
      • Operator
      • Service Mesh
      • Linkerd
      • Linkerd2
    • Istio
      • 安裝
      • 流量管理
      • 安全管理
      • 策略管理
      • 度量管理
      • 排錯
      • 社區
    • Devops
      • Draft
      • Jenkins X
      • Spinnaker
      • Kompose
      • Skaffold
      • Argo
      • Flux GitOps
  • 實踐案例
    • 實踐概覽
    • 資源控制
    • 集群高可用
    • 應用高可用
    • 調試
    • 端口映射
    • 端口轉發
    • 用戶管理
    • GPU
    • HugePage
    • 安全
    • 審計
    • 備份恢復
    • 證書輪換
    • 大規模集群
    • 大數據與機器學習
      • Spark
      • Tensorflow
    • Serverless
  • 排錯指南
    • 排錯概覽
    • 集群排錯
    • Pod 排錯
    • 網絡排錯
    • PV 排錯
      • AzureDisk
      • AzureFile
    • Windows 排錯
    • 雲平臺排錯
      • Azure
    • 排錯工具
  • 社區貢獻
    • 開發指南
    • 單元測試和集成測試
    • 社區貢獻
  • 附錄
    • 生態圈
    • 學習資源
    • 國內鏡像
    • 如何貢獻
    • 參考文檔
Powered by GitBook
On this page
  • 原理
  • 配置
  • 示例
  • 參考文檔
  1. 插件擴展
  2. 存儲插件

容器存儲接口 CSI

Previous存儲插件NextFlexVolume

Last updated 1 year ago

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

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

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 插件:

該部署方法包括:

  • StatefuelSet:副本數爲 1 保證只有一個實例運行,它包含三個容器

    • 用戶實現的 CSI 插件

  • Daemonset:將 CSI 插件運行在每個 Node 上,以便 Kubelet 可以調用。它包含 2 個容器

    • 用戶實現的 CSI 插件

配置

  • API Server 配置:

--allow-privileged=true
--feature-gates=CSIPersistentVolume=true,MountPropagation=true
--runtime-config=storage.k8s.io/v1alpha1=true
  • Controller-manager 配置:

--feature-gates=CSIPersistentVolume=true
  • Kubelet 配置:

--allow-privileged=true
--feature-gates=CSIPersistentVolume=true,MountPropagation=true

示例

Name
Status
More Information

v0.2.0

A Container Storage Interface (CSI) Storage Plug-in for Cinder

v0.0.1 (alpha)

A Container Storage Interface (CSI) Driver for DigitalOcean Block Storage

v0.0.1(alpha)

A Container Storage Interface (CSI) Driver for AWS Elastic Block Storage (EBS)

Alpha

A Container Storage Interface (CSI) Storage Plugin for Google Compute Engine Persistent Disk

Beta

0.2.0

v0.2.0

A Container Storage Interface (CSI) Storage RBD Plug-in for Ceph

v0.2.0

A Container Storage Interface (CSI) Storage Plug-in for CephFS

v0.1.0

A Container Storage Interface (CSI) Storage Plugin for DellEMC ScaleIO

v0.1.0

A Container Storage Interface (CSI) Storage Plug-in for VMware vSphere

v0.2.0 (alpha)

v0.2.0 (alpha)

Multi-vendor CSI plugin supporting over 80 storage drivers to provide block and mount storage to Container Orchestration systems.

beta

A Container Storage Interface (CSI) Storage Driver for Nutanix

v0.2.0

A Container Storage Interface (CSI) Plugin for Quobyte

下面以 NFS 爲例來看一下 CSI 插件的使用方法。

首先需要部署 NFS 插件:

git clone https://github.com/kubernetes-csi/drivers
cd drivers/pkg/nfs
kubectl create -f deploy/kubernetes

然後創建一個使用 NFS 存儲卷的容器

kubectl create -f examples/kubernetes/nginx.yaml

該例中已直接創建 PV 的方式使用 NFS

apiVersion: v1
kind: PersistentVolume
metadata:
  name: data-nfsplugin
  labels:
    name: data-nfsplugin
  annotations:
    csi.volume.kubernetes.io/volume-attributes: '{"server":"10.10.10.10","share":"share"}'
spec:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 100Gi
  csi:
    driver: csi-nfsplugin
    volumeHandle: data-id
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: data-nfsplugin
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi
  selector:
    matchExpressions:
    - key: name
      operator: In
      values: ["data-nfsplugin"]

也可以用在 StorageClass 中

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: csi-sc-nfsplugin
provisioner: csi-nfsplugin
parameters:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: request-for-storage
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: csi-sc-nfsplugin

參考文檔

,

Register

:Kubernetes 提供的 sidecar 容器,它監聽 VolumeAttachment 和 PersistentVolume 對象的變化情況,並調用 CSI 插件的 ControllerPublishVolume 和 ControllerUnpublishVolume 等 API 將 Volume 掛載或卸載到指定的 Node 上

:Kubernetes 提供的 sidecar 容器,它監聽 PersistentVolumeClaim 對象的變化情況,並調用 CSI 插件的 ControllerPublish 和 ControllerUnpublish 等 API 管理 Volume

:註冊 CSI 插件到 kubelet 中,並初始化 NodeId(即給 Node 對象增加一個 Annotation csi.volume.kubernetes.io/nodeid)

Kubernetes 提供了幾個 ,包括 NFS、ISCSI、HostPath、Cinder 以及 FlexAdapter 等。在實現 CSI 插件時,這些示例可以用作參考。

For more information, please visit and

CSI implementation is available which can be used as an example also.

A Container Storage Interface (CSI) Storage Plug-in for NetApp's container storage orchestrator

這裏
External Attacher
External Provisioner
Driver Registrar
CSI 示例
Kubernetes CSI Documentation
CSI Volume Plugins in Kubernetes Design Doc
v0.3.0
v1.0.0
CSIDriver Object
Cinder
DigitalOcean Block Storage
AWS Elastic Block Storage
GCE Persistent Disk
OpenSDS
releases
https://github.com/opensds/nbp/tree/master/csi
Portworx
here
RBD
CephFS
ScaleIO
vSphere
NetApp
Trident
Ember CSI
Nutanix
Quobyte
Recommended CSI Deployment Diagram