refactor(sqs-operator): переделка через Operator SDK v1.37.0
- operator-sdk init + create api (QueueService kind, group sqs, v1alpha1) - Стандартная kubebuilder структура: cmd/, internal/controller/, config/ - CRD types с kubebuilder маркерами (validation, defaults, printcolumns) - Reconciler перенесён из ручного кода в internal/controller/ - controller-gen v0.17.0 (совместимость с Go 1.26.1) - Автогенерация: deepcopy, CRD YAML, RBAC ClusterRole - Удалены все ручные файлы (controllers/, main.go, deployments/)
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
---
|
||||
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: {}
|
||||
Reference in New Issue
Block a user