life, learn, contribute Show
Endy MuhardinSoftware Developer berdomisili di Jabodetabek, berkutat di lingkungan open source, terutama Java dan Linux. Mendeploy Docker Container ke Google Container Engine10 Apr 2017 Pada artikel sebelumnya, kita telah membuat docker image, merangkainya dengan docker compose, kemudian menjalankannya di Docker Engine di Digital Ocean. Di artikel ini, kita akan coba naikkan level kekiniannya dengan mendeploy ke Google Container Engine yang biasa disingkat GKE. Ingat!! Pakai
Untuk mendeploy ke GKE, kita akan menggunakan Kubernetes, bukan Docker Compose.
Singkatnya begini, dalam Docker Compose, kita berbicara di level instance. Aplikasi web kita satu instance, database server satu instance. Beda ya, instance dengan node. Node itu bisa disebut satu mesin. Dalam satu mesin bisa menampung banyak instance aplikasi kita. Bila aplikasi web kita digandakan menjadi beberapa instance (mungkin untuk alasan failover, mungkin untuk meningkatkan kapasitas melayani request), maka itu disebut replikasi atau clustering. Untuk mengelola replikasi ini, terutama replikasi docker container, ada beberapa alternatif solusi yang tersedia, diantaranya:
Pada artikel ini, kita akan mendeploy aplikasi menggunakan Kubernetes.
Alasan utama sih sebenarnya karena saya pengen belajar Kubernetes, biar kekinian :D Selain itu, karena kita ingin deploy ke layanan cloud yang disediakan oleh Google. Ke Heroku kan sudah, ke Digital Ocean sudah, ke Pivotal sudah, nah jadi sekarang kita coba produknya Google.
Ya simply karena jatah gratisan Amazon saya sudah habis. Jadi kita maksimalkan yang masih gratis dulu :D Mari kita mulai … Pada artikel ini, kita batasi dulu untuk deployment satu instance saja. Sebetulnya Kubernetes lebih ditujukan untuk mengelola deployment ratusan ribu instance di ribuan node. Sayangnya aplikasi contoh kita belum cluster-ready, jadi sementara kita tunda dulu clusteringnya. Cukup kita tiru saja konfigurasi docker compose kemarin, yaitu satu instance database, satu instance aplikasi, kemudian kita gunakan persistent volume untuk menyimpan data agar tidak hilang pada saat container dihapus. Lain waktu kita akan perbaiki aplikasinya supaya cluster-ready, sehingga nanti tinggal kita scale-out dengan mudah. Apa itu KubernetesSingkatnya begini, Kubernetes adalah aplikasi cluster management open source yang disponsori oleh Google. Aplikasi ini berasal dari aplikasi internal yang digunakan Google (namanya Borg) untuk mengelola cluster mereka sendiri. Janji surganya adalah, karena berasal dari pengalaman Google belasan tahun dalam mengelola cluster, maka Kubernetes ini akan merupakan kristalisasi dari best-practices dan lesson-learned dari belasan tahun tersebut. Secara bisnis, Kubernetes ini merupakan senjata andalan Google untuk mendongkrak peringkatnya di pasar cloud hosting, yang saat ini jauh berada di bawah Amazon dan Azure-nya Microsoft. Ini bisa dilihat dari betapa mudahnya kita menggunakan Kubernetes di GKE. Bandingkan dengan susahnya setup Kubernetes di tempat lain. Sebelum lebih jauh, kita pahami dulu beberapa istilah dalam Kubernetes:
Di Google Cloud Platform, segala infrastruktur yang dibutuhkan untuk menjalankan Kubernetes sudah tersedia. Sehingga kita cukup belajar cara pakainya saja, tidak perlu pusing memikirkan cara setupnya :D Setup Google Cloud PlatformUntuk mendapatkan akses ke Google Cloud Platform, langsung saja mendaftar ke websitenya. Tidak perlu saya jelaskan ya, cukup klik saja tombol Free Trial. Biasanya yang gratis-gratis gampang dicari kok :P Saya agak lupa apakah perlu kartu kredit atau tidak. Lagipula kartu kredit saya sudah pernah didaftarkan waktu beli aplikasi di Play Store. Jadi mungkin sudah terintegrasi sehingga saya tidak dimintai lagi. Setelah selesai membuat akun, buat project baru di dalam web console Google Cloud. Project di artikel ini namanya Setup Google Cloud SDKSetelah mendapat akun, berikutnya kita instal Google Cloud SDK. Sebetulnya bisa saja kita klak klik di web console. Tapi saya kurang suka. Selain lambat (menggerakkan mouse lebih lambat daripada mengetik command), juga sulit diotomasi nantinya di proses Continuous Integration. Instalasi Google Cloud SDK juga tidak perlu kita bahas ya. Silahkan ikuti panduan di sini. Kita harus login dulu menggunakan Google Cloud SDK agar bisa mengakses akun kita di Google Cloud. Buka command prompt, dan lakukan perintah berikut Kita akan dipandu untuk melakukan proses login.
Ketik saja enter untuk memilih Yes. Kita akan dibukakan browser untuk melanjutkan proses login
Bila kita belum login Google, kita harus login dulu. Tapi biasanya orang sudah membuka GMail di browsernya, sehingga bisa langsung ke laman otorisasi
Setelah otorisasi, kita akan disuruh pilih project mana yang akan kita kerjakan. Bila nanti mau pindah project, kita bisa melakukan setup ulang. Pilih 1, yaitu project yang sudah kita buat setelah pendaftaran tadi.
Pilih zona default. Di sini saya pilih 1 agar servernya lebih dekat ke Indonesia.
Berikutnya, kita siapkan file credentials agar Kubernetes nantinya bisa melakukan deployment.
Kita akan dibukakan browser lagi dan dimintai persetujuan Allow saja supaya bisa lanjut. Setelah diapprove, kita akan mendapatkan file authentication seperti disebutkan dalam output command line tadi.
Instalasi KubernetesAgar dapat berinteraksi dengan kubernetes cluster, kita harus melakukan instalasi terlebih dulu. Kita bisa menginstalnya melalui Google Cloud SDK dengan perintah berikut
Atau kita bisa install langsung di sistem operasi dengan perintah berikut (MacOS) Saya menggunakan metode instalasi
Membuat ClusterPembuatan cluster bisa dilakukan melalui tampilan web Google Cloud Platform ataupun command line
Outputnya sebagai berikut
Menyiapkan VolumeKonfigurasi kubernetes yang saya buat menggunakan persistent volume supaya datanya tidak hilang pada saat container dimatikan, baik karena upgrade, masalah terhadap node, pindah node, dan sebagainya. Persistent volume sudah disediakan Google Cloud Platform, kita tinggal buat saja dengan perintah berikut
Persistent volume ini akan terlihat seperti partisi harddisk biasa dalam container kita. Sehingga bisa kita mount ke folder mana saja di dalam sistem operasi container. Kita akan bahas lebih lanjut deklarasi dan penggunaannya di bawah nanti. Perintah di atas akan membuat partisi harddisk dengan ukuran 10GB yang berlokasi di region Output perintah di atas seperti ini
Walaupun disitu dinyatakan bahwa kita perlu memformat partisi tersebut, abaikan saja. Konfigurasi kita nanti akan otomatis melakukan formatting. Buat satu lagi untuk menampung hasil upload di aplikasi web. Caranya sama, ganti saja Selesai sudah proses setup Google Cloud SDK, instalasi Kubernetes, dan pembuatan cluster lengkap dengan persistent volumenya. Sekarang kita lihat konfigurasi deploymentnya. Konfigurasi DeploymentAgar rapi, konfigurasi kita pisahkan menjadi 3 file :
Mari kita lihat satu persatu Persistent VolumePada dasarnya, konfigurasi ini berisi deklarasi untuk persistent disk yang sudah kita buat pada langkah sebelumnya. Kita perlu mendeklarasikannya supaya bisa dipakai di konfigurasi lainnya. Berikut
isi file
Kita mendeklarasikan dua persistent volume, sesuai command kita jalankan sebelumnya. Isi file sudah cukup jelas, yaitu menyebutkan:
Database ServerKonfigurasi database kita definisikan di file
Berikut konfigurasi persistent volume claim
Penjelasannya:
Selanjutnya, kita lihat konfigurasi MySQL Instance
Penjelasannya :
Berikutnya adalah konfigurasi service, agar database kita bisa diakses dari aplikasi web
Tidak ada yang istimewa di
sini. Selain label, kita cuma mendeklarasikan bahwa port 3306 akan diakses oleh pod lain. Service ini bisa terarah ke pod database kita karena di selectornya disebutkan bahwa dia akan terhubung ke pod yang memiliki label Aplikasi WebSecara struktur, konfigurasi aplikasi web tidak jauh berbeda. Hanya beda di image saja dan service agar bisa diakses dari internet. File konfigurasinya kita simpan di file Ini adalah konfigurasi PVCnya
Sama seperti database, ini adalah request volume sebesar 10 GB. Tidak ada yang baru di sini, mari lanjut ke konfigurasi pod.
Kita bahas yang berbeda saja:
Sisanya sama, yaitu metadata dan setting volume. Selanjutnya, konfigurasi Service supaya aplikasi web kita ini bisa diakses dari internet.
Pada konfigurasi di atas, kita membuat Service yang akan menghubungkan dunia luar dengan pod yang memiliki selector Menjalankan DeploymentKetiga file konfigurasi tadi kita satukan dalam satu folder yang bernama Berikut outputnya
Perintah di atas akan langsung selesai, walaupun sebenarnya kubernetes belum selesai menjalankan semua container dan services yang kita mau. Untuk melihat statusnya, jalankan perintah berikut
Perintah di atas menampilkan status untuk object
Kita bisa lihat bahwa statusnya masih pending semua. Coba jalankan lagi beberapa kali sampai statusnya berubah.
Kita bisa lihat bahwa kolom
Untuk mengetes
HTTP request bisa dikirim menggunakan aplikasi seperti Postman atau Rest Console. Pastikan datanya masuk dengan mengakses lagi Data ini akan terus ada selama gcloud disk masih ada. Kita bisa menghapus semua aplikasi kita dengan perintah berikut
Outputnya seperti ini
Hapus juga persistent volume dalam cluster.
Outputnya :
Perintah tadi akan menghapus semua komponen aplikasi. Kita bahkan juga bisa menghapus clusternya sekalian
Outputnya :
Walaupun clusternya sudah kita hapus, tapi disknya tetap ada. Coba kita cek
Outputnya
Selama disk ini tidak kita hapus, data produk sebanyak 2 record tadi akan tetap ada. Bisa dibuktikan dengan mengulangi pembuatan cluster dan deployment aplikasi. Setelah
mendapatkan PenutupDemikianlah deployment aplikasi ke Google Container Engine (GKE) dengan menggunakan Kubernetes. Setelah kita bisa melakukannya secara manual, pada artikel berikutnya kita akan otomasi menggunakan proses Continuous Delivery. Seperti biasa, seluruh kode program bisa diakses di Github Semoga bermanfaat, stay tuned… |