1. Ringkasan
Menulis ulang atau merekayasa ulang aplikasi yang ada agar dapat berjalan di Kubernetes tidak selalu memungkinkan atau layak dilakukan secara manual. Migrate for Anthos dapat membantu memodernisasi aplikasi yang ada dan membuatnya berjalan di Kubernetes. Dalam codelab ini, Anda akan memigrasikan aplikasi web yang ada dan dihosting di Compute Engine ke Kubernetes Engine menggunakan Migrate for Anthos.
Yang akan Anda pelajari
- Cara men-deploy Migrate for Anthos di cluster Kubernetes
- Cara membuat container dalam set stateful dari instance Compute Engine yang ada
- Cara men-deploy container ke Kubernetes dan mengonfigurasinya dengan load balancer
Yang akan Anda butuhkan
- Project Google Cloud dengan penagihan yang disiapkan. Jika Anda belum memilikinya, Anda harus membuatnya.
2. Mempersiapkan
Codelab ini dapat dijalankan sepenuhnya di Google Cloud Platform tanpa perlu melakukan instalasi atau konfigurasi lokal.
Mengaktifkan API
Sebelum memulai, pastikan untuk mengaktifkan API yang diperlukan di project Google Cloud Anda:
Membuat Server Web Instance Compute
Mari kita buat instance komputasi yang akan kita gunakan untuk menghosting server web nginx awal, beserta aturan firewall yang akan memungkinkan kita melihat halaman landing default server web. Ada beberapa cara untuk melakukannya, tetapi untuk kemudahan penggunaan, kita akan menggunakan Cloud Shell.
Di Cloud Shell jalankan perintah berikut:
gcloud compute instances create webserver --zone=us-central1-a && \ gcloud compute firewall-rules create default-allow-http --allow=tcp:80
Bagian pertama perintah ini akan membuat instance Google Cloud di zona us-central1-a, sedangkan bagian kedua akan membuat aturan firewall bernama 'default-allow-http' yang akan mengizinkan traffic http ke jaringan kita.
Setelah berhasil dibuat, instance akan menampilkan tabel dengan detail instance. Catat IP Eksternal - kita akan memerlukannya untuk memverifikasi bahwa server web kita berjalan nanti.

Setelah instance aktif dan berjalan, kita dapat menjalankan SSH ke instance dari Cloud Shell untuk menginstal nginx dan memulai server web:
gcloud compute ssh --zone us-central1-a webserver
Setelah login ke instance komputasi, instal nginx:
sudo apt install nginx
Logout dari sesi SSH dengan perintah logout
Mari kita verifikasi bahwa server web kita berjalan dengan memasukkan IP eksternal instance dari sebelumnya ke browser kita. Anda akan melihat layar sambutan nginx default:

Server web ini akan berfungsi sebagai aplikasi web lama yang akan kita migrasikan ke Kubernetes menggunakan Migrate for Anthos.
3. Cluster Kubernetes dengan Migrate for Anthos
Selanjutnya, kita akan membuat cluster GKE yang akan menjadi tempat kita memigrasikan server web Compute Engine. Di Konsol Cloud, jalankan perintah berikut:
gcloud container clusters create my-gke-cluster \ --zone us-central1-a \ --cluster-version 1.13 \ --machine-type n1-standard-4 \ --image-type "UBUNTU" \ --num-nodes 1 \ --enable-stackdriver-kubernetes
Berikan waktu beberapa menit agar perintah ini selesai. Setelah cluster dibuat, Anda akan menerima beberapa output dengan detailnya:

Selanjutnya, buka GCP Marketplace untuk Men-deploy Migrate for Anthos:

Di halaman marketplace untuk Migrate for Anthos, klik configure dan jika diminta, pilih project Anda dari daftar. Halaman berikutnya akan menampilkan formulir dengan beberapa nilai default yang dimasukkan. Pastikan cluster yang dipilih adalah cluster yang baru saja kita buat dan klik Deploy:

Migrate for Anthos kini harus di-deploy di cluster Kubernetes kita. Setelah selesai di-deploy, Anda akan melihat status 'OK' di halaman Aplikasi Kubernetes Engine:

