Administrasi dan Konfigurasi Produksi: Menguasai Jaringan, Sumber Daya, dan Skalabilitas di Kubernetes

Pelajari teknik deployment tingkat lanjut menggunakan YAML, kelola konfigurasi non-sensitif (ConfigMaps) dan sensitif (Secrets), pahami peran Ingress dalam jaringan, dan terapkan strategi Resource Management serta Horizontal Pod Autoscaling (HPA) untuk memastikan efisiensi cluster Kubernetes skala produksi.

Dari Konsep ke Implementasi Nyata

 

Seri 3 telah memberikan Anda pemahaman yang kuat tentang arsitektur dan objek dasar Kubernetes (Pods, Deployments, Services). Namun, menjalankan aplikasi di lingkungan produksi membutuhkan lebih dari sekadar objek dasar. Aplikasi riil memerlukan konfigurasi yang fleksibel (misalnya, variabel lingkungan), informasi sensitif (kata sandi database), dan mekanisme routing canggih (seperti virtual host atau path-based routing).

Artikel pamungkas ini berfokus pada Administrasi dan Konfigurasi Lanjutan, melengkapi Anda dengan keterampilan yang dibutuhkan seorang DevOps Engineer atau Kubernetes Administrator. Kita akan menggali lebih dalam ke dalam Manifest YAML untuk mendefinisikan status ideal cluster Anda, memastikan keamanan konfigurasi, dan mengoptimalkan penggunaan resource melalui skalabilitas otomatis.

 

Mengapa Konfigurasi Harus Dipisahkan?

 

Dalam praktik DevOps terbaik, kode aplikasi harus dipisahkan dari konfigurasinya (The Twelve-Factor App). Konfigurasi harus dapat diubah tanpa perlu membangun ulang image atau deployment aplikasi. Di Kubernetes, pemisahan ini dilakukan menggunakan objek ConfigMaps dan Secrets.

 

🧩 Manajemen Konfigurasi: ConfigMaps dan Secrets

 

Kedua objek ini digunakan untuk menyuntikkan data konfigurasi ke dalam Pods (baik sebagai environment variable maupun file yang terpasang).

 

1. ConfigMaps: Data Konfigurasi Non-Sensitif

 

ConfigMap digunakan untuk menyimpan data konfigurasi yang tidak bersifat rahasia, seperti URL API, log level, atau hostname internal.

YAML
 
# configmap-contoh.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: app-config
data:
  LOG_LEVEL: "info"
  API_URL: "http://internal-service.default.svc.cluster.local"
  # Atau sebagai file
  nginx-config: |
    server {
      listen 80;
      location / {
        root /usr/share/nginx/html;
      }
    }

Cara Menggunakan ConfigMap dalam Deployment:

YAML
 
# Menyuntikkan sebagai Environment Variable
spec:
  containers:
  - name: web-app
    image: app:latest
    env:
    - name: LOG_LEVEL
      valueFrom:
        configMapKeyRef:
          name: app-config
          key: LOG_LEVEL

 

2. Secrets: Data Konfigurasi Sensitif

 

Secret digunakan untuk menyimpan data sensitif, seperti kata sandi database, token API, atau kunci SSH. Kubernetes menyimpan data Secret dalam format Base64 (enkoding, bukan enkripsi), namun mekanisme keamanan tambahan (seperti RBAC dan penyedia eksternal) memastikan hanya Pods yang berhak yang dapat mengaksesnya.

YAML
 
# secret-contoh.yaml (Data harus dalam format Base64)
apiVersion: v1
kind: Secret
metadata:
  name: db-credentials
type: Opaque
data:
  DB_PASSWORD: c3VwZXJfc2VjcmV0 # Base64 dari 'super_secret'

Cara Menggunakan Secret (Pemasangan sebagai Volume):

Pemasangan sebagai Volume lebih aman daripada Environment Variable karena Secret hanya ada dalam file system Pod, bukan di shell Pod.

YAML
 
spec:
  containers:
  - name: db-connector
    image: connector:latest
    volumeMounts:
    - name: secret-volume
      mountPath: "/etc/secrets"
      readOnly: true
  volumes:
  - name: secret-volume
    secret:
      secretName: db-credentials

 

🌐 Jaringan Lanjutan: Ingress dan Load Balancing

 

Service tipe LoadBalancer (Seri 3) menyediakan satu alamat IP publik per layanan. Untuk aplikasi kompleks, kita membutuhkan satu titik masuk (entry point) yang dapat mengarahkan lalu lintas ke berbagai layanan berdasarkan hostname (virtual host) atau path URL. Ini adalah tugas dari objek Ingress.

 

1. Ingress: HTTP Routing Canggih

 

Ingress adalah objek API yang mengelola akses eksternal ke layanan dalam cluster, biasanya HTTP/S.

  • Fungsi Utama: Bertindak sebagai layer 7 load balancer (HTTP/S) yang menyediakan routing, terminasi SSL, dan virtual hosting.

  • Komponen yang Dibutuhkan: Agar Ingress berfungsi, cluster harus memiliki Ingress Controller yang berjalan (misalnya, Nginx, Traefik, atau Kontroler dari Cloud Provider).

Contoh Manifest Ingress (Path-Based Routing):

