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:
- Melakukan perulangan melalui daftar pengguna dan mengambil setiap pengguna.
- Periksa usia setiap pengguna.
- 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:
- 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:
$ 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:
$ kubectl expose pod helloworld \
--type ClusterIP \
--port 8080 \
--name helloworld-clusterip
Membuat Deployment
Untuk membuat Deployment, dapat menggunakan perintah kubectl create deployment
berikut:
$ 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:
$ kubectl run \
--port 8080 \
--image gcr.io/google-samples/hello-app:1.0 \
--restart Never \
--dry-run \
-o yaml \
helloworld > 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:
$ 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:
$ kubectl create deployment \
--port 8080 \
--image gcr.io/google-samples/hello-app:1.0 \
--dry-run \
-o yaml \
helloworld > 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:
$ 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:
$ kubectl delete -f pod.yaml
$ kubectl delete -f service.yaml
$ kubectl delete -f deployment.yaml