Kubernetes Production Concepts
Menyiapkan Kubernetes produksi: resource requests/limits, probes, HPA, PDB, storage, RBAC, network policy, observability, dan backup.
Cluster yang berjalan belum tentu siap produksi. Diperlukan kontrol resource, keamanan, ketersediaan, observability, dan prosedur pemulihan.
Resource requests dan limits
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: "1"
memory: 512Mi| Field | Fungsi |
|---|---|
requests | Resource yang dijamin untuk scheduling |
limits | Batas maksimum |
Jika limit memory terlampaui, container di-OOMKill. Jika CPU limit terlampaui, container di-throttle.
Tanpa requests, scheduling tidak akurat
Pod tanpa requests bisa ditempatkan ke node yang sudah penuh, lalu saling berebut resource. Tetapkan requests berdasarkan pengukuran.
Probes
livenessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 5
startupProbe:
httpGet:
path: /health
port: 3000
failureThreshold: 30
periodSeconds: 5| Probe | Fungsi |
|---|---|
| Liveness | Restart jika hang |
| Readiness | Terima trafik hanya jika siap |
| Startup | Beri waktu aplikasi mulai |
Horizontal Pod Autoscaler
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: app
namespace: production
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70HPA membutuhkan metrics-server. Scaling berdasarkan CPU saja bisa terlambat; pertimbangkan custom metrics (RPS, queue depth).
PodDisruptionBudget
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: app
namespace: production
spec:
minAvailable: 2
selector:
matchLabels:
app: webPDB mencegah drain node mematikan terlalu banyak Pod sekaligus.
Rolling update
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0Dengan maxUnavailable: 0, Pod baru harus siap sebelum Pod lama dimatikan.
Storage
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-data
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 20Gi
storageClassName: local-pathGunakan StatefulSet untuk database:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: postgres
spec:
serviceName: postgres
replicas: 1
selector:
matchLabels:
app: postgres
template:
metadata:
labels:
app: postgres
spec:
containers:
- name: postgres
image: postgres:16
env:
- name: POSTGRES_PASSWORD
valueFrom:
secretKeyRef:
name: postgres-secret
key: password
volumeMounts:
- name: data
mountPath: /var/lib/postgresql/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes: [ReadWriteOnce]
resources:
requests:
storage: 20GiDatabase produksi di Kubernetes membutuhkan perencanaan backup, IOPS, dan operator khusus.
RBAC
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
namespace: production
name: app-reader
rules:
- apiGroups: [""]
resources: ["pods", "pods/log"]
verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: app-reader
namespace: production
subjects:
- kind: ServiceAccount
name: app-reader
namespace: production
roleRef:
kind: Role
name: app-reader
apiGroup: rbac.authorization.k8s.ioTerapkan least privilege. Jangan memberi cluster-admin untuk rutinitas.
Network Policy
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: app-allow-ingress
namespace: production
spec:
podSelector:
matchLabels:
app: web
policyTypes: [Ingress]
ingress:
- from:
- namespaceSelector:
matchLabels:
name: ingress-nginx
ports:
- protocol: TCP
port: 3000Network policy membutuhkan CNI yang mendukungnya.
Observability
- Metrics: Prometheus + kube-state-metrics + node-exporter.
- Logs: Loki/ELK, kumpulkan stdout.
- Traces: OpenTelemetry + Tempo/Jaeger.
- Alert: Alertmanager.
- Dashboard: Grafana.
Backup
- Backup manifest/konfigurasi di Git.
- Backup PV/database dengan tool khusus.
- Velero untuk backup resource dan volume.
- Uji restore ke cluster terpisah.
Upgrade cluster
- Baca release notes.
- Backup etcd dan workload.
- Upgrade control plane satu per satu.
- Drain node dengan PDB.
- Upgrade kubelet/node.
- Verifikasi workload.
- Siapkan rollback.
Checklist produksi
- Requests/limits terukur.
- Liveness/readiness/startup probe.
- Minimal 2 replika.
- PDB dan rolling update.
- HPA sesuai beban.
- Storage dan backup.
- RBAC least privilege.
- Network policy.
- Secret terenkripsi.
- Monitoring, log, alert.
- Prosedur upgrade dan disaster recovery.
Ringkasan
- Produksi membutuhkan resource, probe, dan availability control.
- HPA dan PDB menjaga skalabilitas serta ketersediaan.
- Storage, RBAC, dan network policy melindungi data dan akses.
- Observability dan backup adalah bagian wajib.
Selesai — Paket 2
Anda telah menuntaskan kurikulum DevOps: Git & CI/CD, deployment produksi, HA, performa, database, observability, DevSecOps, otomasi infrastruktur, dan Kubernetes. Praktikkan setiap modul di lab Proxmox Anda dan dokumentasikan hasilnya.