4. Dari instance komputasi ke set stateful
Kita memiliki cluster Kubernetes yang menjalankan Migrate for Anthos, jadi sekarang kita dapat memulai proses migrasi. Untuk men-deploy instance compute ke cluster Kubernetes, kita akan mematikan instance Compute Engine agar dapat mengambil snapshot disk. Sebelum melanjutkan, catat ID instance, yang akan kita perlukan nanti:
gcloud compute instances describe webserver --zone us-central1-a | grep ^id
Mari kita matikan instance komputasi:
gcloud compute instances stop webserver --zone us-central1-a
Setelah instance dihentikan, kita dapat mengambil snapshot disk dengan aman dengan menjalankan skrip berikut. Pastikan untuk menyisipkan project ID dan instance ID Anda:
python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \ -p <project-id> -i <instance-id> \ -z us-central1-a \ -T us-central1-a \ -A webserver-statefulset \ -o containerized-webserver.yaml
Dengan flag tersebut, clone_vm_disks.py akan:
- Memverifikasi bahwa instance GCE Anda nonaktif
- Membuat snapshot dari setiap disk instance Anda
- Membuat disk baru dari setiap snapshot
- Menghapus snapshot yang dibuatnya
- Membuat file YAML di direktori kerja saat ini untuk men-deploy set stateful yang akan menghosting server web Anda
File YAML yang dibuat akan menyediakan set stateful di cluster Kubernetes kita, beserta klaim volume persisten yang diperlukan untuk memasang disk yang disalin ke container server web kita. Kita dapat menerapkan perubahan ini dengan kubectl:
kubectl apply -f containerized-webserver.yaml
Periksa status webserver-statefulset di halaman Beban Kerja:
Status 'Pods are pending' akan muncul selama beberapa menit setelah menjalankan kubectl apply. Lanjutkan setelah statusnya 'OK'.
5. Mengekspos cluster ke load balancer
Pada tahap ini, cluster Kubernetes kita harus menjalankan server web sebagai set stateful, tetapi kita juga perlu mengekspos containernya ke load balancer untuk mengakses server web melalui alamat IP eksternal. Di Cloud Shell, buat file baru bernama loadbalancer.yaml dengan konten berikut:
loadbalancer.yaml
apiVersion: v1
kind: Service
metadata:
name: webserver-loadbalancer
spec:
type: LoadBalancer
selector:
app: webserver-statefulset
ports:
- protocol: TCP
port: 80
targetPort: 80
Sekarang terapkan dengan kubectl:
kubectl apply -f loadbalancer.yaml
Kita dapat menggunakan kubectl untuk mengambil alamat IP eksternal layanan webserver-container:
kubectl get services
Jika kita memasukkan alamat IP eksternal di browser, kita akan mendapatkan layar sambutan nginx default yang sama seperti sebelumnya:

Kita berhasil! Server web GCE kita kini dihosting di Kubernetes. Bagus!
6. Stackdriver Monitoring
Metrik
Sebagai layanan Kubernetes terkelola, Kubernetes Engine secara otomatis dilengkapi dengan instrumentasi untuk logging dan monitoring dengan Stackdriver. Mari kita lihat beberapa metrik yang diambil Stackdriver secara otomatis untuk kita.
Klik link Monitoring di menu produk - mengaksesnya untuk pertama kalinya dari project Anda mungkin memerlukan waktu beberapa menit saat menyiapkan ruang kerja.
Setelah dimuat, arahkan kursor ke Resources di panel kiri dan pilih "Kubernetes Engine NEW" dari menu.
Setiap baris di dasbor yang ditampilkan di sini mewakili resource Kubernetes. Anda dapat beralih antara tampilan infrastruktur, beban kerja, atau layanan dengan link di atas dasbor.

Dalam tampilan Beban Kerja, luaskan 'my-gke-cluster' dan telusuri hingga default > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset. Klik container set stateful webserver. Di sini, Anda akan menemukan beberapa metrik siap pakai yang diambil oleh Stackdriver, termasuk penggunaan memori dan penggunaan CPU.

Diagram yang ditampilkan di dasbor ini adalah diagram yang dapat kita gunakan untuk membuat dasbor kustom.
Dasbor Kustom
Stackdriver memungkinkan kita membuat dasbor kustom yang dapat kita gunakan untuk mengatur diagram dan grafik untuk data metrik apa pun yang tersedia bagi kita. Mari kita buat dasbor kustom untuk memberikan tampilan sekilas beberapa metrik server web kita.
Di panel sisi kiri, arahkan kursor ke Dashboards, lalu klik Create Dashboard.

Setelah memiliki dasbor kosong, kita dapat menambahkan metrik yang ingin kita pantau. Mari kita beri nama Untitled Dashboard kita dengan nama yang berguna seperti 'My Web Server Containers' dan klik 'Add Chart' di kanan atas:

Ingat metrik siap pakai? Mari kita tambahkan diagram untuk penggunaan CPU container. Di kolom Chart Title, masukkan 'CPU Utilization'. Di kotak 'Find resource type and metric', ketik request_utilization dan pilih CPU request utilization dari daftar yang difilter. Pilihan ini akan mengisi kolom Resource type dan Metric untuk kita.
Selanjutnya, kita ingin memfilter berdasarkan project_id (jika kita memiliki beberapa project) dan container_name. Di kotak Filter, ketik project_id, pilih dari daftar yang difilter, dan pilih project Anda di kolom Value. Kita juga perlu memfilter berdasarkan container_name. Di kotak Filter, ketik container_name, pilih dari daftar yang difilter, dan pilih webserver-statefulset di kolom Value. Klik Simpan.
Sekarang kita memiliki dasbor dengan diagram pertama.

