Belajar DevOps Engineer - Kubernetes Lanjutan
Episode 13 of 28

Belajar DevOps Engineer - Kubernetes Lanjutan

Setelah fondasi Kubernetes, produksi butuh pemaketan, keamanan akses, dan scaling; di episode ini kalian menguasai Helm, operator dan CRD, namespace, RBAC, serta Horizontal Pod Autoscaler, lalu men-deploy aplikasi dengan Helm chart dan autoscaling otomatis

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Di episode 8 kalian men-deploy aplikasi dengan file YAML satu per satu. Itu cukup untuk satu aplikasi kecil. Sekarang bayangkan lima puluh aplikasi, masing-masing dengan sepuluh file YAML — menyalin dan mengedit nilai di tiap file menjadi tak terkelola. Di sinilah kalian butuh Helm, lalu mekanisme keamanan akses (RBAC) dan scaling otomatis (HPA).

Episode 13 membawa Kubernetes dari "bisa deploy" ke "siap produksi": memaketkan aplikasi kompleks yang bisa dikonfigurasi, membatasi akses antar-tim, men-scaling workload berdasarkan metrik nyata, dan memahami cara ekosistem Kubernetes tumbuh melalui operator.

Helm: Package Manager untuk Kubernetes

Helm adalah "apt/yarn untuk Kubernetes". Satu unit paket disebut Chart: sekumpulan template YAML dengan nilai yang bisa diisi per deployment.

Struktur chart:

struktur chart myapp
myapp/
├── Chart.yaml          # metadata chart
├── values.yaml         # nilai default
├── templates/
│   ├── deployment.yaml # template Deployment
│   ├── service.yaml    # template Service
│   └── _helpers.tpl    # fungsi pembantu nama

Template Deployment yang nilainya diambil dari values.yaml:

templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          resources:
            limits:
              cpu: {{ .Values.resources.limits.cpu }}
              memory: {{ .Values.resources.limits.memory }}

Dan values.yaml sebagai "tombol konfigurasi":

values.yaml
replicaCount: 3
image:
  repository: ghcr.io/username/myapp
  tag: "1.2.0"
resources:
  limits:
    cpu: "500m"
    memory: "512Mi"

Karena nilainya dipisah dari template, satu chart bisa di-deploy ke dev dengan replicaCount: 1 dan ke prod dengan replicaCount: 10:

KubernetesDeploy dengan Helm
helm create myapp
helm lint ./myapp
helm template myapp ./myapp                     # render tanpa deploy
helm install myapp ./myapp --namespace dev
helm upgrade myapp ./myapp --set replicaCount=10
helm rollback myapp 1

Perhatikan alur lint → template → install: Helm mendukung pratinjau YAML tanpa menyentuh cluster — kebiasaan yang menjaga produksi tetap aman.

Namespace dan RBAC

Di tim besar, banyak orang berbagi satu cluster. Namespace membagi cluster menjadi lingkungan logis, dan RBAC (Role-Based Access Control) mengatur siapa boleh melakukan apa di dalamnya.

KubernetesNamespace sebagai pembatas
kubectl create namespace team-billing
kubectl config set-context billing --namespace team-billing

RBAC terdiri dari dua objek: Role/RoleBinding (terbatas namespace) dan ClusterRole/ClusterRoleBinding (berlaku seluruh cluster). Contoh: tim developer hanya bisa melihat dan me-restart Pod di namespace-nya:

rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: team-billing
  name: app-viewer
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  namespace: team-billing
  name: app-viewer-binding
subjects:
  - kind: User
    name: dev@company.com
    apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: app-viewer
  apiGroup: rbac.authorization.k8s.io

Prinsipnya identik dengan IAM di episode 12: least privilege. Tidak ada alasan seorang developer aplikasi punya hak menghapus namespace atau membaca Secret namespace tim lain.

Horizontal Pod Autoscaler

HPA men-scaling jumlah replica secara otomatis berdasarkan metrik — biasanya CPU, memori, atau metrik custom. Contoh: scale antara 1 dan 10 replica saat CPU rata-rata melewati 70%:

hpa.yaml
apiVersion: autoscaling.k8s.io/v2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp
  minReplicas: 1
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
KubernetesAmati autoscaling
kubectl apply -f hpa.yaml
kubectl get hpa -w
kubectl describe hpa myapp-hpa

Important

HPA baru bekerja jika Deployment mendefinisikan resource request untuk CPU/memori — HPA mengukur request, bukan penggunaan mesin. Satu lagi alasan kenapa resource request selalu wajib di-set. Untuk scaling berbasis jumlah request, kuota per second, atau metrik bisnis, kalian butuh KEDA (Kubernetes Event-driven Autoscaling).

Operator dan Custom Resources

Ekosistem Kubernetes tumbuh melalui operator: pola di mana sebuah controller menjalankan logika domain aplikasi (misal backup database, failover, tuning) langsung di dalam cluster. Operator memperkenalkan Custom Resource Definition (CRD) — tipe resource baru buatan sendiri. Contoh dari dunia nyata: PostgresCluster (dari operator CloudNativePG) adalah sebuah objek yang, setelah di-apply, membuat seluruh statefulset, service, dan backup PostgreSQL secara otomatis.

contoh CRD dari operator
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: mydb
spec:
  instances: 3
  storage:
    size: 10Gi

Dengan operator, kebutuhan operasional yang berulang — backup, upgrade, failover — diserahkan ke "robot" yang mengerti domain tersebut. Ini adalah jembatan menuju GitOps yang kalian pelajari di episode 14.

Service Mesh: Pratinjau

Service mesh menambahkan lapisan traffic dan keamanan antar-service tanpa mengubah kode aplikasi — melalui sidecar proxy di samping setiap Pod. Ini memungkinkan mTLS, canary berbasis traffic, dan retry otomatis. Kita akan membahasnya secara penuh di episode 19 — cukup catat sekarang bahwa ini adalah cara menangani traffic antar-service yang canggih di skala besar.

Pitfall Umum

  • Helm latest dan tanpa version pinning — install chart dengan versi eksplisit dan helm lock untuk reproducibility.
  • Role cluster yang terlalu luascluster-admin yang dibagikan ke semua orang adalah kecelakaan yang menunggu terjadi.
  • HPA tanpa resource request — autoscaling diam-diam tidak bekerja.
  • Mengedit file di cluster langsung — nilai konfigurasi harus di values.yaml dan masuk Git (fondasi GitOps).
  • Satu namespace untuk semua — tanpa pemisahan, gangguan satu tim bisa menyentuh workload tim lain.

Penutup

Inti yang harus dibawa pulang:

  • Helm = package manager: chart berisi template + values; lint → template → install menjaga deploy aman.
  • Namespace memisahkan lingkungan; RBAC membatasi akses dengan prinsip least privilege.
  • HPA men-scaling otomatis berdasarkan metrik — syaratnya resource request terdefinisi.
  • Operator + CRD memperluas Kubernetes dengan logika domain; service mesh menanti di episode 19.

Di episode 14 selanjutnya kita belajar GitOps dengan Argo CD dan Flux — pola yang menjadikan Git sebagai satu-satunya sumber kebenaran untuk seluruh cluster. Deployment, nilai konfigurasi, dan bahkan controller itu sendiri dikelola melalui pull-based sync loop.

Belajar DevOps Engineer - Kubernetes Lanjutan | Belajar DevOps Engineer