Deployment dalam Kubernetes
Deployment memungkinkan pengguna untuk mengelola sekelompok Replica Pods. Ini mewakili model pembaruan yang menangani pembuatan ReplicaSet baru untuk setiap penyebaran. Secara bersamaan, itu menurunkan jumlah Pods lama di bawah ReplicaSet lama sambil menambahkan Pods baru di bawah ReplicaSet baru. Transisi bertahap ini memastikan proses pembaruan yang lancar dan efisien.
Deployment sangat berguna terutama saat digunakan untuk membuat Pods baru, memperbarui Pods yang ada, atau bahkan melakukan skalabilitas sesuai dengan kebutuhan aplikasi. Selain itu, penyebaran Kubernetes juga menyediakan kemampuan untuk melakukan rollback ke penyebaran sebelumnya, sehingga menjadi sistem yang tangguh dalam mengelola aplikasi.
Membuat Deployment dalam Kubernetes
Saya akan melakukan langkah-langkah praktis untuk membuat Deployment dalam Kubernetes.
Memulai Minikube
Sebelum kita memulai Deployment kita, pastikan bahwa Minikube berjalan. Jalankan perintah berikut:
$ minikube start
Memulai Pod sebagai Deployment
Selanjutnya, kita akan membuat Deployment menggunakan perintah kubectl create deployment
. Dalam kasus ini, kita akan melakukan penyebaran aplikasi contoh yang disebut helloworld
.
Flag --image
digunakan untuk menentukan Docker image yang akan digunakan untuk membuat Pods dalam Deployment ini. Berikut adalah perintahnya:
$ kubectl create deployment --image gcr.io/google-samples/hello-app:1.0 helloworld
deployment.apps/helloworld created
Dengan perintah ini, Kubernetes menarik image yang ditentukan dari registry kontainer dan memulai sebuah instance tunggal dari aplikasi kita, yang disebut Pod.
Menampilkan Daftar Deployments
Setelah Deployment dibuat, kita dapat menggunakan perintah kubectl get deployment
untuk menampilkan daftar semua Deployment yang sedang berjalan pada konteks kita saat ini. Berikut adalah perintahnya:
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
helloworld 1/1 1 1 2m35s
Perintah ini akan memberikan daftar semua Deployments, termasuk Deployment helloworld
yang baru saja kita buat.
Menambahkan Skala Deployment
Kubernetes memungkinkan Anda untuk dengan mudah meningkatkan atau mengurangi skala Deployment Anda. Ini sangat berguna untuk mengatasi lonjakan lalu lintas atau mengurangi penggunaan resource selama jam sibuk yang rendah.
Mari kita tingkatkan jumlah Pods dalam Deployment helloworld
menjadi 5. Kita dapat mencapainya dengan menggunakan perintah kubectl scale
:
$ kubectl scale --replicas=5 deploy/helloworld
Perintah ini memberitahu Kubernetes bahwa kita ingin memiliki 5 replika dari Pods dalam Deployment helloworld
. Kubernetes kemudian menjadwalkan Pods tambahan untuk dimulai, sehingga meningkatkan jumlah total Pods helloworld
menjadi 5. Anda dapat memverifikasinya dengan menggunakan perintah kubectl get deployment
lagi.
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
helloworld 5/5 5 5 2m35s
Melakukan Rolling Update pada Deployment
Kita akan melihat bagaimana melakukan rolling update pada Deployment Kubernetes. Pembaruan bertahap memungkinkan pembaruan Deployment dilakukan tanpa waktu henti dengan secara bertahap memperbarui instance Pods dengan yang baru.
Saat ini, kita memiliki lima Pods helloworld
.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
helloworld-75db9fdfbc-5n68f 1/1 Running 0 3m23s
helloworld-75db9fdfbc-h5c28 1/1 Running 0 3m23s
helloworld-75db9fdfbc-hm8c5 1/1 Running 0 3m23s
helloworld-75db9fdfbc-skjbw 1/1 Running 0 3m28s
helloworld-75db9fdfbc-zq69x 1/1 Running 0 3m23s
Pembaruan bertahap dapat dilakukan dengan menggunakan perintah kubectl set image
. Perintah ini mengupdate image dari container tertentu dalam Deployment. Mari kita ubah image dari Deployment helloworld
:
$ kubectl set image deploy/helloworld hello-app=gcr.io/google-samples/hello-app:2.0
Perintah ini mengupdate image dari container hello-app
dalam Pods helloworld
menjadi versi 2.0. Kubernetes akan membuat ReplicaSet baru dan meningkatkan jumlah replika sementara jumlah replika lama berkurang.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
helloworld-75db9fdfbc-h5c28 1/1 Terminating 0 3m33s
helloworld-75db9fdfbc-zq69x 0/1 Terminating 0 3m33s
helloworld-7c6785877d-27n2l 1/1 Running 0 5s
helloworld-7c6785877d-5w67z 1/1 Running 0 6s
helloworld-7c6785877d-9dwzh 1/1 Running 0 6s
helloworld-7c6785877d-ch9fr 1/1 Running 0 6s
helloworld-7c6785877d-pp8g9 0/1 ContainerCreating 0 4s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
helloworld-7c6785877d-27n2l 1/1 Running 0 10s
helloworld-7c6785877d-5w67z 1/1 Running 0 11s
helloworld-7c6785877d-9dwzh 1/1 Running 0 11s
helloworld-7c6785877d-ch9fr 1/1 Running 0 11s
helloworld-7c6785877d-pp8g9 1/1 Running 0 9s
Memeriksa Riwayat Deployment
Kita dapat menggunakan perintah kubectl rollout history
untuk melihat riwayat Deployment helloworld
:
$ kubectl rollout history deploy/helloworld
deployment.apps/helloworld
REVISION CHANGE-CAUSE
1 <none>
2 <none>
Perintah ini akan memberikan kita riwayat revisi Deployment beserta perubahan yang terjadi pada setiap revisi.
Melakukan Rollback pada Deployment
Jika kita perlu melakukan rollback pada Deployment helloworld
ke revisi sebelumnya, kita dapat menggunakan perintah kubectl rollout undo
:
$ kubectl rollout undo deploy/helloworld
deployment.apps/helloworld rolled back
Perintah ini mengembalikan keadaan Deployment ke revisi sebelumnya, yang dalam hal ini mengembalikan image container hello-app
ke versi sebelumnya.
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
helloworld-75db9fdfbc-4bqbv 1/1 Running 0 2s
helloworld-75db9fdfbc-58z5v 1/1 Running 0 2s
helloworld-75db9fdfbc-6sn7j 0/1 Pending 0 1s
helloworld-75db9fdfbc-8gcd6 0/1 ContainerCreating 0 2s
helloworld-75db9fdfbc-zwq44 0/1 Pending 0 1s
helloworld-7c6785877d-5w67z 1/1 Terminating 0 89s
helloworld-7c6785877d-9dwzh 1/1 Terminating 0 89s
helloworld-7c6785877d-ch9fr 1/1 Running 0 89s
helloworld-7c6785877d-pp8g9 1/1 Running 0 87s
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
helloworld-75db9fdfbc-4bqbv 1/1 Running 0 9s
helloworld-75db9fdfbc-58z5v 1/1 Running 0 9s
helloworld-75db9fdfbc-6sn7j 1/1 Running 0 8s
helloworld-75db9fdfbc-8gcd6 1/1 Running 0 9s
helloworld-75db9fdfbc-zwq44 1/1 Running 0 8s
Membersihkan Deployment
Setelah selesai melakukan semua operasi dan eksperimen dengan Deployment, merupakan praktik yang baik untuk membersihkan resource yang telah dibuat. Hal ini memastikan agar sistem tetap bersih.
Untuk menghapus Deployment helloworld
, gunakan perintah kubectl delete
:
$ kubectl delete deploy helloworld
Perintah ini menghapus Deployment beserta semua resource terkaitnya dari klaster Kubernetes, memastikan bahwa tidak ada resource yang tidak digunakan ditinggalkan.