Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions api/v1alpha1/valkey_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,7 @@ type ValkeyStatus struct {
// "Monitoring" — Spec.Monitoring.Enabled
// "ExternalReplica" — Spec.ExternalReplica.Enabled
// "EphemeralStorage" — Spec.Storage.Ephemeral
// "Modules" — Spec.Modules non-empty (ADR-0032)
// +optional
Capabilities []string `json:"capabilities,omitempty"`
}
Expand Down
9 changes: 9 additions & 0 deletions api/v1alpha1/valkeycluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,14 @@ type ValkeyClusterSpec struct {
// +optional
SlowLog *SlowLogSpec `json:"slowLog,omitempty"`

// Modules — Valkey 공식 BSD module(valkey-search/json/bloom) 또는 BYO module 로딩.
// 외부 Redis Stack(RediSearch/RedisJSON/RedisBloom/RedisTimeSeries/RedisGraph/
// RedisGears, RSALv2/SSPL)은 라이선스 비호환으로 미지원(ADR-0032).
// Cluster mode 에서는 모든 shard pod 에 동일 module set 을 로딩한다.
// +kubebuilder:validation:MaxItems=16
// +optional
Modules []ModuleSpec `json:"modules,omitempty"`

// RevisionHistoryLimit — StatefulSet rollout history 보존 개수.
// +kubebuilder:validation:Minimum=0
// +optional
Expand Down Expand Up @@ -123,6 +131,7 @@ type ValkeyClusterStatus struct {
ClusterInitialized bool `json:"clusterInitialized,omitempty"`

// Capabilities — 활성 optional features. Valkey CR Status.Capabilities 와 동일 패턴.
// 예: TLS, Auth, Monitoring, Modules.
// `kubectl get vc -o wide` 의 priority=1 printcolumn 으로 노출.
// +optional
Capabilities []string `json:"capabilities,omitempty"`
Expand Down
7 changes: 7 additions & 0 deletions api/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions api/v1alpha2/valkey_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,11 @@ type ValkeyStatus struct {
// baseline 기록 + ShouldRotate 비교 기준 (자체 시크릿 로테이션, AuthSpec.RotationInterval).
// +optional
LastPasswordRotation *metav1.Time `json:"lastPasswordRotation,omitempty"`

// Capabilities — 본 CR 에서 활성된 optional features 의 ordered list.
// 예: TLS, Auth, Monitoring, Modules.
// +optional
Capabilities []string `json:"capabilities,omitempty"`
}

// +kubebuilder:object:root=true
Expand All @@ -183,6 +188,7 @@ type ValkeyStatus struct {
// +kubebuilder:printcolumn:name="Ready",type="integer",JSONPath=".status.readyReplicas"
// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.version.version"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +kubebuilder:printcolumn:name="Capabilities",type="string",JSONPath=".status.capabilities",priority=1

// Valkey is the Schema for the valkeys API.
type Valkey struct {
Expand Down
20 changes: 20 additions & 0 deletions api/v1alpha2/valkeycluster_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,20 @@ type ValkeyClusterSpec struct {
// +optional
AdditionalConfig map[string]string `json:"additionalConfig,omitempty"`

// Modules — Valkey 공식 module 활성화 (ADR-0032).
//
// 지원 preset:
// - Name 만 지정: Valkey 공식 module preset (예: "valkey-search",
// "valkey-json", "valkey-bloom") 을 operator 가 valkey-bundle 에서
// 추출해 loadmodule 로 적재.
// - 사용자 커스텀 module 은 ModuleSpec.Image 로 *bring-your-own*
// 이미지 지정 가능. 단 외부 Redis Stack module/image 는 라이선스
// 비호환으로 admission 에서 거부.
// Cluster mode 에서는 모든 shard pod 에 동일 module set 을 로딩한다.
// +kubebuilder:validation:MaxItems=16
// +optional
Modules []ModuleSpec `json:"modules,omitempty"`

// RevisionHistoryLimit — StatefulSet rollout history 보존 개수.
// +kubebuilder:validation:Minimum=0
// +optional
Expand Down Expand Up @@ -118,6 +132,11 @@ type ValkeyClusterStatus struct {
PendingScale *PendingScale `json:"pendingScale,omitempty"`

ClusterInitialized bool `json:"clusterInitialized,omitempty"`

// Capabilities — 활성 optional features. Valkey CR Status.Capabilities 와 동일 패턴.
// 예: TLS, Auth, Monitoring, Modules.
// +optional
Capabilities []string `json:"capabilities,omitempty"`
}

// +kubebuilder:object:root=true
Expand All @@ -129,6 +148,7 @@ type ValkeyClusterStatus struct {
// +kubebuilder:printcolumn:name="Slots",type="integer",JSONPath=".status.assignedSlots"
// +kubebuilder:printcolumn:name="Version",type="string",JSONPath=".spec.version.version"
// +kubebuilder:printcolumn:name="Age",type="date",JSONPath=".metadata.creationTimestamp"
// +kubebuilder:printcolumn:name="Capabilities",type="string",JSONPath=".status.capabilities",priority=1

// ValkeyCluster is the Schema for the valkeyclusters API.
type ValkeyCluster struct {
Expand Down
17 changes: 17 additions & 0 deletions api/v1alpha2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions charts/valkey-operator/Chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ apiVersion: v2
name: valkey-operator
description: A Kubernetes Operator for managing Valkey instances and Clusters (Redis OSS fork, BSD-licensed)
type: application
version: 1.3.0
appVersion: "1.3.0"
version: 1.3.1
appVersion: "1.3.1"
kubeVersion: ">=1.26.0-0"

keywords:
Expand Down Expand Up @@ -116,7 +116,7 @@ annotations:
artifacthub.io/containsSecurityUpdates: "true"
artifacthub.io/images: |
- name: valkey-operator
image: ghcr.io/keiailab/valkey-operator:1.3.0
image: ghcr.io/keiailab/valkey-operator:1.3.1
- name: valkey
image: docker.io/valkey/valkey:9.1.0-alpine3.23
artifacthub.io/prerelease: "false"
Expand Down
89 changes: 89 additions & 0 deletions charts/valkey-operator/crds/cache.keiailab.io_valkeyclusters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,37 @@ spec:
빈 값이면 상시 허용. 자정 넘김(예: "22:00-02:00") 지원.
type: string
type: object
modules:
description: |-
Modules — Valkey 공식 BSD module(valkey-search/json/bloom) 또는 BYO module 로딩.
외부 Redis Stack(RediSearch/RedisJSON/RedisBloom/RedisTimeSeries/RedisGraph/
RedisGears, RSALv2/SSPL)은 라이선스 비호환으로 미지원(ADR-0032).
Cluster mode 에서는 모든 shard pod 에 동일 module set 을 로딩한다.
items:
description: "ModuleSpec — Valkey module 정의 (ADR-0032). 컨트롤러 hub(v1alpha1)
미러.\n\n\tName 만: 공식 BSD preset (allow-list 검증 + 공식 image 자동 resolve)\n\tImage:
\ bring-your-own custom module (init container 가 .so 를 emptyDir
mount)"
properties:
image:
description: Image — custom module image (optional). 미지정 시 공식
preset 자동 resolve.
type: string
loadModuleArgs:
description: LoadModuleArgs — `loadmodule <so> <args>` 의 args
(optional).
items:
type: string
type: array
name:
description: 'Name — module 식별자 (예: "valkey-search").'
pattern: ^[a-z][a-z0-9-]+$
type: string
required:
- name
type: object
maxItems: 16
type: array
monitoring:
description: MonitoringSpec — Prometheus exporter sidecar + ServiceMonitor.
properties:
Expand Down Expand Up @@ -2827,6 +2858,7 @@ spec:
capabilities:
description: |-
Capabilities — 활성 optional features. Valkey CR Status.Capabilities 와 동일 패턴.
예: TLS, Auth, Monitoring, Modules.
`kubectl get vc -o wide` 의 priority=1 printcolumn 으로 노출.
items:
type: string
Expand Down Expand Up @@ -2974,6 +3006,10 @@ spec:
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
- jsonPath: .status.capabilities
name: Capabilities
priority: 1
type: string
name: v1alpha2
schema:
openAPIV3Schema:
Expand Down Expand Up @@ -3154,6 +3190,52 @@ spec:
빈 값이면 상시 허용. 자정 넘김(예: "22:00-02:00") 지원.
type: string
type: object
modules:
description: |-
Modules — Valkey 공식 module 활성화 (ADR-0032).

지원 preset:
- Name 만 지정: Valkey 공식 module preset (예: "valkey-search",
"valkey-json", "valkey-bloom") 을 operator 가 valkey-bundle 에서
추출해 loadmodule 로 적재.
- 사용자 커스텀 module 은 ModuleSpec.Image 로 *bring-your-own*
이미지 지정 가능. 단 외부 Redis Stack module/image 는 라이선스
비호환으로 admission 에서 거부.
Cluster mode 에서는 모든 shard pod 에 동일 module set 을 로딩한다.
items:
description: |-
ModuleSpec — Valkey module 정의 (Plan §2 D9, ADR-0032).

두 모드:
- Name 만 지정: Valkey 공식 module preset (예: "valkey-search",
"valkey-json", "valkey-bloom"). operator 가 alllow-list 검증 +
공식 image 자동 resolve.
- Image 명시: bring-your-own custom module. init container 가
해당 image 의 /modules/<name>.so 를 emptyDir 로 mount, valkey
container 가 `--loadmodule /modules/<name>.so <args>` 로 적재.

보안: PSS Restricted (ADR-0036) 와 정합 — module image 가 privileged
syscall 요구 시 webhook 거부. Sonatype Trust Score 검증 권장.
properties:
image:
description: Image — custom module image (optional). 미지정 시 공식
preset 자동 resolve.
type: string
loadModuleArgs:
description: LoadModuleArgs — `loadmodule <so> <args>` 의 args
(optional).
items:
type: string
type: array
name:
description: 'Name — module 식별자 (예: "valkey-search").'
pattern: ^[a-z][a-z0-9-]+$
type: string
required:
- name
type: object
maxItems: 16
type: array
monitoring:
description: MonitoringSpec — Prometheus exporter sidecar + ServiceMonitor.
properties:
Expand Down Expand Up @@ -5784,6 +5866,13 @@ spec:
assignedSlots:
format: int32
type: integer
capabilities:
description: |-
Capabilities — 활성 optional features. Valkey CR Status.Capabilities 와 동일 패턴.
예: TLS, Auth, Monitoring, Modules.
items:
type: string
type: array
clusterInitialized:
type: boolean
clusterState:
Expand Down
12 changes: 12 additions & 0 deletions charts/valkey-operator/crds/cache.keiailab.io_valkeys.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2939,6 +2939,7 @@ spec:
"Monitoring" — Spec.Monitoring.Enabled
"ExternalReplica" — Spec.ExternalReplica.Enabled
"EphemeralStorage" — Spec.Storage.Ephemeral
"Modules" — Spec.Modules non-empty (ADR-0032)
items:
type: string
type: array
Expand Down Expand Up @@ -3063,6 +3064,10 @@ spec:
- jsonPath: .metadata.creationTimestamp
name: Age
type: date
- jsonPath: .status.capabilities
name: Capabilities
priority: 1
type: string
name: v1alpha2
schema:
openAPIV3Schema:
Expand Down Expand Up @@ -5983,6 +5988,13 @@ spec:
status:
description: ValkeyStatus — observed state.
properties:
capabilities:
description: |-
Capabilities — 본 CR 에서 활성된 optional features 의 ordered list.
예: TLS, Auth, Monitoring, Modules.
items:
type: string
type: array
conditions:
items:
description: Condition contains details for one aspect of the current
Expand Down
Loading
Loading