Add platform infrastructure configuration

This commit is contained in:
donghyeon-ka
2026-08-28 17:35:41 +09:00
parent fa76531e5b
commit 16c337bcc9
302 changed files with 83259 additions and 1 deletions
@@ -0,0 +1,56 @@
# AIStor Operator
상태(2026-07-23): 실제 클러스터 적용 완료. ObjectStore Operator, AdminJob
Operator와 admission webhook이 모두 Ready `1/1`이며 단일 ObjectStore를
`Initialized/green`으로 관리한다.
이 디렉터리는 AIStor Operator의 유일한 Kustomize 빌드 루트다. 업스트림 템플릿을
복제하거나 수정하지 않고 공식 Chart를 렌더링한다. 홈 클러스터용 재정의 값은
`values/home.yaml`에 둔다.
## 고정된 원본
| 항목 | 값 |
| --- | --- |
| Chart 저장소 | `https://helm.min.io/` |
| Chart | `aistor-operator` |
| Chart 버전 | `5.10.0` |
| 애플리케이션 버전 | `v20260721224148.0.0` |
| Chart 패키지 SHA-256 | `e5534f5ae4f6f12a3528a8cda5954d73280cba1a8e979e1628fbf3aac76babd1` |
Chart 캐시는 Git에서 제외된 `.helm/charts/` 아래에 작성된다. 모든 입력 파일이 이
빌드 루트 아래에 있으므로 Kustomize의 기본 `RootOnly` 로드 제한으로 충분하다.
## 라이선스 계약
Chart 값 `license`는 빈 문자열로 유지해야 한다. 이 빌드 루트를 적용하기 전에
`aistor` namespace에 다음 키를 가진 `Secret/minio-license`를 생성한다.
| Secret | 유형 | 필수 키 |
| --- | --- | --- |
| `aistor/minio-license` | `Opaque` | `minio.license` |
라이선스 본문을 Git, values 파일, Shell 기록 또는 렌더링 산출물에 절대 남기지
않는다. 이 값을 비워 두면 Chart는 미리 생성한 Secret을 참조하지만 라이선스
Secret 자체를 렌더링하지 않는다.
Operator, admin-job Operator와 admission webhook은 각각
`donghyeon-system-product-name`에서 1 replica로 시작한다. 더 이상 권장되지 않는
AIHub, Prompt 및 Warp는 비활성화한다. TokenReview는 Chart의 표준 Kubernetes 인증
방식이므로 활성 상태를 유지한다.
Helm으로 직접 설치하지 않고 Kustomize 렌더와 보호 스크립트로만 적용한다.
```sh
kubectl kustomize --enable-helm infrastructure/controllers/aistor-operator
```
공식 Chart가 webhook `caBundle`을 렌더하지만 실행 중인 Operator가 이 값을
주입·회전한다. 재적용 때 server-side apply 소유권 충돌이 발생하지 않도록
`kustomization.yaml`에서 초기 빈 `caBundle` 필드를 제거한다. 실제 적용과
readiness 재검증은 `scripts/bootstrap/apply-aistor.sh --execute`가 수행한다.
## 공식 참고 문서
- <https://docs.min.io/aistor/reference/kubernetes/object-store-operator-helm-chart/>
- <https://docs.min.io/aistor/installation/kubernetes/install/deploy-aistor-on-kubernetes/>
@@ -0,0 +1,5 @@
# 기본 확장 지점
업스트림 리소스는 컨트롤러 디렉터리 루트에 선언된 Helm Chart에서 가져온다.
Chart와 무관하고 환경에 종속되지 않는 보조 리소스가 필요할 때만 이곳에 추가하며,
Chart 템플릿을 저장소에 복제하지 않는다.
@@ -0,0 +1,29 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: aistor
helmGlobals:
chartHome: .helm/charts
helmCharts:
- name: aistor-operator
repo: https://helm.min.io/
version: 5.10.0
releaseName: aistor
namespace: aistor
valuesFile: values/home.yaml
includeCRDs: true
skipTests: true
# The Operator injects and rotates this runtime CA. Do not let the Helm render
# claim field ownership with an empty value, which would break idempotent SSA.
patches:
- target:
group: admissionregistration.k8s.io
version: v1
kind: MutatingWebhookConfiguration
name: object-store-operator-webhook
patch: |-
- op: remove
path: /webhooks/0/clientConfig/caBundle
@@ -0,0 +1,4 @@
# 홈 환경 Overlay 확장 지점
홈 클러스터 Chart 설정은 `../../values/home.yaml`에 둔다. 업스트림 Chart 값으로
표현할 수 없는 Kustomize Patch만 이 디렉터리에 둔다.
@@ -0,0 +1,37 @@
# The official chart always looks for Secret/aistor/minio-license and mounts the
# minio.license key. Keep this empty so Helm never renders the license into Git.
license: ""
global:
fipsMode: false
clusterDomain: cluster.local
operator:
replicas: 1
nodeSelector:
kubernetes.io/hostname: donghyeon-system-product-name
resources:
requests:
cpu: 100m
memory: 128Mi
ephemeral-storage: 100Mi
limits:
cpu: 500m
memory: 512Mi
ephemeral-storage: 1Gi
operators:
adminjob:
disabled: false
aihub:
disabled: true
object-store:
disabled: false
replicas: 1
tokenValidation: TokenReview
webhook:
enabled: true
replicas: 1
prompt:
disabled: true
warp:
disabled: true
@@ -0,0 +1,32 @@
# CloudNativePG Operator
이 디렉터리는 Operator의 유일한 Kustomize 빌드 루트다. 공식
`cloudnative-pg` Helm Chart를 복제하거나 수정하지 않고 렌더링한다. 홈 클러스터
변경 사항은 `values/home.yaml`에 둔다.
## 고정된 원본
- Chart 저장소: <https://cloudnative-pg.github.io/charts>
- Chart 버전: `0.29.0`
- Operator 애플리케이션 버전: `1.30.0`
- 공식 저장소 인덱스에 있는 Chart 패키지 SHA-256:
`668e065ff53508d58238788fd35b355a925060843629a951df0e6a9362e6d32f`
Operator는 전체 클러스터를 감시하지만, 자체 namespace 리소스는 `cnpg-system`에서
실행된다. CRD와 클러스터 RBAC은 Chart가 설치한다. 모니터링 스택과 관련 CRD가
준비될 때까지 PodMonitor와 Grafana Dashboard 리소스는 비활성화한다.
저장소 공통 규칙에 따라 다음과 같이 렌더링한다.
```bash
kubectl kustomize --enable-helm infrastructure/controllers/cloudnative-pg
```
Kustomize는 Git에서 제외된 이 디렉터리의 `.helm/charts/` 아래에 Chart를 내려받는다.
values 파일도 빌드 루트 아래에 있으므로 기본 `RootOnly` 로드 제한으로 충분하다.
`--load-restrictor=LoadRestrictionsNone`는 사용하지 않는다.
## 공식 참고 문서
- <https://cloudnative-pg.io/docs/1.30/installation_upgrade/>
- <https://github.com/cloudnative-pg/charts>
@@ -0,0 +1,5 @@
# 기본 확장 지점
업스트림 Operator는 컨트롤러 디렉터리 루트에 선언된 Helm Chart로 공급한다.
Chart와 무관하고 환경에 종속되지 않는 보조 리소스가 실제로 필요할 때만 이곳에
추가하며, Chart 템플릿을 저장소에 복제하지 않는다.
@@ -0,0 +1,17 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: cnpg-system
helmGlobals:
chartHome: .helm/charts
helmCharts:
- name: cloudnative-pg
repo: https://cloudnative-pg.github.io/charts
version: 0.29.0
releaseName: cloudnative-pg
namespace: cnpg-system
valuesFile: values/home.yaml
includeCRDs: true
skipTests: true
@@ -0,0 +1,5 @@
# 홈 환경 Overlay
현재 홈 클러스터용 Operator Overlay는 `../../values/home.yaml`의 Chart values
파일로 표현한다. Helm values와 내려받은 Chart가 Kustomize의 기본 로드 제한 범위
안에 있도록 컨트롤러 디렉터리를 빌드 루트로 유지한다.
@@ -0,0 +1,31 @@
# Home-cluster overrides for the official CloudNativePG operator chart.
# Chart: cloudnative-pg 0.29.0 / appVersion 1.30.0
replicaCount: 1
crds:
create: true
config:
create: true
secret: false
clusterWide: true
rbac:
create: true
aggregateClusterRoles: false
serviceAccount:
create: true
monitoring:
podMonitorEnabled: false
grafanaDashboard:
create: false
resources:
requests:
cpu: 50m
memory: 100Mi
limits:
cpu: 500m
memory: 256Mi
@@ -0,0 +1,35 @@
# Keycloak Operator
상태: `26.7.0` 실제 적용, Operator와 Keycloak Server 각각 `1/1` Ready
namespace는 `baseline` enforce·`restricted` warn이다. 공식 Operator 적용 시
restricted 필드 경고가 있었지만 baseline 정책에서 rollout은 성공했으므로 이를
restricted 준수 완료로 표현하지 않는다.
이 디렉터리는 Keycloak Operator의 유일한 Kustomize 빌드 루트다. 공식 Keycloak
Kubernetes 리소스를 직접 참조하며 업스트림 매니페스트를 복제하거나 수정하지
않는다.
## 고정된 원본
- 저장소: <https://github.com/keycloak/keycloak-k8s-resources>
- 리소스 경로: `kubernetes`
- Keycloak 및 Operator 버전: `26.7.0`
- 설치 모드: `keycloak` namespace 범위
업스트림 namespace 범위 Deployment는 각 컨트롤러의 감시 namespace를
`JOSDK_WATCH_CURRENT`로 설정한다. 이 단일 인스턴스 홈 클러스터에서는 프리뷰
상태인 `cluster-wide` Overlay로 전환하지 않는다.
이 디렉터리에서 다음과 같이 렌더링한다.
```bash
kubectl kustomize infrastructure/controllers/keycloak-operator
```
remote 참조가 Kustomize 캐시에 없으면 네트워크 접근이 필요하다. Argo CD가 고정된
GitHub 원본을 가져올 수 있어야 한다.
## 공식 참고 문서
- <https://www.keycloak.org/operator/installation>
- <https://github.com/keycloak/keycloak-k8s-resources/tree/26.7.0/kubernetes>
@@ -0,0 +1,5 @@
# 기본 확장 지점
공식 namespace 범위 Operator는 컨트롤러 디렉터리 루트의 Kustomization에서
참조한다. 환경에 종속되지 않는 보조 리소스만 이곳에 추가하며, 생성된 CRD,
RBAC 또는 Operator Deployment를 저장소에 복제하지 않는다.
@@ -0,0 +1,12 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: keycloak
resources:
- github.com/keycloak/keycloak-k8s-resources/kubernetes?ref=26.7.0
labels:
- pairs:
app.kubernetes.io/part-of: platform
includeSelectors: false
@@ -0,0 +1,5 @@
# 홈 환경 Overlay 확장 지점
Keycloak Operator 26.7.0에는 홈 환경 전용 Patch가 필요하지 않다. 고정한 업스트림
리소스를 로컬 Kustomize와 향후 Argo CD에서 일관되게 렌더링하도록 컨트롤러
디렉터리를 유일한 빌드 루트로 유지한다.
@@ -0,0 +1,5 @@
# Prometheus Operator CRDs
`prometheus-operator-crds` chart `31.0.0`만 독립적으로 렌더한다. CRD는
cluster-scoped API와 저장 객체의 스키마 경계이므로 workload 실패 시에도 자동 삭제하지
않는다. `kube-prometheus-stack` 쪽에서는 CRD 생성을 별도로 비활성화한다.
@@ -0,0 +1,15 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
helmGlobals:
chartHome: .helm/charts
helmCharts:
- name: prometheus-operator-crds
repo: https://prometheus-community.github.io/helm-charts
version: 31.0.0
releaseName: prometheus-operator-crds
namespace: observability
valuesFile: values/home.yaml
includeCRDs: true
skipTests: true
@@ -0,0 +1,22 @@
crds:
annotations: {}
alertmanagerconfigs:
enabled: true
alertmanagers:
enabled: true
podmonitors:
enabled: true
probes:
enabled: true
prometheusagents:
enabled: true
prometheuses:
enabled: true
prometheusrules:
enabled: true
scrapeconfigs:
enabled: true
servicemonitors:
enabled: true
thanosrulers:
enabled: true