Bermigrasi dari Compute Engine ke Kubernetes Engine dengan Migrate for Anthos

1. Ringkasan

Menulis ulang atau merekayasa ulang aplikasi yang sudah ada agar berfungsi di Kubernetes tidak selalu dapat dilakukan atau tidak mungkin dilakukan secara manual. Migrate for Anthos dapat membantu memodernisasi aplikasi Anda yang sudah ada dan menjalankannya 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 Anda butuhkan

  • Project Google Cloud dengan penyiapan penagihan. Jika belum memilikinya, Anda harus membuatnya.

2. Mempersiapkan

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

Aktifkan API

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

Membuat Server Web Instance Compute

Mari kita buat instance compute yang akan digunakan untuk menghosting server web nginx awal, bersama dengan aturan firewall yang memungkinkan kita melihat halaman landing default server web. Ada beberapa cara yang dapat kita lakukan, 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 

Paruh 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 lalu lintas http ke dalam jaringan kita.

Setelah berhasil dibuat, instance akan menampilkan tabel yang berisi detail instance. Catat IP Eksternal - kami akan membutuhkannya untuk memverifikasi bahwa server web kami 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 pastikan bahwa server web sudah berjalan dengan memasukkan IP eksternal instance dari halaman sebelumnya ke browser. Anda akan melihat layar sambutan nginx default:

5c08e3b2bd17e03.png

Server web ini akan berfungsi sebagai aplikasi web lama yang akan kami migrasikan ke Kubernetes menggunakan Migrate for Anthos.

3. Cluster Kubernetes dengan Migrate for Anthos

Selanjutnya, kita akan membuat cluster GKE tempat kita pada akhirnya 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 yang berisi detailnya:

c69778b8fb8ac72b.png

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

45f5753cae53ccb5.pngS

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

94dc6238b2affd16.pngS

Migrate for Anthos sekarang sudah 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

Ada cluster Kubernetes yang menjalankan Migrate for Anthos, jadi sekarang kita dapat memulai proses migrasi. Untuk men-deploy instance komputasi ke cluster Kubenetes, kita akan mematikan instance Compute Engine sehingga kita 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 secara 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 tanda tersebut, clone_vm_disks.py akan:

  • Pastikan instance GCE Anda nonaktif
  • Membuat snapshot dari setiap disk instance
  • Buat disk baru dari setiap snapshot
  • Menghapus snapshot yang dibuatnya
  • Buat file YAML di direktori kerja Anda saat ini untuk men-deploy set stateful 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' adalah hal yang normal selama beberapa menit setelah menjalankan kubectl apply. Lanjutkan setelah statusnya terbaca 'Oke'.

5. Mengekspos cluster ke load balancer

Pada tahap ini, cluster Kubenetes harus menjalankan server web sebagai set stateful, tetapi kita juga harus mengekspos container-nya ke load balancer untuk mengakses server web kita 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

Dan sekarang terapkan dengan kubectl:

kubectl apply -f loadbalancer.yaml

Kita dapat menggunakan kubectl untuk mengambil alamat IP eksternal dari layanan webserver-container:

kubectl get services

Jika memasukkan alamat IP eksternal di browser, kita akan mendapatkan layar sambutan nginx default yang sama seperti sebelumnya:

5c08e3b2bd17e03.png

Kita sudah berhasil! Server web GCE kita sekarang dihosting di Kubernetes. Bagus!

6. Stackdriver Monitoring

Metrik

Sebagai layanan Kubernetes terkelola, Kubernetes Engine otomatis diinstrumentasikan untuk logging dan pemantauan dengan Stackdriver. Mari kita lihat beberapa metrik yang ditangkap Stackdriver secara otomatis.

Klik link Monitoring pada menu produk - mengakses 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, lalu pilih "Kubernetes Engine NEW" dari menu.

4e62c8ad3f2b3fe9.pngS

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

62066a9251d19843.pngS

