核心概念
目录
Overview
本文档向熟悉持久存储概念的 Kubernetes 管理员介绍 Container Object Storage Interface (COSI) 的核心资源和原理。COSI 提供了一种声明式机制来管理对象存储(如 AWS S3、MinIO 和 Ceph RGW),类似于现有的 Kubernetes 持久存储管理方式。
我们将介绍 COSI 中的三种主要资源——BucketClass、Bucket 和 BucketClaim,通过与 Kubernetes 存储资源的类比来阐明它们之间的关系和功能。
Core Resources
COSI 定义了三种核心资源:
1. BucketClass
作用域: 集群级别
对应 Kubernetes 概念: 类似于 StorageClass
BucketClass 由集群管理员创建,用于定义桶的具体类型或服务等级,包括地域位置、冗余策略和性能等级。
主要功能:
- 指定桶的删除策略(例如,BucketClaim 删除时是否删除底层桶)
- 指定 COSI 驱动(driverName)
- 定义供应商特定参数
YAML 示例:
apiVersion: objectstorage.k8s.io/v1alpha1
kind: BucketClass
metadata:
name: ceph-cosi-driver-class
deletionPolicy: Delete
driverName: ceph.objectstorage.k8s.io
parameters:
objectStoreUserSecretName: rook-ceph-object-user-object-store-user-for-cosi
objectStoreUserSecretNamespace: rook-ceph
2. Bucket
作用域: 集群级别
对应 Kubernetes 概念: 类似于 PersistentVolume (PV)
Bucket 表示 Kubernetes 中对外部对象存储系统(如 AWS S3、MinIO、Ceph RGW)中实际桶的抽象。
生命周期管理:
- 动态创建:当收到 BucketClaim 请求时,由 COSI 控制器自动创建。
3. BucketClaim
作用域: 命名空间级别
对应 Kubernetes 概念: 类似于 PersistentVolumeClaim (PVC)
BucketClaim 资源由应用开发者在其命名空间内创建,用于请求对象存储桶。
工作流程:
- 用户创建指定 BucketClass 的 BucketClaim。
- COSI 控制器检测请求,根据 BucketClass 定义动态创建对象存储后端的桶。
- 创建对应的 Bucket 资源并绑定到 BucketClaim。
- 生成包含桶访问凭据的 Secret,并自动挂载到请求该桶的 Pod 中。
YAML 示例:
apiVersion: objectstorage.k8s.io/v1alpha1
kind: BucketClaim
metadata:
name: my-app-bucket-claim
namespace: my-app-ns
spec:
bucketClassName: ceph-standard-replicated
protocol:
s3: {} # Defaults populated by the driver
Resource Interaction Workflow
以下流程展示了 COSI 资源的动态创建过程:
- 集群管理员 创建并维护 BucketClass。
- 命名空间用户 创建引用 BucketClass 的 BucketClaim。
- COSI 控制器 监听 BucketClaim,根据 BucketClass 定义动态创建桶。
- 控制器在 Kubernetes 中生成对应的 Bucket 资源。
- BucketClaim 与 Bucket 绑定。
- 创建包含存储凭据的 Secret 供 Pod 使用。
- Pod 挂载该 Secret 并访问对象存储。
Summary
| COSI 资源 | 作用域 | Kubernetes 类比 | 作用 |
|---|
| BucketClass | 集群级别 | StorageClass | 定义桶的类型和策略 |
| Bucket | 集群级别 | PersistentVolume (PV) | Kubernetes 对实际桶的抽象 |
| BucketClaim | 命名空间级别 | PersistentVolumeClaim (PVC) | 用户请求桶资源 |
通过利用 COSI 提供的标准化 API,Kubernetes 管理员可以声明式且可移植地管理对象存储资源,大大提升应用与对象存储在 Kubernetes 集群中的集成效率。