核心概念
概述
熟悉持久化存储概念的 Kubernetes 管理员可以使用 Container Object Storage Interface (COSI) 资源,通过声明式 Kubernetes API 管理对象存储。COSI 提供了一种用于管理对象存储的声明式机制,类似于现有的 Kubernetes 持久化存储管理方式。
COSI 使用三种主要资源:BucketClass、Bucket 和 BucketClaim。
核心资源
COSI 定义了三种基本资源:
1. BucketClass
范围: 集群级别
对应的 Kubernetes 概念: 类似于 StorageClass
BucketClass 由集群管理员创建,用于定义桶的特定类型或服务级别,包括地域位置、冗余策略和性能层级。
主要功能:
- 指定桶删除策略(例如,在 BucketClaim 删除时是否删除底层桶)
- 指定 COSI driver(driverName)
- 定义供应商特定参数
YAML 示例:
2. Bucket
范围: 集群级别
对应的 Kubernetes 概念: 类似于 PersistentVolume (PV)
Bucket 表示外部对象存储系统中实际桶的 Kubernetes 抽象。
生命周期管理:
- 动态创建:当收到 BucketClaim 请求时,由 COSI controller 自动创建。
3. BucketClaim
范围: 命名空间级别
对应的 Kubernetes 概念: 类似于 PersistentVolumeClaim (PVC)
应用开发者在各自的命名空间中创建 BucketClaim 资源,以请求对象存储桶。
工作流程:
- 用户创建一个指定 BucketClass 的 BucketClaim。
- COSI controller 检测到该请求,并根据 BucketClass 定义,在对象存储后端动态创建桶。
- 创建对应的 Bucket 资源,并将其绑定到 BucketClaim。
- 生成一个包含桶访问凭据的 Secret,并自动挂载到请求该桶的 Pods 中。
YAML 示例:
资源交互工作流
以下流程展示了 COSI 资源在实践中的动态创建过程:
- 集群管理员 创建并维护 BucketClass。
- 命名空间用户 创建引用该 BucketClass 的 BucketClaim。
- COSI controller 观察到 BucketClaim,并根据 BucketClass 定义动态创建桶。
- controller 在 Kubernetes 中生成对应的 Bucket 资源。
- BucketClaim 和 Bucket 相互绑定。
- 创建一个包含存储凭据的 Secret 供 Pod 使用。
- Pods 挂载该 Secret 并访问对象存储。
总结
通过利用 COSI 提供的标准化 API,Kubernetes 管理员可以以声明式和可移植的方式管理对象存储资源,显著提升 Kubernetes 集群中应用与对象存储之间的集成效率。