Di tampilan Workloads, luaskan 'my-gke-cluster' dan lihat perincian ke default > webserver-statefulset > webserver-statefulset-0 > dengan menggunakan webserver-statefulset. Klik penampung set webserver-stateful. Di sini Anda akan menemukan beberapa metrik siap pakai yang ditangkap 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 digunakan untuk mengatur diagram dan grafik untuk data metrik yang tersedia bagi kita. Mari kita buat dasbor kustom untuk memberikan tampilan sekilas dari beberapa metrik server web kita.

Di panel sebelah kiri, arahkan kursor ke Dashboards, lalu klik Create Dashboard.

56a0513efe60de3e.pngS

Sekarang setelah memiliki dasbor kosong, kita dapat menambahkan metrik yang ingin kita perhatikan. Mari beri nama yang berguna untuk Dasbor Tanpa Judul seperti 'Penampung Server Web Saya' dan klik 'Add Chart' di kanan atas:

bd66ba91f3125028.png

Ingat metrik siap pakai? Mari tambahkan diagram untuk pemakaian CPU container. Di kolom Chart Title, masukkan 'CPU Utilization'. Pada kotak 'Find resource type and metric', ketik request_utilization lalu pilih CPU request utilization dari daftar yang difilter. Pilihan ini akan mengisi kolom Jenis resource dan Metrik 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, lalu pilih project Anda pada kolom Nilai. Kita juga perlu memfilter menurut container_name. Di kotak Filter, ketik container_name, pilih dari daftar yang difilter dan pilih webserver-statefulset di kolom Nilai. Klik Simpan.

Kita sekarang memiliki dasbor dengan bagan pertama kita.

3d3d45e4357454e0.pngS

7. Kebijakan pemberitahuan dan cek uptime

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

Dari panel kiri, pilih Uptime Checks dan Uptime Checks Overview:

49368e5700274cf2.png

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

d884560f91011009.png

Dalam formulir proses, masukkan 'Endpoint Uptime' sebagai judul, dan alamat IP eksternal load balancer sebagai nama host.

568a8f1e27ae8417.pngS

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

f89d53a106a709f4.png

Klik Buat Kebijakan Pemberitahuan.

Mari kita beri nama '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 sehingga kita diberi tahu saat kebijakan pemberitahuan telah dilanggar. Di menu drop-down Jenis Saluran Notifikasi, pilih Email diikuti dengan alamat email yang valid.

44c474e28a497659.pngS

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

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

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

Setelah beberapa menit, Anda akan menerima email yang memberi tahu tentang pemadaman layanan:

808ac1d75ce3681f.pngS

Mari kita urungkan. Kembali ke Cloud Shell, mari mulai ulang nginx:

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

Setelah beberapa menit , Anda akan mendapatkan email Stackdriver lagi, kali ini dengan berita yang lebih baik dari sebelumnya:

5b8262fbbc4877c.pngS

8. Pembersihan

Setelah bermigrasi dari GCE ke GKE dengan Migrate for Anthos, mari bersihkan project dari semua resource yang telah dibuat.

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 memilih untuk 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.pngS di sebelah kanan untuk setiap kebijakan yang Anda buat.

Cek Uptime

Dari halaman Cek Uptime, pilih Delete 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

Set stateful kita menggunakan {i>disk<i} yang kita buat. Gunakan kode berikut untuk mengambil nama:

gcloud compute disks list --filter=webserver

Menggunakan nama {i>disk <i}Anda sebagai pengganti nama {i>disk<i} saya, hapus dengan:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

Semuanya dihapus.

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
  • Kita membuka server web kumpulan stateful kepada dunia dengan mengeksposnya melalui layanan load balancer Kubernetes.
  • Kita mengaktifkan Stackdriver dan membuat dasbor kustom
  • Kami mengonfigurasi cek uptime beserta kebijakan pemberitahuan untuk memberi tahu kami saat server web nonaktif