Kubernetes (K3s)
Overview
Centralize Management System mendukung deployment ke K3s (lightweight Kubernetes).
Prerequisites
- K3s installed
- kubectl configured
- Docker images built
Namespace
apiVersion: v1
kind: Namespace
metadata:
name: clm-prod
labels:
app.kubernetes.io/name: bjbs-clm
app.kubernetes.io/environment: production
Deployments
Core Banking
apiVersion: apps/v1
kind: Deployment
metadata:
name: core-banking
namespace: clm-prod
spec:
replicas: 2
selector:
matchLabels:
app: core-banking
template:
metadata:
labels:
app: core-banking
spec:
containers:
- name: core-banking
image: clm-core-banking:latest
ports:
- containerPort: 8080
env:
- name: SPRING_DATASOURCE_URL
valueFrom:
secretKeyRef:
name: clm-secrets
key: db-url
resources:
requests:
memory: "512Mi"
cpu: "500m"
limits:
memory: "1Gi"
cpu: "1000m"
readinessProbe:
httpGet:
path: /iso/health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
livenessProbe:
httpGet:
path: /iso/health
port: 8080
initialDelaySeconds: 60
periodSeconds: 30
Backend
apiVersion: apps/v1
kind: Deployment
metadata:
name: backend
namespace: clm-prod
spec:
replicas: 2
selector:
matchLabels:
app: backend
template:
metadata:
labels:
app: backend
spec:
containers:
- name: backend
image: clm-backend:latest
ports:
- containerPort: 8081
env:
- name: PORT
value: "8081"
- name: KEYCLOAK_BASE_URL
valueFrom:
configMapKeyRef:
name: clm-config
key: KEYCLOAK_BASE_URL
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Frontend
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend
namespace: clm-prod
spec:
replicas: 2
selector:
matchLabels:
app: frontend
template:
metadata:
labels:
app: frontend
spec:
containers:
- name: frontend
image: clm-frontend:latest
ports:
- containerPort: 80
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "250m"
Services
apiVersion: v1
kind: Service
metadata:
name: backend
namespace: clm-prod
spec:
selector:
app: backend
ports:
- port: 8081
targetPort: 8081
type: ClusterIP
---
apiVersion: v1
kind: Service
metadata:
name: frontend
namespace: clm-prod
spec:
selector:
app: frontend
ports:
- port: 80
targetPort: 80
type: ClusterIP
Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: clm-ingress
namespace: clm-prod
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
ingressClassName: nginx
rules:
- host: clm.bjbsyariah.co.id
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: frontend
port:
number: 80
- path: /api
pathType: Prefix
backend:
service:
name: backend
port:
number: 8081
Secrets
apiVersion: v1
kind: Secret
metadata:
name: clm-secrets
namespace: clm-prod
type: Opaque
stringData:
db-url: "jdbc:postgresql://postgres:5432/clm_db"
db-user: "clm"
db-password: "ClmBjbs2024!"
jwt-secret: "your-jwt-secret"
ConfigMap
apiVersion: v1
kind: ConfigMap
metadata:
name: clm-config
namespace: clm-prod
data:
KEYCLOAK_BASE_URL: "http://keycloak:8080"
OPENSEARCH_BASE_URL: "https://opensearch:9200"
PROMETHEUS_URL: "http://prometheus:9090"
Deployment Script
#!/bin/bash
# scripts/deploy.sh
set -e
echo "🚀 Deploying Centralize Management System to K3s..."
# Apply resources
kubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/secrets.yaml
kubectl apply -f k8s/configmap.yaml
kubectl apply -f k8s/core-banking.yaml
kubectl apply -f k8s/backend.yaml
kubectl apply -f k8s/frontend.yaml
kubectl apply -f k8s/ingress.yaml
# Wait for rollout
kubectl rollout status deployment/backend -n clm-prod --timeout=300s
kubectl rollout status deployment/frontend -n clm-prod --timeout=300s
echo "✅ Deployment complete!"
Monitoring
Check Pods
kubectl get pods -n clm-prod
Check Services
kubectl get svc -n clm-prod
Check Logs
kubectl logs -f deployment/backend -n clm-prod
Next Steps
- CI/CD - Jenkins pipeline
- Troubleshooting - Debugging