Как CRD (Custom Resource Definition) в Kubernetes связан с облачными сервисами?

«Как CRD (Custom Resource Definition) в Kubernetes связан с облачными сервисами?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CRD расширяет API Kubernetes, позволяя управлять не только встроенными объектами (Pod, Service), но и внешними ресурсами, включая облачные сервисы. Связь реализуется через операторы (Operators) или контроллеры.

Типичный паттерн "Kubernetes как облачная консоль":

  1. Разработчик создает манифест для пользовательского ресурса (Custom Resource), определенного через CRD (например, PostgreSQLCluster или S3Bucket).
  2. Оператор, работающий в кластере, отслеживает создание таких ресурсов.
  3. Оператор, используя облачные credentials (из Secret), делает вызовы к API облачного провайдера (AWS RDS, Google Cloud SQL, Azure Blob Storage) для создания реального сервиса.
  4. Статус облачного ресурса (готов, ошибка) отражается в статусе пользовательского ресурса в Kubernetes.

Пример: Установка оператора Crossplane для управления AWS ресурсами.

  1. CRD определяет новый тип ресурса:
    # Пример упрощенного CRD для облачной базы данных (от оператора)
    apiVersion: apiextensions.k8s.io/v1
    kind: CustomResourceDefinition
    metadata:
      name: rdsinstances.database.aws.example.com
    spec:
      group: database.aws.example.com
      names:
        kind: RDSInstance
        plural: rdsinstances
  2. Разработчик создает облачный ресурс через Kubernetes-манифест:
    apiVersion: database.aws.example.com/v1alpha1
    kind: RDSInstance
    metadata:
      name: my-production-db
    spec:
      engine: postgres
      instanceClass: db.t3.small
      storageGB: 20
      region: us-east-1

Преимущества: Единый интерфейс (kubectl), GitOps (манифесты в репозитории), управление жизненным циклом через Kubernetes.