YAML
 
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
spec:
  rules:
  - host: api.aplikasikita.com
    http:
      paths:
      - path: /user
        pathType: Prefix
        backend:
          service:
            name: user-service # Mengarahkan ke Service 'user-service'
            port:
              number: 8080
      - path: /order
        pathType: Prefix
        backend:
          service:
            name: order-service # Mengarahkan ke Service 'order-service'
            port:
              number: 8081

 

2. Networking di Kubernetes (CNI)

 

Kubernetes mengandalkan Container Network Interface (CNI). CNI adalah spesifikasi standar yang memungkinkan berbagai penyedia jaringan (seperti Calico, Flannel, Cilium) untuk mengimplementasikan solusi jaringan mereka di cluster K8s. CNI memastikan bahwa:

  1. Setiap Pod memiliki alamat IP unik.

  2. Pods dapat berkomunikasi satu sama lain di seluruh Node tanpa NAT.

 

📈 Skalabilitas dan Efisiensi Sumber Daya

 

Mengelola resource (CPU dan Memori) adalah salah satu tugas DBA/Admin Kubernetes yang paling penting untuk mengontrol biaya dan mencegah kegagalan sistem.

 

1. Resource Requests dan Limits

 

Saat mendefinisikan Pod, Anda harus menentukan dua parameter penting untuk setiap kontainer:

  • requests (Permintaan): Jumlah resource minimum yang dijamin oleh Scheduler K8s. Ini adalah jaminan. Pod hanya akan ditempatkan di Node yang memiliki resource yang cukup untuk memenuhi request-nya.

  • limits (Batas): Batas maksimum resource yang diizinkan untuk digunakan oleh kontainer. Ini adalah batas atas. Jika kontainer melebihi batas Memori, ia akan dihentikan (OOMKilled). Jika melebihi batas CPU, kinerjanya akan dibatasi (throttled).

YAML
 
resources:
  requests:
    memory: "128Mi" # Minimum RAM yang dijamin
    cpu: "250m"    # Minimum CPU (25% dari 1 core)
  limits:
    memory: "512Mi" # Batas maksimum RAM
    cpu: "500m"     # Batas maksimum CPU

 

2. Horizontal Pod Autoscaler (HPA)

 

HPA secara otomatis menskalakan jumlah replicas dalam Deployment (atau ReplicaSet) berdasarkan metrik yang diamati, seperti pemanfaatan CPU rata-rata atau metrik kustom lainnya.

Cara Kerja HPA:

  1. Anda mendefinisikan target (misalnya, rata-rata CPU usage 50%).

  2. HPA Controller secara berkala memantau metrik Pods dari Metrics Server.

  3. Jika metrik melebihi target, HPA akan meningkatkan jumlah replicas. Jika di bawah target, HPA akan mengurangi jumlah replicas.

YAML
 
# hpa-contoh.yaml
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: web-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: web-deployment
  minReplicas: 2 # Jumlah Pod minimum
  maxReplicas: 10 # Jumlah Pod maksimum
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50 # Target 50% CPU usage rata-rata

 

Matriks Perbandingan Manajemen Sumber Daya

 

ParameterFungsiRisiko Jika Tidak DitetapkanImplikasi Kinerja
requests.cpu/memoryJaminan sumber daya minimum.Pod bisa stuck (pending) jika Node penuh.Memberikan K8s jaminan untuk menjadwalkan.
limits.cpu/memoryBatas sumber daya maksimum.Node bisa kehabisan Memori (Node OOM) atau Pod bisa dihentikan (OOMKilled).Mencegah Pod yang “nakal” memonopoli Node.

 

💻 Kesimpulan: Administrasi Kubernetes yang Efisien

 

Seri 4 telah menyimpulkan Panduan Berseri Docker dan Kubernetes Anda, berfokus pada teknik konfigurasi dan administrasi yang memastikan aplikasi Anda tidak hanya berjalan, tetapi juga berjalan secara efisien, aman, dan dapat diskalakan di lingkungan production.

Menguasai ConfigMaps dan Secrets memisahkan konfigurasi dari kode. Ingress memungkinkan routing yang canggih. Dan yang paling penting, manajemen Resource yang tepat dikombinasikan dengan HPA memastikan Anda mengoptimalkan biaya cloud sambil mempertahankan kinerja yang tinggi.

Berikut adalah command esensial yang harus Anda jadikan panduan dalam administrasi Kubernetes tingkat lanjut:

Bash
 
# KUBERNETES ESSENTIALS SERI 4: ADMINISTRASI LANJUT
# ----------------------------------------------------
# 1. Membuat Objek Konfigurasi dan Secret (Base64 data)
kubectl create configmap [nama] --from-literal=KEY=VALUE
kubectl apply -f [secret_or_configmap].yaml

# 2. Membuat Horizontal Pod Autoscaler
kubectl apply -f [hpa_manifest].yaml
kubectl get hpa

# 3. Menganalisis Penggunaan Sumber Daya (Membutuhkan Metrics Server)
kubectl top node
kubectl top pod

# 4. Mengekspos Layanan Menggunakan Ingress (Membutuhkan Controller)
kubectl apply -f [ingress_manifest].yaml
# ----------------------------------------------------
# SERI SELESAI: Anda kini telah menguasai kontainerisasi dari Docker hingga Kubernetes.

Panduan berseri tentang Docker dan Kubernetes Anda telah selesai, mencakup keempat seri dengan detail mendalam.

Share the Post:

Related Posts