Thursday

19-06-2025 Vol 19

Kubernetes Cheatsheet

Kubernetes Cheat Sheet: Panduan Lengkap untuk Pemula hingga Mahir

Kubernetes, atau K8s, telah menjadi platform orkestrasi kontainer *de facto* yang digunakan oleh bisnis dari semua ukuran. Kompleksitasnya dapat menakutkan, tetapi dengan panduan yang tepat, Anda dapat menguasai seni mengelola aplikasi berbasis kontainer secara efisien. *Cheat sheet* ini bertujuan untuk menyediakan referensi cepat dan komprehensif untuk perintah Kubernetes yang paling umum digunakan, konsep inti, dan praktik terbaik. Baik Anda seorang pemula atau pengguna tingkat lanjut, panduan ini akan membantu Anda menavigasi lanskap Kubernetes dengan mudah.

Daftar Isi

  1. Pengantar Kubernetes
  2. Arsitektur Kubernetes
  3. Instalasi dan Konfigurasi Kubectl
  4. Perintah Kubectl Esensial
  5. Pod: Unit Terkecil dalam Kubernetes
  6. ReplicaSet: Memastikan Ketersediaan
  7. Deployment: Manajemen Aplikasi yang Mudah
  8. Service: Mengekspos Aplikasi Anda
  9. Namespace: Mengatur Sumber Daya Anda
  10. ConfigMap dan Secret: Mengelola Konfigurasi dan Data Sensitif
  11. Ingress: Merutekan Lalu Lintas dari Luar Klaster
  12. Helm: Manajer Paket untuk Kubernetes
  13. Pemantauan dan Logging
  14. Debugging Aplikasi Kubernetes
  15. Praktik Terbaik Kubernetes
  16. Sumber Daya Tambahan

1. Pengantar Kubernetes

Kubernetes adalah sistem orkestrasi kontainer sumber terbuka yang mengotomatiskan penyebaran, penskalaan, dan pengelolaan aplikasi yang dikontainerisasi. Ini memungkinkan Anda untuk mengelola infrastruktur yang kompleks secara efisien, memastikan aplikasi Anda selalu berjalan dan tersedia.

  • Orkestrasi Kontainer: Kubernetes mengelola siklus hidup kontainer, termasuk penyebaran, penskalaan, dan pembaruan.
  • Portabilitas: Kubernetes berjalan di berbagai lingkungan, termasuk cloud publik, cloud pribadi, dan lingkungan on-premise.
  • Skalabilitas: Kubernetes secara otomatis menskalakan aplikasi Anda berdasarkan permintaan, memastikan kinerja optimal.
  • Ketahanan: Kubernetes secara otomatis memulai ulang kontainer yang gagal dan memulihkan aplikasi dari kegagalan.

2. Arsitektur Kubernetes

Memahami arsitektur Kubernetes sangat penting untuk mengelola klaster Anda secara efektif. Arsitektur ini terdiri dari komponen utama berikut:

  • Master Node: Mengontrol klaster Kubernetes. Terdiri dari komponen berikut:
    • kube-apiserver: Mengekspos API Kubernetes, memungkinkan interaksi dengan klaster.
    • etcd: Menyimpan data konfigurasi klaster.
    • kube-scheduler: Menjadwalkan pod ke worker node yang tersedia.
    • kube-controller-manager: Mengelola berbagai pengontrol, seperti ReplicationController dan DeploymentController.
    • cloud-controller-manager: Mengelola integrasi dengan penyedia cloud.
  • Worker Nodes: Menjalankan aplikasi yang dikontainerisasi. Terdiri dari komponen berikut:
    • kubelet: Berkomunikasi dengan master node dan mengelola kontainer di node.
    • kube-proxy: Mengelola jaringan dan load balancing untuk layanan.
    • Container Runtime (Docker, containerd, CRI-O): Menjalankan kontainer.

3. Instalasi dan Konfigurasi Kubectl

kubectl adalah alat baris perintah yang digunakan untuk berinteraksi dengan klaster Kubernetes. Berikut cara menginstal dan mengkonfigurasinya:

  1. Instal kubectl:
    • Linux:
      curl -LO "https://dl.k8s.io/release/$(kubectl version --client --output=json | jq -r '.clientVersion.gitVersion')/bin/linux/amd64/kubectl"
      chmod +x kubectl
      sudo mv kubectl /usr/local/bin/
      kubectl version --client
    • macOS:
      brew install kubectl
      kubectl version --client
    • Windows:
      choco install kubernetes-cli
      kubectl version --client
  2. Konfigurasi kubectl:

    kubectl menggunakan file kubeconfig untuk mengakses informasi klaster. Biasanya terletak di ~/.kube/config.

    Anda dapat menggunakan minikube, kind, atau layanan cloud (seperti GKE, AKS, atau EKS) untuk membuat klaster Kubernetes dan mengkonfigurasi kubectl.

    Contoh konfigurasi menggunakan Minikube:

    minikube start
    kubectl config use-context minikube

