Penggunaan Docker pada Google Kubernetes Engine (GKE)

Arjuna Tantri
DSF Web Services Engineering
7 min readFeb 8, 2021

Kamu ingin membuat aplikasi dan men-deploy aplikasimu ke Google Could Platform (GCP) menggunakan Docker?

Artikel ini akan mengenalkan Docker dan juga memberikan langkah untuk men-deploy Docker Image ke Google Kubernetes Engine yang tersedia di GCP.

Illustration by Freepik Storyset

Kenapa memilih GCP dan Google Kubernetes Engine (GKE)?

Tersedia banyak Cloud Provider ternama yang dapat kamu gunakan untuk men-deploy Docker, di antaranya GCP, Microsoft Azure, dan Amazon Web Services. Tetapi saat ini, hanya GCP yang menyediakan data center di Indonesia. Tentunya ketersediaan data center lokal memberikan keuntungan tersendiri, yaitu latency network yang lebih rendah dan juga comply terhadap regulasi di Indonesia.

Google Cloud Platform menyediakan beberapa alternatif yang dapat kamu pilih untuk men-deploy aplikasi menggunakan Docker, yaitu:

  • Google App Engine (GAE)
  • Google Kubernetes Engine (GKE)
  • Google Compute Engine (GCE).

GAE merupakan managed service sehingga kamu dapat men-deploy aplikasimu dengan konfigurasi minimum. Sebagai konsekuensinya adalah harga GAE lebih mahal dibandingkan GKE. GAE merupakan opsi yang dapat kamu pilih jika kamu menginginkan environment yang serverless.

GKE lebih cocok untuk kamu yang ingin memiliki keleluasaan terhadap berbagai konfigurasi pada server dan harga yang lebih murah. GKE merupakan Container as a Service. Aplikasi kamu akan di-deploy ke environment Kubernetes yang menawarkan auto-scaling.

GCE merupakan suatu virtual machine yang bisa menggunakan Linux, Windows, ataupun image VM custom. Dengan GCE, kita memiliki keleluasaan dalam menggunakan virtual machine tersebut, termasuk men-deploy aplikasi menggunakan Docker.

Kami memilih GKE dalam proyek kami karena lebih mudah untuk develop, integrate dan deploy, atau yang lebih dikenal dengan implementasi CI/CD. Dengan adanya Kubernetes di GKE, beban team IT menjadi lebih berkurang dalam men-deploy dan menjaga operasional masing-masing komponen microservices kami. Setelah me-launching produk kami, kami memperoleh keseimbangan antara kontrol, harga dan penghematan waktu dalam menggunakan GKE dibandingkan GCE dan GAE.

Mengenal Docker

Docker dikembangkan untuk mempermudah proses deployment aplikasi dengan cara membungkus aplikasi menjadi Docker Image. Docker Image dapat dijalankan ke dalam environment yang terisolir dan independen yang disebut dengan container.

Di dalam container, terdapat semua library yang diperlukan agar aplikasi dapat berjalan dengan baik, sehingga dapat dijalankan di mesin apapun. Cara kerja seperti ini juga dapat diperoleh dengan virtualisasi. Tetapi, yang membuat Docker unggul adalah ukuran file container yang kecil. Hal ini dikarenakan Docker berbagi resource dengan sistem operasi host-nya.

Keunggulan Docker

Berikut keunggulan yang dapat kamu peroleh dengan menggunakan Docker:

Performa yang baik

Dikarenakan container Docker berukuran cukup kecil, container Docker dapat dibuat dan juga di-boot dengan cepat.

Portabel

Setelah container yang berisi aplikasi sudah berjalan dengan baik, dapat dipastikan aplikasi tersebut akan berfungsi di environment lainnya.

Agile

Penggunaan Docker memungkinkan proses pengembangan aplikasi menjadi lebih agile dengan penerapan CI/CD.

Terisolir

Setiap container mengandung library dengan versi tertentu yang dibutuhkan oleh aplikasi milikmu. Library ini tidak disalinggunakan dengan aplikasi lain. Dengan demikian, masalah library hell yang sering terjadi sebelum adanya container, menjadi terpecahkan.

Skalability

Kamu bisa men-deploy beberapa container sekaligus untuk menyesuaikan dengan kebutuhan aplikasimu. Dengan bantuan tool seperti Kubernetes, kamu akan dipermudah untuk mengatur container ini.

Sebagai salah satu penyedia jasa cloud terkemuka, GCP menyediakan berbagai pilihan kepadamu untuk men-deploy Docker Image-mu menjadi container. Salah satu produk yang sering digunakan untuk kebutuhan tersebut adalah GKE.

Men-deploy Aplikasimu dengan Docker ke GKE

Sebelum memulai, pastikan kamu sudah memiliki akun GCP dan meng-enable billing-nya. Jika kamu belum punya, silahkan daftar di sini dan dapatkan akun gratis $300. Selain itu, kamu juga perlu melakukan instalasi gcloud command line tool dan Docker.

Buat Docker Image untuk aplikasi kamu

Agar dapat di-deploy ke GCP GKE, kamu perlu membuat Docker image dari aplikasimu. Caranya dengan menambahkan DockerFile di dalam root folder. DockerFile mengandung instruksi pembuatan Docker image.

1. Download contoh source code dan DockerFile dengan menjalankan perintah berikut:

git clone https://github.com/GoogleCloudPlatform/python-docs-samples.gitcd python-docs-samples/run/helloworld

2. Untuk simplikasi, tentukan nilai variable $PORT dengan mengubah file DockerFile menjadi berikut ini:

CMD exec gunicorn — bind :$PORT — workers 1 — threads 8 — timeout 0 main:appmenjadi

CMD exec gunicorn — bind :8080 — workers 1 — threads 8 — timeout 0 main:app

3. Buatlah docker image dari DockerFile:

docker build -t hello-world:latest .

4. Untuk memastikan aplikasi yang dibangun didalam image docker berjalan dengan baik, jalankan perintah berikut:

docker run --rm -p 8080:8080 hello-world:latest

Perintah di atas akan mem-boot Docker Image yang telah dibuat dan me-mapping Port 8080 dari laptop kamu sebagai Port 8080 di dalam container. Silahkan buka alamat localhost:8080 melalui browser kamu. Jika aplikasi berfungsi, maka kamu akan melihat tampilan seperti berikut:

aplikasi yang dijalankan di lokalhost

Publish Docker Image ke GKE

Selamat, saat ini kamu sudah berhasil membuat Docker Image dan menjalankannya di laptopmu. Berikutnya kita akan mengunggah Docker Image ini ke Google container registry, agar kemudian dapat di-deploy ke GKE.

  1. Dapatkan Google Cloud Project ID -mu melalui link ini
tampilan dashboard di Google Cloud Platform yang menampilkan Project ID
tampilan dashboard di Google Cloud Platform yang menampilkan Project ID

2. Lakukan konfigurasi untuk autentikasi ke container registry Google menggunakan project-id di atas:

set PROJECT_ID="project-id"

Ganti “project-id” sesuai dengan informasi yang tampil di dashboard GCP kamu. Jika kamu menggunakan sistem operasi Linux, kamu mungkin perlu menyesuaikan statement di atas.

3. Tag Docker Image-mu agar dapat diunggah ke Google container registry:

docker tag "hello-world:latest" "gcr.io/%PROJECT_ID%/hello-world:v1"

4. Selanjutnya, mari kita unggah Docker Image-mu:

docker push gcr.io/%PROJECT_ID%/hello-world:v1

Yay! sekarang Docker Image-mu sudah tersedia di Google container registry dan bisa digunakan untuk men-deploy aplikasimu ke manapun.

Membuat dan Deploy Aplikasi ke GKE Cluster

GKE Cluster merupakan serangkaian virtual machine yang menjalankan Kubernetes. Kita akan men-deploy aplikasi kita ke GKE Cluster ini. Virtual machine di GCP dikenal dengan nama produk Compute Engine.

1. Konfigurasi project-id dan opsi zona untuk compute engine-mu

gcloud config set project %PROJECT_ID%gcloud config set compute/zone asia-southeast2-a  (*1)

Statement di atas menggunakan variabel %PROJECT_ID% yang sudah dikonfigurasi sebelumnya dan men-set zona virtual machine ke pusat data di Jakarta.

(*1) Data Center GCP telah tersedia di Jakarta sejak 2020, dan kode “asia-southeuest2-a” merupakan alias di GCP untuk menggunakan data center yang tersedia di Jakarta.

2. Buat cluster dengan nama hello-cluster

gcloud container clusters create hello-cluster

Setelah statement tersebut selesai dijalankan, pastikan bahwa GCP telah menyediakan 3 virtual machine untukmu.

gcloud compute instances list

3. Berikutnya, kita akan men-deploy aplikasi hello-world ke GKE yang telah disiapkan.

kubectl create deployment hello-world --image=gcr.io/%PROJECT_ID%/hello-world:v1

4. Agar dapat diakses dari luar, kamu perlu meng-expose aplikasimu ke internet:

kubectl expose deployment hello-world --type=LoadBalancer --port 80 --target-port 8080

Statement di atas akan menyiapkan 1 alamat IP untuk aplikasimu. Kamu dapat melihat alamat IP-nya dengan menjalankan perintah berikut:

kubectl get services -w

Kamu akan mendapatkan tampilan seperti ini:

5. Silahkan copy external-ip yang telah diassign untuk aplikasi-mu dan buka melalui browser.

aplikasi yang telah berjalan di Google Cloud Platform menggunakan GKE

Selamat! kamu sudah berhasil membuat Docker Image untuk aplikasimu dan juga men-deploy image tersebut ke GCP GKE.

Sebagai tambahan, berikut screenshot dari aplikasi yang penulis deploy ke GCP GKE:

Aplikasi yang berjalan di GCP menggunakan GKE

Cleanup

Sebagai cloud provider, Google mengenakan biaya untuk setiap resource yang kita gunakan. Resource ini bisa berupa layanan Kubernetes ataupun Docker Image yang kita simpan. Karena itu, jangan lupa untuk menghapus resource yang telah kita gunakan untuk kebutuhan belajar saat ini:

kubectl delete service hello-worldgcloud container clusters delete hello-clustergcloud container images delete gcr.io/%PROJECT_ID%/hello-world:v1

Selanjutnya Apa?

Contoh yang diberikan di atas, menggunakan statement yang dieksekusi secara manual. Jika proses deployment sering dilakukan, kamu dapat mempertimbangkan untuk mengotomisasi proses deployment kamu dengan membuat file konfigurasi. Jika kamu tertarik untuk mempelajari lebih lanjut, silahkan baca-baca tautan berikutnya.

Terima Kasih. Semoga informasi ini berguna buat pembelajaran kita bersama dan tetap semangat!

References

--

--

DSF Web Services Engineering
DSF Web Services Engineering

Published in DSF Web Services Engineering

We are sharing our knowledge and process of project. Illustration is by Storyset, Freepik Company

No responses yet