From 7f9d0964a745258953bd5fdb00f87ac3c3e66bea Mon Sep 17 00:00:00 2001 From: ryan Date: Mon, 10 Aug 2026 10:48:06 +0700 Subject: [PATCH] update to git --- README.md | 150 +++++++++++++++++++++++++++++++ base/deployment-probes.yaml | 39 ++++++++ base/deployment-resources.yaml | 16 ++++ base/deployment-volumes.yaml | 11 +++ base/deployment.yaml | 29 ++++++ base/kustomization.yaml | 14 +++ base/pvc.yaml | 11 +++ base/service.yaml | 11 +++ overlays/dev/configmap.yaml | 13 +++ overlays/dev/hpa.yaml | 12 +++ overlays/dev/ingress.yaml | 19 ++++ overlays/dev/kustomization.yaml | 10 +++ overlays/dev/namespace.yaml | 4 + overlays/prod/configmap.yaml | 17 ++++ overlays/prod/hpa.yaml | 12 +++ overlays/prod/ingress.yaml | 19 ++++ overlays/prod/kustomization.yaml | 10 +++ overlays/prod/namespace.yaml | 4 + 18 files changed, 401 insertions(+) create mode 100644 README.md create mode 100644 base/deployment-probes.yaml create mode 100644 base/deployment-resources.yaml create mode 100644 base/deployment-volumes.yaml create mode 100644 base/deployment.yaml create mode 100644 base/kustomization.yaml create mode 100644 base/pvc.yaml create mode 100644 base/service.yaml create mode 100644 overlays/dev/configmap.yaml create mode 100644 overlays/dev/hpa.yaml create mode 100644 overlays/dev/ingress.yaml create mode 100644 overlays/dev/kustomization.yaml create mode 100644 overlays/dev/namespace.yaml create mode 100644 overlays/prod/configmap.yaml create mode 100644 overlays/prod/hpa.yaml create mode 100644 overlays/prod/ingress.yaml create mode 100644 overlays/prod/kustomization.yaml create mode 100644 overlays/prod/namespace.yaml diff --git a/README.md b/README.md new file mode 100644 index 0000000..c9b9f4f --- /dev/null +++ b/README.md @@ -0,0 +1,150 @@ +# K3s SILARAS - Kustomize Dev → Prod + +Paket ini sengaja memakai struktur **base + overlays/dev + overlays/prod**. Tidak ada manifest standalone dan tidak ada shortcut root yang langsung mengarah ke production. + +Tujuan alurnya sederhana: + +1. Ubah konfigurasi/image di `base` atau konfigurasi khusus environment di overlay terkait. +2. Apply **development** lebih dulu. +3. Periksa Pod, Service, PVC, HPA, Ingress, probe, dan log di development. +4. Jika hasil development sudah baik, apply **production**. + +## Struktur + +```text +. +├── base/ +│ ├── deployment.yaml +│ ├── deployment-probes.yaml +│ ├── deployment-resources.yaml +│ ├── deployment-volumes.yaml +│ ├── pvc.yaml +│ ├── service.yaml +│ └── kustomization.yaml +└── overlays/ + ├── dev/ + │ ├── namespace.yaml + │ ├── configmap.yaml + │ ├── hpa.yaml + │ ├── ingress.yaml + │ └── kustomization.yaml + └── prod/ + ├── namespace.yaml + ├── configmap.yaml + ├── hpa.yaml + ├── ingress.yaml + └── kustomization.yaml +``` + +## 1. Preview hasil development + +Sebelum apply, lihat manifest final hasil Kustomize: + +```bash +kubectl kustomize overlays/dev +``` + +Jika ingin menyimpan hasil render untuk diperiksa: + +```bash +kubectl kustomize overlays/dev > /tmp/silaras-dev-rendered.yaml +``` + +## 2. Apply development + +```bash +kubectl apply -k overlays/dev +``` + +Pantau rollout: + +```bash +kubectl rollout status deployment/silaras-dev -n rssa-apps-dev +kubectl get deploy,pod,svc,pvc,ingress,hpa -n rssa-apps-dev +``` + +Periksa log: + +```bash +kubectl logs -n rssa-apps-dev deployment/silaras-dev --tail=100 +``` + +Periksa PVC/HPA jika diperlukan: + +```bash +kubectl describe pvc silaras-dev -n rssa-apps-dev +kubectl describe hpa silaras-dev -n rssa-apps-dev +``` + +Jika development bermasalah, **jangan apply production**. Perbaiki manifest lalu apply ulang: + +```bash +kubectl apply -k overlays/dev +``` + +## 3. Preview production + +Setelah development lolos: + +```bash +kubectl kustomize overlays/prod +``` + +Opsional simpan render: + +```bash +kubectl kustomize overlays/prod > /tmp/silaras-prod-rendered.yaml +``` + +## 4. Apply production + +```bash +kubectl apply -k overlays/prod +``` + +Pantau rollout: + +```bash +kubectl rollout status deployment/silaras-prod -n rssa-apps-prod +kubectl get deploy,pod,svc,pvc,ingress,hpa -n rssa-apps-prod +``` + +Periksa log: + +```bash +kubectl logs -n rssa-apps-prod deployment/silaras-prod --tail=100 +``` + +## Konfigurasi yang dipertahankan + +- Tidak memakai Kubernetes Secret untuk environment aplikasi. +- Environment berasal dari ConfigMap melalui `envFrom`. +- Tidak memakai `imagePullSecrets`. +- HPA: minimum 1, maksimum 1, target CPU 70%. +- PVC 8Gi, `ReadWriteMany`, StorageClass `nas-rx300`. +- PVC di-mount ke `/var/www/html/writable/uploads`. +- CPU request 100m dan limit 500m. +- Memory request 200Mi dan limit 2Gi. +- Startup/readiness/liveness probe menggunakan HTTP `/login` port 80. +- `imagePullPolicy: IfNotPresent`. +- Ingress menggunakan class `traefik-internal`. + +## Catatan development + +`overlays/dev/configmap.yaml` masih berisi: + +```yaml +DB_PASS: "CHANGE_ME_DEV_DB_PASSWORD" +``` + +Isi dengan password database development yang benar sebelum pengujian aplikasi. + +## Catatan production + +Production hanya perlu diaplikasikan setelah hasil development dianggap baik: + +```bash +kubectl apply -k overlays/prod +``` + +Tidak ada `standalone-prod.yaml`, `kustomization.yaml` di root, atau konfigurasi Fleet yang dapat menjadi jalan pintas untuk langsung menerapkan production. diff --git a/base/deployment-probes.yaml b/base/deployment-probes.yaml new file mode 100644 index 0000000..5692de3 --- /dev/null +++ b/base/deployment-probes.yaml @@ -0,0 +1,39 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: silaras +spec: + template: + spec: + containers: + - name: silaras + readinessProbe: + failureThreshold: 3 + successThreshold: 1 + initialDelaySeconds: 10 + timeoutSeconds: 1 + periodSeconds: 10 + httpGet: + scheme: HTTP + port: 80 + path: /login + livenessProbe: + failureThreshold: 3 + successThreshold: 1 + initialDelaySeconds: 60 + timeoutSeconds: 1 + periodSeconds: 60 + httpGet: + scheme: HTTP + port: 80 + path: /login + startupProbe: + failureThreshold: 6 + successThreshold: 1 + initialDelaySeconds: 0 + timeoutSeconds: 1 + periodSeconds: 10 + httpGet: + scheme: HTTP + port: 80 + path: /login diff --git a/base/deployment-resources.yaml b/base/deployment-resources.yaml new file mode 100644 index 0000000..1daec16 --- /dev/null +++ b/base/deployment-resources.yaml @@ -0,0 +1,16 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: silaras +spec: + template: + spec: + containers: + - name: silaras + resources: + limits: + cpu: 500m + memory: 2Gi + requests: + cpu: 100m + memory: 200Mi diff --git a/base/deployment-volumes.yaml b/base/deployment-volumes.yaml new file mode 100644 index 0000000..b3c093b --- /dev/null +++ b/base/deployment-volumes.yaml @@ -0,0 +1,11 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: silaras +spec: + template: + spec: + volumes: + - name: uploads + persistentVolumeClaim: + claimName: silaras diff --git a/base/deployment.yaml b/base/deployment.yaml new file mode 100644 index 0000000..9914552 --- /dev/null +++ b/base/deployment.yaml @@ -0,0 +1,29 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: silaras + labels: + app: silaras +spec: + replicas: 1 + selector: + matchLabels: + app: silaras + template: + metadata: + labels: + app: silaras + spec: + containers: + - name: silaras + image: git.rssa.top/ryan/silaras-rssa:20260810104233-main + imagePullPolicy: IfNotPresent + ports: + - name: http + containerPort: 80 + envFrom: + - configMapRef: + name: silaras-config + volumeMounts: + - name: uploads + mountPath: /var/www/html/writable/uploads diff --git a/base/kustomization.yaml b/base/kustomization.yaml new file mode 100644 index 0000000..a01a127 --- /dev/null +++ b/base/kustomization.yaml @@ -0,0 +1,14 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - deployment.yaml + - service.yaml + - pvc.yaml +patches: + - path: deployment-volumes.yaml + - path: deployment-resources.yaml + - path: deployment-probes.yaml +labels: + - pairs: + app: silaras + includeSelectors: true diff --git a/base/pvc.yaml b/base/pvc.yaml new file mode 100644 index 0000000..9d06f4b --- /dev/null +++ b/base/pvc.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: silaras +spec: + accessModes: + - ReadWriteMany + resources: + requests: + storage: 8Gi + storageClassName: nas-alletra diff --git a/base/service.yaml b/base/service.yaml new file mode 100644 index 0000000..ee1b9bb --- /dev/null +++ b/base/service.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: Service +metadata: + name: silaras +spec: + selector: + app: silaras + ports: + - name: http + port: 80 + targetPort: 80 diff --git a/overlays/dev/configmap.yaml b/overlays/dev/configmap.yaml new file mode 100644 index 0000000..675395c --- /dev/null +++ b/overlays/dev/configmap.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: silaras-config +data: + CI_ENVIRONMENT: "development" + APP_BASE_URL: "http://silaras.dev.rssa/" + DB_HOST: "10.10.123.197" + DB_PORT: "3003" + DB_NAME: "db_silaras" + DB_USER: "silaras_sys" + DB_PASS: "CHANGE_ME_DEV_DB_PASSWORD" + ENCRYPTION_KEY: "silaras-local-encryption-key-2026-dev" diff --git a/overlays/dev/hpa.yaml b/overlays/dev/hpa.yaml new file mode 100644 index 0000000..10ff1e2 --- /dev/null +++ b/overlays/dev/hpa.yaml @@ -0,0 +1,12 @@ +apiVersion: autoscaling/v1 +kind: HorizontalPodAutoscaler +metadata: + name: silaras +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: silaras + minReplicas: 1 + maxReplicas: 1 + targetCPUUtilizationPercentage: 70 diff --git a/overlays/dev/ingress.yaml b/overlays/dev/ingress.yaml new file mode 100644 index 0000000..7b0c4d1 --- /dev/null +++ b/overlays/dev/ingress.yaml @@ -0,0 +1,19 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: silaras + annotations: + kubernetes.io/ingress.class: traefik-internal +spec: + ingressClassName: traefik-internal + rules: + - host: silaras.dev.rssa + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: silaras + port: + number: 80 diff --git a/overlays/dev/kustomization.yaml b/overlays/dev/kustomization.yaml new file mode 100644 index 0000000..2a72c7d --- /dev/null +++ b/overlays/dev/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - namespace.yaml + - ../../base + - ingress.yaml + - configmap.yaml + - hpa.yaml +namespace: rssa-apps-dev +nameSuffix: -dev diff --git a/overlays/dev/namespace.yaml b/overlays/dev/namespace.yaml new file mode 100644 index 0000000..5122585 --- /dev/null +++ b/overlays/dev/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: rssa-apps diff --git a/overlays/prod/configmap.yaml b/overlays/prod/configmap.yaml new file mode 100644 index 0000000..67ef3eb --- /dev/null +++ b/overlays/prod/configmap.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: silaras-config +data: + CI_ENVIRONMENT: "production" + APP_BASE_URL: "http://silaras.rssa.id/" + DB_HOST: "10.10.123.192" + DB_PORT: "3005" + DB_NAME: "db_silaras" + DB_USER: "admin_silaras" + DB_PASS: "silaras119" + # Sengaja disimpan di ConfigMap agar sederhana untuk lingkungan lokal. + ENCRYPTION_KEY: "silaras-local-encryption-key-2026-rssa" + + APP_VERSION: "1.0.0" + APP_STATUS: "Production" \ No newline at end of file diff --git a/overlays/prod/hpa.yaml b/overlays/prod/hpa.yaml new file mode 100644 index 0000000..10ff1e2 --- /dev/null +++ b/overlays/prod/hpa.yaml @@ -0,0 +1,12 @@ +apiVersion: autoscaling/v1 +kind: HorizontalPodAutoscaler +metadata: + name: silaras +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: silaras + minReplicas: 1 + maxReplicas: 1 + targetCPUUtilizationPercentage: 70 diff --git a/overlays/prod/ingress.yaml b/overlays/prod/ingress.yaml new file mode 100644 index 0000000..d305c17 --- /dev/null +++ b/overlays/prod/ingress.yaml @@ -0,0 +1,19 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: silaras + annotations: + kubernetes.io/ingress.class: traefik-internal +spec: + ingressClassName: traefik-internal + rules: + - host: silaras.rssa.id + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: silaras + port: + number: 80 diff --git a/overlays/prod/kustomization.yaml b/overlays/prod/kustomization.yaml new file mode 100644 index 0000000..428ef41 --- /dev/null +++ b/overlays/prod/kustomization.yaml @@ -0,0 +1,10 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - namespace.yaml + - ../../base + - ingress.yaml + - configmap.yaml + - hpa.yaml +namespace: rssa-apps-prod-new +nameSuffix: -prod diff --git a/overlays/prod/namespace.yaml b/overlays/prod/namespace.yaml new file mode 100644 index 0000000..5122585 --- /dev/null +++ b/overlays/prod/namespace.yaml @@ -0,0 +1,4 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: rssa-apps