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 sudah ada dan membuatnya berjalan di Kubernetes. Dalam codelab ini, Anda akan memigrasikan aplikasi web yang ada yang 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 berstatus dari instance Compute Engine yang ada
  • Cara men-deploy container ke Kubernetes dan mengonfigurasinya dengan load balancer

Yang Anda butuhkan

  • Project Google Cloud dengan penagihan yang telah disiapkan. Jika belum memilikinya, Anda harus membuatnya.

2. Mempersiapkan

Codelab ini dapat berjalan sepenuhnya di Google Cloud Platform tanpa perlu penginstalan atau konfigurasi lokal.

Mengaktifkan API

Sebelum memulai, pastikan untuk mengaktifkan API yang diperlukan di project Google Cloud Anda:

Membuat Server Web Instance Komputasi

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 agar lebih mudah digunakan, 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 

Setengah bagian pertama perintah ini akan membuat instance Google Cloud di zona us-central1-a, sedangkan setengah bagian kedua akan membuat aturan firewall bernama 'default-allow-http' yang akan mengizinkan traffic http ke jaringan kita.

Jika berhasil dibuat, instance akan menampilkan tabel dengan detail instance. Catat External IP - kita akan memerlukannya untuk memverifikasi apakah 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

Keluar 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 tempat kita akan 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

Tunggu beberapa menit hingga 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, lalu pilih project Anda dari daftar jika diminta. Halaman berikutnya akan menampilkan formulir dengan beberapa nilai default yang dimasukkan. Pastikan cluster yang dipilih adalah cluster yang baru saja kita buat, lalu 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 kumpulan stateful

Kita telah menjalankan cluster Kubernetes untuk Migrate for Anthos, jadi sekarang kita dapat memulai proses migrasi. Untuk men-deploy instance komputasi 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 nonaktifkan 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 memasukkan project ID dan ID instance 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:

  • Pastikan instance GCE Anda nonaktif
  • Buat snapshot dari setiap disk instance Anda
  • Buat disk baru dari setiap snapshot
  • Menghapus snapshot yang dibuatnya
  • Buat file YAML di direktori kerja saat ini untuk men-deploy set berstatus yang akan menghosting server web Anda

File yaml yang dibuat akan menyediakan stateful set di cluster kubernetes, beserta klaim volume persisten yang diperlukan untuk memasang disk yang disalin ke container server web. Kita dapat menerapkan perubahan ini dengan kubectl:

kubectl apply -f containerized-webserver.yaml

Periksa status webserver-statefulset di halaman Workloads:

Status 'Pods are pending' akan muncul selama beberapa menit setelah menjalankan kubectl apply. Lanjutkan setelah statusnya menunjukkan 'OK'.

5. Mengekspos cluster ke load balancer

Pada tahap ini, cluster Kubernetes kita akan menjalankan server web sebagai set stateful, tetapi kita juga perlu mengekspos kontainernya 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 diinstrumentasi untuk logging dan pemantauan dengan Stackdriver. Mari kita lihat beberapa metrik yang diambil Stackdriver untuk kita secara otomatis.

Klik link Monitoring di menu produk - mengakses link ini untuk pertama kalinya dari project Anda mungkin memerlukan waktu beberapa menit saat menyiapkan ruang kerja Anda.

Setelah dimuat, arahkan kursor ke Resources di panel kiri dan pilih "Kubernetes Engine NEW" dari menu.

4e62c8ad3f2b3fe9.png

Setiap baris dalam dasbor yang ditampilkan di sini mewakili resource Kubernetes. Anda dapat beralih di antara tampilan infrastruktur, beban kerja, atau layanan dengan link di atas dasbor.

62066a9251d19843.png

Di tampilan Workloads, luaskan ‘my-gke-cluster' dan lihat perincian default > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset. Klik penampung set berstatus 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 kami membuat dasbor kustom yang dapat digunakan untuk mengatur diagram dan grafik untuk data metrik apa pun yang tersedia bagi kami. Mari buat dasbor kustom untuk memberikan tampilan sekilas beberapa metrik server web kita.

Di panel sisi kiri, arahkan kursor ke Dasbor, lalu klik Buat Dasbor.

