Bermigrasi dari Compute Engine ke Kubernetes Engine dengan Migrate for Anthos

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.

a08aa5bf924b107d.png

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:

5c08e3b2bd17e03.png

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:

c69778b8fb8ac72b.png

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

45f5753cae53ccb5.png

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:

94dc6238b2affd16.png

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:

5bf601103a5335cf.png

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:

5c08e3b2bd17e03.png

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.

4e62c8ad3f2b3fe9.png

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.

62066a9251d19843.png

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.

d054778de301429e.png

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.

56a0513efe60de3e.png

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:

bd66ba91f3125028.png

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.

3d3d45e4357454e0.png

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:

49368e5700274cf2.png

Seperti yang disarankan halaman Uptime Checks, mari kita siapkan cek uptime pertama. Klik tombol Add Uptime Check di kanan atas halaman.

d884560f91011009.png

Di formulir berikutnya, masukkan 'Endpoint Uptime' sebagai judul dan alamat IP eksternal load balancer Anda sebagai nama host.

568a8f1e27ae8417.png

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

f89d53a106a709f4.png

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.

74609849348bd03e.png

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.

44c474e28a497659.png

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:

808ac1d75ce3681f.png

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:

5b8262fbbc4877c.png

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 dc259295eb33cb42.png di bagian atas halaman dan pilih Delete Dashboard.

Kebijakan Pemberitahuan

Dari halaman Policies, pilih Delete dari menu Actions 2ef75d82e76accaa.png 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