update to git
This commit is contained in:
No files matched your search
@@ -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.
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: silaras
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
volumes:
|
||||||
|
- name: uploads
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: silaras
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
name: silaras
|
||||||
|
spec:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 8Gi
|
||||||
|
storageClassName: nas-alletra
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: silaras
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: silaras
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
@@ -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"
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: rssa-apps
|
||||||
@@ -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"
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: rssa-apps
|
||||||
Reference in New Issue
Block a user