7. Cek uptime dan kebijakan pemberitahuan
Dengan Stackdriver, kita dapat menyiapkan pemberitahuan untuk memberi tahu kita saat metrik mencapai nilai minimum yang kita tentukan. Misalnya, kita dapat meminta Stackdriver mengirim email kepada kita saat penggunaan CPU dari langkah terakhir berada di atas nilai minimum tertentu untuk jangka waktu yang berkelanjutan, yang mungkin menunjukkan masalah pada aplikasi kita. Untuk menunjukkan tampilan pemberitahuan ini, mari kita siapkan cek uptime , lalu simulasikan gangguan.
Dari panel kiri, pilih Uptime Checks, lalu Uptime Checks Overview:

Seperti yang disarankan halaman Uptime Checks, mari kita siapkan cek uptime pertama. Klik tombol Add Uptime Check di kanan atas halaman.
Di formulir berikutnya, masukkan 'Endpoint Uptime' sebagai judul dan alamat IP eksternal load balancer Anda sebagai nama host.

Klik Save dan Anda akan diminta untuk membuat Alert Policy yang menyertainya:

Klik Create Alert Policy.
Mari kita beri nama 'Endpoint Uptime Policy'. Di bagian Configuration, tetapkan 'Condition triggers if' ke 'Any time series violates' dan klik save.

Kita belum selesai. Selanjutnya, kita akan menentukan Notification Channel agar kita diberi tahu saat kebijakan pemberitahuan kita dilanggar. Di menu drop-down Notification Channel Type, pilih Email, lalu masukkan alamat email yang valid.

Klik Add Notification Channel. Terakhir, di bagian bawah formulir, beri nama kebijakan 'Web App Uptime' dan klik Save.
Untuk melihat tampilan pemberitahuan, di Konsol Cloud, buka kembali Cloud Shell. Perintah berikut akan menghentikan layanan nginx yang berjalan di pod server web kita:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"
Setelah beberapa menit, Anda akan menerima email yang memberi tahu Anda tentang gangguan tersebut:

Mari kita batalkan. Kembali ke Cloud Shell, mari kita mulai ulang nginx:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
Setelah beberapa menit , Anda akan mendapatkan email Stackdriver lain, kali ini dengan kabar yang lebih baik dari sebelumnya:

8. Pembersihan
Setelah kita bermigrasi dari GCE ke GKE dengan Migrate for Anthos, mari kita bersihkan project dari semua resource yang telah kita buat.
Menghapus Project
Jika mau, Anda dapat menghapus seluruh project. Di GCP Console, buka halaman Cloud Resource Manager:
Dalam daftar project, pilih project yang sedang kita kerjakan lalu klik Delete. Anda akan diminta untuk mengetikkan ID project. Masukkan dan klik Shut Down.
Jika Anda lebih suka menghapus komponen yang berbeda satu per satu, lanjutkan ke bagian berikutnya.
Stackdriver
Dasbor
Dari halaman dasbor, klik ikon setelan
di bagian atas halaman dan pilih Delete Dashboard.
Kebijakan Pemberitahuan
Dari halaman Policies, pilih Delete dari menu Actions
di sebelah kanan untuk setiap kebijakan yang Anda buat.
Cek Uptime
Dari halaman Uptime Checks, pilih Delete dari menu Actions di sebelah kanan setiap cek yang Anda buat.
GCE dan Kubernetes
Instance Google Compute Engine
gcloud compute instances delete webserver --zone=us-central1-a
Cluster Kubernetes (mencakup Migrate for Anthos, set stateful, dan layanan load balancer)
gcloud container clusters delete my-gke-cluster --zone=us-central1-a
Disk
Set stateful kita menggunakan disk yang kita buat. Gunakan perintah berikut untuk mengambil nama:
gcloud compute disks list --filter=webserver
Dengan menggunakan nama disk Anda sebagai pengganti nama disk saya, hapus dengan:
gcloud compute disks delete vls-690d-webserver --zone=us-central1-a
Semua sudah dibersihkan.
9. Selamat!
Selamat! Anda telah memigrasikan server web dari instance GCE ke cluster Kubernetes menggunakan Migrate for Anthos.
Yang telah kita bahas
- Kita telah memigrasikan server web dari GCE ke cluster Kubernetes menggunakan Migrate for Anthos
- Kita telah membuka server web set stateful kita ke dunia dengan mengeksposnya melalui layanan load balancer Kubernetes.
- Kita telah mengaktifkan Stackdriver dan membuat dasbor kustom
- Kita telah mengonfigurasi cek uptime beserta kebijakan pemberitahuan untuk memberi tahu kita saat server web kita nonaktif