4. Perintah Kubectl Esensial

Berikut adalah daftar perintah kubectl yang paling sering digunakan:

  • kubectl get: Menampilkan sumber daya Kubernetes.
    • kubectl get pods: Menampilkan semua pod.
    • kubectl get deployments: Menampilkan semua deployment.
    • kubectl get services: Menampilkan semua service.
    • kubectl get nodes: Menampilkan semua node.
  • kubectl describe: Menampilkan informasi rinci tentang sumber daya.
    • kubectl describe pod my-pod: Menampilkan informasi tentang pod bernama “my-pod”.
    • kubectl describe service my-service: Menampilkan informasi tentang service bernama “my-service”.
  • kubectl create: Membuat sumber daya dari file YAML atau JSON.
    • kubectl create -f my-deployment.yaml: Membuat deployment dari file “my-deployment.yaml”.
  • kubectl apply: Menerapkan perubahan pada sumber daya dari file YAML atau JSON. Membuat atau memperbarui sumber daya.
    • kubectl apply -f my-deployment.yaml: Menerapkan perubahan pada deployment dari file “my-deployment.yaml”.
  • kubectl delete: Menghapus sumber daya.
    • kubectl delete pod my-pod: Menghapus pod bernama “my-pod”.
    • kubectl delete -f my-deployment.yaml: Menghapus sumber daya yang didefinisikan dalam “my-deployment.yaml”.
  • kubectl exec: Menjalankan perintah di dalam kontainer.
    • kubectl exec -it my-pod -- bash: Membuka shell bash di dalam kontainer pod “my-pod”.
  • kubectl logs: Menampilkan log dari kontainer.
    • kubectl logs my-pod: Menampilkan log dari pod “my-pod”.
    • kubectl logs -f my-pod: Menampilkan log dari pod “my-pod” secara live.
  • kubectl edit: Mengedit sumber daya langsung.
    • kubectl edit deployment my-deployment: Mengedit deployment “my-deployment”.
  • kubectl scale: Menskalakan jumlah replika untuk Deployment, ReplicaSet, atau ReplicationController.
    • kubectl scale deployment my-deployment --replicas=3: Menskalakan deployment “my-deployment” menjadi 3 replika.
  • kubectl expose: Mengekspos Deployment, ReplicaSet, atau Pod sebagai Service.
    • kubectl expose deployment my-deployment --type=LoadBalancer --port=80 --target-port=8080: Mengekspos deployment “my-deployment” sebagai Service dengan tipe LoadBalancer, port 80, dan target port 8080.
  • kubectl rollout: Mengelola rollout deployment.
    • kubectl rollout status deployment my-deployment: Menampilkan status rollout deployment “my-deployment”.
    • kubectl rollout history deployment my-deployment: Menampilkan riwayat rollout deployment “my-deployment”.
    • kubectl rollout undo deployment my-deployment: Membatalkan rollout deployment “my-deployment”.
  • kubectl cordon: Menandai node sebagai tidak dapat dijadwalkan (unschedulable).
    • kubectl cordon my-node: Menandai node “my-node” sebagai tidak dapat dijadwalkan.
  • kubectl uncordon: Menandai node sebagai dapat dijadwalkan.
    • kubectl uncordon my-node: Menandai node “my-node” sebagai dapat dijadwalkan.
  • kubectl drain: Mengeluarkan semua pod dari sebuah node.
    • kubectl drain my-node --ignore-daemonsets: Mengeluarkan semua pod dari node “my-node” kecuali DaemonSet.
  • kubectl label: Menambahkan atau memperbarui label pada sumber daya.
    • kubectl label pod my-pod environment=production: Menambahkan label `environment=production` pada pod “my-pod”.
  • kubectl annotate: Menambahkan atau memperbarui anotasi pada sumber daya.
    • kubectl annotate pod my-pod description="This is a production pod": Menambahkan anotasi `description` pada pod “my-pod”.

5. Pod: Unit Terkecil dalam Kubernetes

Pod adalah unit penyebaran terkecil dalam Kubernetes. Pod dapat berisi satu atau lebih kontainer yang berbagi sumber daya jaringan dan penyimpanan.

  • Definisi Pod: Pod didefinisikan dalam file YAML atau JSON.
  • Contoh Definisi Pod:
    apiVersion: v1
    kind: Pod
    metadata:
      name: my-pod
    spec:
      containers:
      - name: my-container
        image: nginx:latest
        ports:
        - containerPort: 80
  • Lifecycle Pod:
    1. Pending: Pod sedang dibuat.
    2. Running: Semua kontainer dalam Pod telah dibuat dan berjalan.
    3. Succeeded: Semua kontainer dalam Pod telah selesai dieksekusi dan keluar dengan sukses.
    4. Failed: Satu atau lebih kontainer dalam Pod gagal dieksekusi.
    5. Unknown: Status Pod tidak dapat ditentukan.