56a0513efe60de3e.png

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

bd66ba91f3125028.png

Ingat metrik siap pakai? Mari tambahkan diagram untuk pemakaian CPU container. Di kolom Judul Diagram, masukkan 'Penggunaan CPU'. Di kotak ‘Cari jenis resource dan metrik', ketik request_utilization, lalu pilih pemakaian permintaan CPU dari daftar yang difilter. Pilihan ini akan mengisi kolom Jenis resource dan Metrik untuk kami.

Selanjutnya, kita akan memfilter menurut project_id (jika kita memiliki beberapa project) dan container_name. Di kotak Filter, ketik project_id, pilih dari daftar yang difilter, lalu pilih project Anda di kolom Nilai. Kita juga perlu memfilter menurut container_name. Di kotak Filter, ketik container_name, pilih dari daftar yang difilter, lalu pilih webserver-statefulset di kolom Nilai. Klik Simpan.

Sekarang kita memiliki dasbor dengan diagram pertama.

3d3d45e4357454e0.png

7. Kebijakan cek uptime dan pemberitahuan

Dengan Stackdriver, kita dapat menyiapkan pemberitahuan untuk memberi tahu kita saat metrik mencapai nilai batas yang kita tentukan. Misalnya, kita dapat meminta Stackdriver mengirimkan email kepada kita saat penggunaan CPU dari langkah terakhir berada di atas nilai minimum tertentu selama jangka waktu yang berkelanjutan, yang mungkin menunjukkan adanya masalah pada aplikasi kita. Untuk mendemonstrasikan tampilan pemberitahuan ini, mari kita siapkan pemeriksaan uptime, lalu simulasikan gangguan.

Dari panel kiri, pilih Cek Uptime, lalu Ringkasan Cek Uptime:

49368e5700274cf2.png

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

d884560f91011009.png

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

568a8f1e27ae8417.png

Klik Simpan dan Anda akan diminta untuk membuat Kebijakan Pemberitahuan yang menyertainya:

f89d53a106a709f4.png

Klik Buat Kebijakan Pemberitahuan.

Beri nama kebijakan ini ‘Endpoint Uptime Policy'. Di bagian Konfigurasi, tetapkan 'Kondisi dipicu jika' ke 'Deret waktu mana saja melanggar', lalu klik simpan.

74609849348bd03e.png

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

44c474e28a497659.png

Klik Tambahkan Saluran Notifikasi. Terakhir, di bagian bawah formulir, beri nama kebijakan ‘Waktu Aktif Aplikasi Web' dan klik Simpan.

Untuk melihat tampilan pemberitahuan, di Konsol Cloud, buka Cloud Shell Anda sekali lagi. Perintah berikut akan menghentikan layanan nginx yang berjalan di pod webserver kita:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

Setelah beberapa menit, Anda akan menerima email yang memberitahukan tentang gangguan tersebut:

808ac1d75ce3681f.png

Mari kita batalkan. Kembali di 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 bermigrasi dari GCE ke GKE dengan Migrate for Anthos, mari kita hapus semua resource yang telah kita buat dari project.

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.pngdi bagian atas halaman, lalu pilih Hapus Dasbor.

Kebijakan Pemberitahuan

Dari halaman Kebijakan, pilih Hapus dari menu Tindakan 2ef75d82e76accaa.png di sebelah kanan untuk setiap kebijakan yang Anda buat.

Cek Uptime

Dari halaman Cek Uptime, pilih Hapus dari menu Tindakan 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

Stateful set kita menggunakan disk yang kita buat. Gunakan kode berikut untuk mengambil nama:

gcloud compute disks list --filter=webserver

Dengan menggunakan nama disk Anda, bukan nama disk saya, hapus disk tersebut 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

  • Kami memigrasikan server web dari GCE ke cluster Kubernetes menggunakan Migrate for Anthos
  • Kami membuka server web stateful set kami ke dunia dengan mengeksposnya melalui layanan load balancer Kubernetes.
  • Kami mengaktifkan Stackdriver dan membuat dasbor kustom
  • Kami mengonfigurasi cek uptime beserta kebijakan pemberitahuan untuk memberi tahu kami saat server web kami berhenti berfungsi