核心概念

概述

熟悉持久化存储概念的 Kubernetes 管理员可以使用 Container Object Storage Interface (COSI) 资源,通过声明式 Kubernetes API 管理对象存储。COSI 提供了一种用于管理对象存储的声明式机制,类似于现有的 Kubernetes 持久化存储管理方式。

COSI 使用三种主要资源:BucketClassBucketBucketClaim

核心资源

COSI 定义了三种基本资源:

1. BucketClass

范围: 集群级别
对应的 Kubernetes 概念: 类似于 StorageClass

BucketClass 由集群管理员创建,用于定义桶的特定类型或服务级别,包括地域位置、冗余策略和性能层级。

主要功能:

  • 指定桶删除策略(例如,在 BucketClaim 删除时是否删除底层桶)
  • 指定 COSI driver(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 抽象。

生命周期管理:

  • 动态创建:当收到 BucketClaim 请求时,由 COSI controller 自动创建。

3. BucketClaim

范围: 命名空间级别
对应的 Kubernetes 概念: 类似于 PersistentVolumeClaim (PVC)

应用开发者在各自的命名空间中创建 BucketClaim 资源,以请求对象存储桶。

工作流程:

  1. 用户创建一个指定 BucketClass 的 BucketClaim。
  2. COSI controller 检测到该请求,并根据 BucketClass 定义,在对象存储后端动态创建桶。
  3. 创建对应的 Bucket 资源,并将其绑定到 BucketClaim。
  4. 生成一个包含桶访问凭据的 Secret,并自动挂载到请求该桶的 Pods 中。

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

资源交互工作流

以下流程展示了 COSI 资源在实践中的动态创建过程:

  1. 集群管理员 创建并维护 BucketClass。
  2. 命名空间用户 创建引用该 BucketClass 的 BucketClaim。
  3. COSI controller 观察到 BucketClaim,并根据 BucketClass 定义动态创建桶。
  4. controller 在 Kubernetes 中生成对应的 Bucket 资源。
  5. BucketClaim 和 Bucket 相互绑定。
  6. 创建一个包含存储凭据的 Secret 供 Pod 使用。
  7. Pods 挂载该 Secret 并访问对象存储。

总结

COSI Resource范围Kubernetes 类比目的
BucketClass集群级别StorageClass定义桶类型和策略
Bucket集群级别PersistentVolume (PV)实际桶的 Kubernetes 抽象
BucketClaim命名空间级别PersistentVolumeClaim (PVC)用户对桶资源的请求

通过利用 COSI 提供的标准化 API,Kubernetes 管理员可以以声明式和可移植的方式管理对象存储资源,显著提升 Kubernetes 集群中应用与对象存储之间的集成效率。