Traffine I/O

Bahasa Indonesia

2022-06-27

YAML Deklaratif dalam Kubernetes

Pendahuluan

YAML Deklaratif adalah alat yang kuat dalam ekosistem Kubernetes. Ini menyediakan metode yang langsung, mudah dibaca, dan mudah dipelihara untuk mendefinisikan dan mengelola resource dalam klaster Kubernetes. Dengan YAML deklaratif, pengembang dapat menentukan keadaan sistem yang diinginkan dan membiarkan Kubernetes mengelola keadaan aktual dan menyelaraskan perbedaan apa pun. Pendekatan ini meningkatkan kemudahan dan kehandalan dalam penerapan, pembaruan, dan skalabilitas resource.

Imperatif vs Deklaratif

Dalam konteks pemrograman, istilah deklaratif merujuk pada praktik mendefinisikan keadaan akhir atau hasil yang diinginkan, tanpa menguraikan langkah-langkah khusus untuk mencapai hasil tersebut. Untuk mengilustrasikan konsep ini, pertimbangkan tugas mengekstrak semua pengguna berusia di atas 30 tahun dari daftar pengguna.

Pendekatan Imperatif

Pendekatan imperatif untuk tugas ini akan menentukan algoritma atau langkah-langkah yang tepat:

  1. Melakukan perulangan melalui daftar pengguna dan mengambil setiap pengguna.
  2. Periksa usia setiap pengguna.
  3. Jika pengguna berusia di atas 30 tahun, tambahkan mereka ke dalam daftar hasil.

Metode ini merinci prosedur yang tepat untuk tugas tersebut.

Pendekatan Deklaratif

Di sisi lain, pendekatan deklaratif hanya mendeklarasikan hasil yang diinginkan:

  1. Ekstrak pengguna yang berusia di atas 30 tahun.

Dalam hal ini, langkah-langkah atau algoritma khusus untuk mencapai tujuan tidak diuraikan. Fokusnya hanya pada hasil akhir, yaitu pengguna yang berusia di atas 30 tahun.

Manfaat Pendekatan Deklaratif

Pendekatan deklaratif menyembunyikan detail-detail proses, berfokus pada tujuan atau hasil akhir. Ini meningkatkan keterbacaan dan kemudahan pemeliharaan kode serta meningkatkan fleksibilitas. Dalam konteks Infrastructure as Code (IaC), menggunakan format deklaratif seperti YAML untuk mendefinisikan keadaan infrastruktur memperbaiki pengelolaan dan reproduktibilitas.

kubectl run ke YAML: Imperatif ke Deklaratif

Bertranis ke perintah kubectl run imperatif ke YAML deklaratif pada Kubernetes menawarkan metode yang lebih mudah dipelihara dan dapat diskalakan untuk mengelola resource dalam klaster Kubernetes.

Imperatif

Membuat Pod

Menggunakan pendekatan imperatif, Pod dapat dibuat menggunakan perintah kubectl run berikut:

bash
$ kubectl run \
    --image gcr.io/google-samples/hello-app:1.0 \
    --restart Never \
    helloworld

Membuat Service

Demikian pula, Service dapat dibuat menggunakan perintah kubectl expose berikut:

bash
$ kubectl expose pod helloworld \
    --type ClusterIP \
    --port 8080 \
    --name helloworld-clusterip

Membuat Deployment

Untuk membuat Deployment, dapat menggunakan perintah kubectl create deployment berikut:

bash
$ kubectl create deployment \
    --image gcr.io/google-samples/hello-app:1.0 \
    helloworld

Deklaratif

Bertranisi ke pendekatan deklaratif melibatkan pembuatan file YAML yang menjelaskan keadaan yang diinginkan dari resource-sumber tersebut.

Membuat Pod

Berikut adalah perintah yang dapat digunakan untuk menghasilkan file YAML untuk sebuah Pod:

bash
$ kubectl run \
    --port 8080 \
    --image gcr.io/google-samples/hello-app:1.0 \
    --restart Never \
    --dry-run \
    -o yaml \
    helloworld > pod.yaml
pod.yaml
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: null
  labels:
    run: helloworld
  name: helloworld
spec:
  containers:
  - image: gcr.io/google-samples/hello-app:1.0
    name: helloworld
    ports:
    - containerPort: 8080
    resources: {}
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}

Membuat Service

Demikian pula, file YAML untuk sebuah Service dapat dibuat dengan perintah berikut:

bash
$ kubectl expose pod helloworld \
    --type ClusterIP \
    --port 8080 \
    --name helloworld-clusterip \
    --dry-run \
    -o yaml > service.yaml

Membuat Deployment

Dan akhirnya, file YAML untuk sebuah Deployment dapat dihasilkan dengan menggunakan perintah ini:

bash
$ kubectl create deployment \
    --port 8080 \
    --image gcr.io/google-samples/hello-app:1.0 \
    --dry-run \
    -o yaml \
    helloworld > deployment.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: helloworld
  name: helloworld
spec:
  replicas: 1
  selector:
    matchLabels:
      app: helloworld
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: helloworld
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: hello-app
        ports:
        - containerPort: 8080
        resources: {}
status: {}

Bekerja dengan YAML di Kubernetes

Setelah Anda beralih ke pendekatan deklaratif menggunakan YAML di Kubernetes, mengelola resource Anda menjadi proses yang lebih sederhana dan efisien. File YAML dapat dibaca oleh manusia, sehingga lebih mudah memahami konfigurasi dari setiap resource. Selain itu, file-file tersebut dapat disimpan dan dikendalikan versinya bersama dengan kode aplikasi Anda, memastikan bahwa pengaturan infrastruktur Anda dapat direproduksi dan konsisten.

Membuat Resource yang Didefinisikan dalam YAML

Untuk membuat resource yang didefinisikan dalam file YAML di Kubernetes, gunakan perintah kubectl apply -f diikuti dengan path ke file YAML Anda. Perintah ini menginstruksikan Kubernetes untuk mewujudkan keadaan yang diinginkan sebagaimana yang dijelaskan dalam file tersebut.

Misalnya, untuk membuat Pod, Service, dan Deployment yang didefinisikan dalam file YAML yang dihasilkan pada bab sebelumnya, gunakan perintah berikut:

bash
$ kubectl apply -f pod.yaml
$ kubectl apply -f service.yaml
$ kubectl apply -f deployment.yaml

Kubernetes akan membaca konfigurasi dari setiap file, membuat resource yang sesuai jika belum ada atau memperbarui resource jika sudah ada, dan memastikan bahwa keadaan aktual sesuai dengan keadaan yang diinginkan yang dijelaskan dalam file YAML.

Menghapus Resource yang Didefinisikan dalam YAML

Menghapus resource yang telah dibuat menggunakan file YAML sama mudahnya. Alih-alih menggunakan perintah apply, gunakan perintah delete. Ini menginstruksikan Kubernetes untuk menghapus resource sesuai dengan yang didefinisikan dalam file YAML.

Berikut adalah perintah untuk menghapus Pod, Service, dan Deployment yang telah dibuat sebelumnya:

bash
$ kubectl delete -f pod.yaml
$ kubectl delete -f service.yaml
$ kubectl delete -f deployment.yaml

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!