677dd8da97293b88c4bdfb65ae8bb6e9cd0cab5f
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)
https://git.renolation.com/renolation/dbiz-lake-k8s.gittrong các Application = placeholder repo GitOps. Chạy được với repo BẤT KỲ đang dùng. Đổi repo (vd sang Giteagit.dbiz.comsau này) = một lệnh:grep -rl 'https://git.renolation.com/renolation/dbiz-lake-k8s.git' | xargs sed -i 's#https://git.renolation.com/renolation/dbiz-lake-k8s.git#<url-thật>#g', rồi cập nhật ArgoCD repo creds. Không phải chờ Gitea.<IMAGE_REGISTRY>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
infra/cluster/ Hạ tầng NỀN cụm (singleton toàn cụm, tách khỏi envs/<env>)
root.yaml App-of-apps tầng nền (infra-cluster-root)
00-longhorn.yaml Longhorn (Helm upstream, SC longhorn, replica=2, KHÔNG default)
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)
- ArgoCD (đã có).
- Sealed Secrets controller (đã có).
- cert-manager + ingress (nếu expose UI).
- Gitea
git.dbiz.comonline + repo này + Deploy Token (đọc repo cho ArgoCD, đọc registry cho pull image). - Woodpecker nối Gitea, khai secret
gitea_registry_user/gitea_registry_token.
Longhorn (StorageClass
longhorn, cho Kafka PV + checkpoint) KHÔNG còn dựng tay — nay là app GitOps tronginfra/cluster/, apply ở Bootstrap bước 0. Phải XANH trước khi apply tầng lake.
Bootstrap (khi Gitea + nền sẵn sàng)
- Tầng nền cụm TRƯỚC — apply app-of-apps hạ tầng, chờ Longhorn XANH rồi mới sang bước sau:
kubectl apply -f infra/cluster/root.yaml(node không có repo -> dùng raw URL của Gitea). Verify:kubectl get sc longhorn+ podslonghorn-systemRunning. - Điền IP thật vào
envs/dev/infra/external-services.yaml(MinIO, Postgres nguồn). - Seal imagePullSecret (Gitea registry, tên
gitea-registry) ->envs/dev/sealed-secrets/. - Push
images/spark-cdc/**-> Woodpecker tự build + push image lêngit.dbiz.com/dbiz/spark-cdc. kubectl apply -f envs/dev/apps/root.yaml-> ArgoCD sync tầng lake (cdc-job xin PVC storageClass=longhorn).
Nhân bản cho khách mới (TƯƠNG LAI)
- Copy
envs/dev/values/cdc-job.yaml, đổicustomer, 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.
- Longhorn pin
1.11.3,defaultClassReplicaCount=2— cụm chỉ 2 worker = 2 node lưu trữ (3 control-plane bị taint).local-pathVẪN default;longhornKHÔNG default. Thêm worker thứ 3 mới nâng replica=3. - Cài Longhorn qua ArgoCD phải để
preUpgradeChecker.jobEnabled=false— helm hook pre-upgrade sẽ deadlock ở PreSync (chạy trước khi RBAC/CRD tạo). - 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.
Description
Languages
Dockerfile
100%