6. ReplicaSet: Memastikan Ketersediaan

ReplicaSet memastikan bahwa jumlah replika pod yang ditentukan selalu berjalan. Jika sebuah pod gagal, ReplicaSet akan secara otomatis membuat pod baru untuk menggantikannya.

  • Definisi ReplicaSet: ReplicaSet didefinisikan dalam file YAML atau JSON.
  • Contoh Definisi ReplicaSet:
    apiVersion: apps/v1
    kind: ReplicaSet
    metadata:
      name: my-replicaset
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-container
            image: nginx:latest
            ports:
            - containerPort: 80
  • Selector: Digunakan untuk mengidentifikasi pod yang dikelola oleh ReplicaSet.
  • Template: Mendefinisikan spesifikasi pod yang akan dibuat oleh ReplicaSet.

7. Deployment: Manajemen Aplikasi yang Mudah

Deployment menyediakan cara deklaratif untuk mengelola aplikasi. Deployment memungkinkan Anda untuk memperbarui aplikasi tanpa downtime, melakukan rollback ke versi sebelumnya, dan menskalakan aplikasi dengan mudah.

  • Definisi Deployment: Deployment didefinisikan dalam file YAML atau JSON.
  • Contoh Definisi Deployment:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-container
            image: nginx:latest
            ports:
            - containerPort: 80
  • Strategi Deployment:
    • Rolling Update: Memperbarui aplikasi secara bertahap tanpa downtime.
    • Recreate: Menghapus semua pod lama sebelum membuat pod baru.
  • Rollback: Mengembalikan deployment ke versi sebelumnya.

8. Service: Mengekspos Aplikasi Anda

Service menyediakan cara untuk mengekspos aplikasi yang berjalan di dalam klaster Kubernetes. Service memungkinkan aplikasi lain untuk mengakses aplikasi Anda tanpa perlu mengetahui alamat IP pod individual.

  • Definisi Service: Service didefinisikan dalam file YAML atau JSON.
  • Contoh Definisi Service:
    apiVersion: v1
    kind: Service
    metadata:
      name: my-service
    spec:
      selector:
        app: my-app
      ports:
      - protocol: TCP
        port: 80
        targetPort: 80
      type: LoadBalancer
  • Tipe Service:
    • ClusterIP: Mengekspos service di dalam klaster.
    • NodePort: Mengekspos service di setiap node klaster.
    • LoadBalancer: Mengekspos service menggunakan load balancer dari penyedia cloud.
    • ExternalName: Memetakan service ke nama domain eksternal.
  • Selector: Digunakan untuk mengidentifikasi pod yang merupakan bagian dari service.

9. Namespace: Mengatur Sumber Daya Anda

Namespace menyediakan cara untuk mengisolasi dan mengatur sumber daya di dalam klaster Kubernetes. Namespace memungkinkan Anda untuk membuat lingkungan yang berbeda untuk pengembangan, pengujian, dan produksi.

  • Membuat Namespace:
    kubectl create namespace my-namespace
  • Menggunakan Namespace:
    kubectl config set-context --current --namespace=my-namespace
  • Menampilkan Sumber Daya di Namespace:
    kubectl get pods -n my-namespace

10. ConfigMap dan Secret: Mengelola Konfigurasi dan Data Sensitif

ConfigMap digunakan untuk menyimpan data konfigurasi non-sensitif, sementara Secret digunakan untuk menyimpan data sensitif seperti kata sandi dan kunci API.

  • ConfigMap:
    • Membuat ConfigMap:
      kubectl create configmap my-configmap --from-literal=key1=value1 --from-literal=key2=value2
    • Menggunakan ConfigMap di Pod:
      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: my-container
          image: nginx:latest
          env:
          - name: MY_VARIABLE
            valueFrom:
              configMapKeyRef:
                name: my-configmap
                key: key1
  • Secret:
    • Membuat Secret:
      kubectl create secret generic my-secret --from-literal=username=myuser --from-literal=password=mypassword
    • Menggunakan Secret di Pod:
      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: my-container
          image: nginx:latest
          env:
          - name: USERNAME
            valueFrom:
              secretKeyRef:
                name: my-secret
                key: username
          - name: PASSWORD
            valueFrom:
              secretKeyRef:
                name: my-secret
                key: password

11. Ingress: Merutekan Lalu Lintas dari Luar Klaster

