Penggunaan Docker pada Google Kubernetes Engine (GKE)

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

Kamu ingin membuat aplikasi dan me-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, diantaranya: Google Cloud Platform (GCP), Microsoft Azure, 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 minimum konfigurasi, sebagai konsekuensi-nya adalah harga GAE yang lebih mahal dibanding 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 juga 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 project 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.

The introduction of Kubernetes reduces the burden of building and operating a large number of components by the users themselves, thus reducing the time and cost of operations after launching our projects.

Mengenal Docker

Docker dikembangkan untuk mempermudah proses deployment aplikasi dengan cara membungkus aplikasi menjadi Docker Image. Docker image ini kemudian dapat dijalankan ke dalam lingkungan yang terisolir dan independent 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, maka dapat dipastikan aplikasi tersebut akan berfungsi di environment lainnya.

Agile

Penggunaan docker memungkinkan proses pengembangan aplikasi menjadi lebih agile dengan penerapan Continuous Integration/Continuous Deployment

Terisolir

Setiap container mengandung library dengan versi tertentu yang dibutuhkan oleh aplikasi milikmu. Library ini tidak di-saling-guna-kan 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, Google Cloud Platform menyediakan berbagai pilihan kepadamu untuk men-deploy docker imagemu menjadi container. Salah satu produk yang sering digunakan untuk kebutuhan tersebut adalah Google Kubernetes Engine (GKE).

Deploy Aplikasimu menggunakan 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. Cara-nya adalah 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 diatas akan me-boot docker image yang telah dibuat dan me-mapping port 8080 dari laptop kamu sebagai port 8080 didalam 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 meng-upload 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 diupload ke google container registry:

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

4. Selanjutnya, mari kita upload 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 kemanapun.

Membuat dan Deploy aplikasi ke GKE Cluster

GKE Cluster merupakan serangkaian virtual machine yang menjalankan kubernetes. Kita akan me-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 diatas menggunakan variable %PROJECT_ID% yang sudah dikonfigurasi sebelumnya dan me-set zona virtual machine ke data center 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 diatas akan menyiapkan 1 alamat IP untuk aplikasi-mu. 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 aplikasi-mu 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 service 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 diatas, 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 link berikutnya.

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

References

--

--