# dbiz-lake-k8s — DBIZ Lakehouse GitOps Quản deploy lakehouse lên K8s qua ArgoCD. Theo khuôn `argo-k8s` (App-of-Apps, Helm + YAML thuần). **Công cụ: Helm + ApplicationSet. KHÔNG Kustomize.** ## Git/CI — URL là biến số (không chờ hạ tầng) - **``** trong các Application = placeholder repo GitOps. Chạy được với repo BẤT KỲ đang dùng. Đổi repo (vd sang Gitea `git.dbiz.com` sau này) = một lệnh: `grep -rl '' | xargs sed -i 's###g'`, rồi cập nhật ArgoCD repo creds. Không phải chờ Gitea. - **``** trong values = registry chứa image. Đổi tương tự khi chuyển registry. - **CI: Woodpecker** (đã có) build + push image. File: `.woodpecker/`. Secret registry khai trong Woodpecker UI. - Đích cuối: code + registry ở Gitea `git.dbiz.com` (built-in registry) — nhưng KHÔNG chặn việc chạy hôm nay. ## Triết lý - **Lakehouse as a product**: DBIZ lake = "khách số 0". Mọi thứ THAM SỐ HOÁ (không hardcode) để sau nhân bản cho khách mua gói (Vietbank/Gemadept) qua **ApplicationSet** — CHƯA làm, hoãn tới khi có khách thứ 2. - **Stateful đứng yên, compute di**: MinIO (data lake) GIỮ NGUYÊN ngoài K8s, trỏ qua Service+Endpoints. Kafka dựng mới (Strimzi) trên K8s — chấp nhận snapshot CDC lại. - **dev giống prod**: cùng chart, khác values theo env (dev/prod). Helm values-driven, portable. - **Portable cho on-prem**: chart nhận mọi dependency (S3/nguồn/kafka) qua values → chạy được cả trên hạ tầng DBIZ lẫn on-prem tại khách (air-gapped: mirror image sang registry nội bộ khách). ## Cấu trúc ``` charts/lake-cdc-job/ Chart CDC job (SparkApplication) — THAM SỐ HOÁ theo customer envs/dev/ apps/ ArgoCD Applications (App-of-Apps) root.yaml Root -> quét apps/ infra.yaml External Service+Endpoints (MinIO ngoài, Postgres nguồn) strimzi-operator.yaml Strimzi (Helm upstream) spark-operator.yaml Spark Operator (Helm upstream) kafka-cluster.yaml -> envs/dev/kafka (Kafka CRD) cdc-job.yaml CDC job (chart lake-cdc-job + values, multi-source) kafka/ Kafka CRD (Strimzi, KRaft, Longhorn PV) infra/ external-services.yaml (IP hạ tầng ngoài) values/ values per-app (cdc-job.yaml = khách số 0 dbiz) sealed-secrets/ SealedSecrets (imagePullSecret, creds) — an toàn commit images/spark-cdc/ Dockerfile (image bundled) .woodpecker/ Woodpecker CI (build + push image lên Gitea registry) ``` ## Điều kiện tiên quyết trên cụm (Phase 0 — dựng TRƯỚC) 1. ArgoCD (đã có). 2. **Longhorn** (StorageClass `longhorn`) — cho Kafka PV + checkpoint. 3. **Sealed Secrets controller**. 4. **cert-manager** + ingress (nếu expose UI). 5. **Gitea `git.dbiz.com`** online + repo này + **Deploy Token** (đọc repo cho ArgoCD, đọc registry cho pull image). 6. **Woodpecker** nối Gitea, khai secret `gitea_registry_user` / `gitea_registry_token`. ## Bootstrap (khi Gitea + nền sẵn sàng) 1. Điền IP thật vào `envs/dev/infra/external-services.yaml` (MinIO, Postgres nguồn). 2. Seal imagePullSecret (Gitea registry, tên `gitea-registry`) -> `envs/dev/sealed-secrets/`. 3. Push `images/spark-cdc/**` -> Woodpecker tự build + push image lên `git.dbiz.com/dbiz/spark-cdc`. 4. `kubectl apply -f envs/dev/apps/root.yaml` -> ArgoCD sync tất cả. ## Nhân bản cho khách mới (TƯƠNG LAI) - Copy `envs/dev/values/cdc-job.yaml`, đổi `customer`, nguồn, bucket, namespace, s3.endpoint. - Nhiều khách -> **ApplicationSet** (generator theo customer). - Mức cách ly (1/2/3) = preset values + namespace/cụm riêng. Vietbank on-prem = cùng chart, cụm khác. - S3: DBIZ dựng (ngoài/trong cụm) hoặc khách tự cấp — chỉ đổi `s3.endpoint` + secret, không sửa chart. ## LƯU Ý - CDC Docker cũ GIỮ CHẠY tới khi CDC K8s verify xong, rồi mới tắt (không đập cái đang chạy). - Version Helm chart (Strimzi/Spark Operator) đang pin TẠM — kiểm bản mới nhất khi dựng thật. - 5 VM/1 host Proxmox: HA storage là ảo giác tới khi trải 2 host. Backup (Velero/pg_dump/mc mirror) là phòng thủ thật.