Основные понятия
Обзор
Этот документ знакомит администраторов Kubernetes, знакомых с концепциями постоянного хранения, с основными ресурсами и принципами Container Object Storage Interface (COSI). COSI предоставляет декларативный механизм управления объектным хранилищем (таким как AWS S3, MinIO и Ceph RGW), аналогичный существующим подходам управления постоянным хранилищем в Kubernetes.
Мы рассмотрим три основных ресурса в COSI — BucketClass, Bucket и BucketClaim — проводя аналогии с ресурсами хранения Kubernetes для прояснения их взаимосвязей и функционала.
Основные ресурсы
COSI определяет три ключевых ресурса:
1. BucketClass
Область видимости: на уровне кластера
Аналог в Kubernetes: аналог StorageClass
BucketClass создаётся администраторами кластера для определения конкретных типов или уровней сервиса бакетов, включая региональное расположение, политики избыточности и уровни производительности.
Основные функции:
- Определяет политику удаления бакета (например, удалять ли сам бакет при удалении BucketClaim)
- Указывает драйвер COSI (driverName)
- Задаёт параметры, специфичные для поставщика
Пример YAML:
2. Bucket
Область видимости: на уровне кластера
Аналог в Kubernetes: аналог PersistentVolume (PV)
Bucket представляет собой абстракцию реального бакета, существующего во внешней системе объектного хранения (например, AWS S3, MinIO, Ceph RGW) внутри Kubernetes.
Управление жизненным циклом:
- Динамическое создание: автоматически создаётся контроллером COSI при получении запроса BucketClaim.
3. BucketClaim
Область видимости: в пределах namespace
Аналог в Kubernetes: аналог PersistentVolumeClaim (PVC)
Ресурсы BucketClaim создаются разработчиками приложений в своих пространствах имён для запроса бакетов объектного хранилища.
Последовательность действий:
- Пользователь создаёт BucketClaim, указывая BucketClass.
- Контроллер COSI обнаруживает запрос и динамически создаёт бакет в бекенде объектного хранилища на основе определения BucketClass.
- Создаётся соответствующий ресурс Bucket, который связывается с BucketClaim.
- Генерируется Secret с учётными данными доступа к бакету, который автоматически монтируется в Pod’ы, запрашивающие бакет.
Пример YAML:
Взаимодействие ресурсов
Ниже описан процесс динамического создания ресурсов COSI на практике:
- Администратор кластера создаёт и поддерживает BucketClass.
- Пользователь namespace создаёт BucketClaim с ссылкой на BucketClass.
- Контроллер COSI обнаруживает BucketClaim и динамически создаёт бакет на основе определения BucketClass.
- Контроллер создаёт соответствующий ресурс Bucket в Kubernetes.
- BucketClaim и Bucket связываются.
- Создаётся Secret с учётными данными для использования в Pod’ах.
- Pod’ы монтируют Secret и получают доступ к объектному хранилищу.
Итог
Используя стандартизированные API, предоставляемые COSI, администраторы Kubernetes могут декларативно и переносимо управлять ресурсами объектного хранилища, значительно повышая эффективность интеграции приложений с объектным хранилищем в кластерах Kubernetes.