Traffine I/O

Bahasa Indonesia

2022-06-22

Deployment di Kubernetes

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:

bash
$ 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:

bash
$ 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:

bash
$ 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:

bash
$ 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.

bash
$ 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.

bash
$ 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:

bash
$ 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.

bash
$ 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:

bash
$ 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:

bash
$ 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.

bash
$ 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:

bash
$ kubectl delete deploy helloworld

Perintah ini menghapus Deployment beserta semua resource terkaitnya dari klaster Kubernetes, memastikan bahwa tidak ada resource yang tidak digunakan ditinggalkan.

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!