Ingress menyediakan cara untuk merutekan lalu lintas HTTP dan HTTPS dari luar klaster ke service di dalam klaster. Ingress memungkinkan Anda untuk menggunakan satu alamat IP untuk mengekspos beberapa service.

  • Definisi Ingress: Ingress didefinisikan dalam file YAML atau JSON.
  • Contoh Definisi Ingress:
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: my-ingress
    spec:
      rules:
      - host: myapp.example.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: my-service
                port:
                  number: 80
  • Ingress Controller: Harus diinstal di klaster untuk memproses definisi Ingress. Contoh: Nginx Ingress Controller, Traefik.

12. Helm: Manajer Paket untuk Kubernetes

Helm adalah manajer paket untuk Kubernetes. Helm memungkinkan Anda untuk menyebarkan aplikasi yang kompleks dengan mudah menggunakan *chart*. Chart adalah kumpulan file yang mendeskripsikan sumber daya Kubernetes.

  • Instal Helm:
    curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
    chmod 700 get_helm.sh
    ./get_helm.sh
  • Menambahkan Repositori Helm:
    helm repo add bitnami https://charts.bitnami.com/bitnami
    helm repo update
  • Menginstal Chart Helm:
    helm install my-release bitnami/nginx
  • Melihat Chart Helm:
    helm list
  • Menghapus Chart Helm:
    helm uninstall my-release

13. Pemantauan dan Logging

Pemantauan dan logging sangat penting untuk menjaga kesehatan dan kinerja aplikasi Kubernetes Anda.

  • Metrik:
    • Heapster: Mengumpulkan metrik klaster. Digantikan oleh Metrics Server.
    • Metrics Server: Mengumpulkan metrik penggunaan sumber daya dari node dan pod.
    • Prometheus: Sistem pemantauan dan peringatan sumber terbuka.
  • Logging:
    • ELK Stack (Elasticsearch, Logstash, Kibana): Solusi logging terpusat.
    • Fluentd: Kolektor log sumber terbuka.
    • Grafana Loki: Sistem logging terinspirasi Prometheus.
  • Alerting:
    • Alertmanager: Menangani peringatan yang dikirim oleh Prometheus.

14. Debugging Aplikasi Kubernetes

Debugging aplikasi Kubernetes bisa menjadi tantangan, tetapi ada beberapa alat dan teknik yang dapat membantu.

  • Memeriksa Log Pod:
    kubectl logs my-pod
  • Menjalankan Perintah di Dalam Kontainer:
    kubectl exec -it my-pod -- bash
  • Memeriksa Deskripsi Pod:
    kubectl describe pod my-pod
  • Memeriksa Event:
    kubectl get events
  • Menggunakan Debugger Jarak Jauh: Menggunakan debugger seperti Delve untuk aplikasi Go.

15. Praktik Terbaik Kubernetes

Mengikuti praktik terbaik Kubernetes dapat membantu Anda membangun aplikasi yang lebih andal, aman, dan terukur.

  • Gunakan Namespace untuk Isolasi: Menggunakan namespace untuk mengisolasi lingkungan pengembangan, pengujian, dan produksi.
  • Gunakan Resource Quotas untuk Membatasi Penggunaan Sumber Daya: Menggunakan kuota sumber daya untuk membatasi jumlah sumber daya yang dapat digunakan oleh sebuah namespace.
  • Gunakan Liveness dan Readiness Probes: Menggunakan liveness probe untuk mendeteksi ketika aplikasi macet dan readiness probe untuk mendeteksi ketika aplikasi siap untuk menerima lalu lintas.
  • Gunakan Pod Disruption Budgets (PDB): Menggunakan PDB untuk memastikan bahwa sejumlah minimum replika aplikasi selalu tersedia selama pemeliharaan klaster.
  • Gunakan RBAC untuk Kontrol Akses: Menggunakan Role-Based Access Control (RBAC) untuk mengontrol akses ke sumber daya Kubernetes.
  • Gunakan Secrets untuk Data Sensitif: Jangan menyimpan data sensitif dalam kode atau konfigurasi. Gunakan Secrets sebagai gantinya.
  • Gunakan Immutable Infrastructure: Jangan memperbarui kontainer secara langsung. Bangun image kontainer baru setiap kali Anda membuat perubahan.
  • Automatiskan Penyebaran: Gunakan CI/CD untuk mengotomatiskan penyebaran aplikasi Anda.
  • Pantau Aplikasi Anda: Gunakan pemantauan dan logging untuk melacak kesehatan dan kinerja aplikasi Anda.
  • Pertimbangkan Keamanan: Terapkan kebijakan keamanan dan pemindaian kerentanan secara teratur.

16. Sumber Daya Tambahan

Dengan cheat sheet ini, Anda siap untuk memulai perjalanan Kubernetes Anda. Ingatlah untuk terus belajar dan bereksperimen untuk menguasai kekuatan penuh platform orkestrasi kontainer ini.

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *