--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.17.0 name: queueservices.sqs.kube5s.ru spec: group: sqs.kube5s.ru names: kind: QueueService listKind: QueueServiceList plural: queueservices singular: queueservice scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.tenantId name: Tenant type: string - jsonPath: .status.phase name: Phase type: string - jsonPath: .status.endpoint name: Endpoint type: string - jsonPath: .metadata.creationTimestamp name: Age type: date name: v1alpha1 schema: openAPIV3Schema: description: |- QueueService — управляет жизненным циклом ElasticMQ инстанса для тенанта. Каждый QueueService CR = один ElasticMQ pod + Service + Ingress + PVC + Secret. properties: apiVersion: description: |- APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: description: |- Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: QueueServiceSpec — желаемое состояние QueueService (параметры тенанта). properties: memoryMB: default: 64 description: |- MemoryMB — лимит памяти для ElasticMQ pod в мегабайтах. ElasticMQ Native (GraalVM) в idle потребляет ~30MB. format: int32 maximum: 1024 minimum: 32 type: integer persistence: default: true description: |- Persistence — включить H2 persistence для сохранения сообщений при рестарте pod. Если false — сообщения in-memory only, теряются при перезапуске. type: boolean storageMB: default: 512 description: |- StorageMB — размер PVC для H2 persistence в мегабайтах. H2 БД хранит очереди и сообщения между рестартами. format: int32 maximum: 10240 minimum: 128 type: integer tenantId: description: |- TenantID — уникальный идентификатор тенанта. Используется в именах ресурсов (sqs-{tenantId}), namespace (sless-fn-{tenantId}), и в Ingress path (/sqs/{tenantId}). maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([a-z0-9-]*[a-z0-9])?$ type: string required: - tenantId type: object status: description: QueueServiceStatus — наблюдаемое состояние QueueService. properties: endpoint: description: |- Endpoint — публичный URL для SQS API тенанта (заполняется при Ready). Формат: https://{SQS_EXTERNAL_HOST}/sqs/{tenantId} type: string message: description: Message — описание ошибки или промежуточного статуса. type: string phase: description: Phase — текущая фаза жизненного цикла. enum: - Pending - Provisioning - Ready - Failed type: string readyAt: description: ReadyAt — время когда инстанс перешёл в фазу Ready. format: date-time type: string secretName: description: SecretName — имя k8s Secret с credentials (accessKey/secretKey). type: string type: object type: object served: true storage: true subresources: status: {}