Dokumen ini memberikan panduan langkah demi langkah untuk men-deploy virtual machine (VM) berbasis web ke Google Distributed Cloud menggunakan Runtime VM di GDC. Beban kerja yang digunakan dalam panduan ini adalah contoh aplikasi tempat penjualan. Aplikasi ini merepresentasikan terminal tempat penjualan yang beroperasi secara lokal di toko ritel.
Dalam dokumen ini, Anda akan memigrasikan aplikasi ini dari VM ke Google Distributed Cloud
cluster dan mengakses frontend web aplikasi. Untuk memigrasikan VM yang ada
ke dalam cluster, image disk tersebut harus dibuat terlebih dahulu. Kemudian, gambar
harus dihosting di repositori yang dapat diakses oleh cluster. Terakhir, URL dari
image tersebut dapat digunakan
untuk membuat VM. Runtime VM di GDC mengharapkan
gambar dalam format qcow2
. Jika Anda memberikan jenis gambar lain,
otomatis dikonversi ke dalam format qcow2
. Untuk menghindari konversi berulang
dan agar dapat digunakan kembali, Anda dapat mengonversi disk image virtual
dan menghosting gambar qcow2
.
Dokumen ini menggunakan gambar instance VM Compute Engine yang sudah disiapkan yang workload berjalan sebagai systemd layanan. Anda dapat mengikuti langkah-langkah yang sama ini untuk men-deploy aplikasi Anda sendiri.
Tujuan
Sebelum memulai
Untuk menyelesaikan dokumen ini, Anda memerlukan referensi berikut:
- Akses ke Google Distributed Cloud versi 1.12.0 atau cluster lebih tinggi yang dibuat dengan mengikuti Menjalankan Cloud Terdistribusi Google pada VM Compute Engine dengan Load Balancer Manual kami. Dokumen ini menyiapkan sumber daya jaringan sehingga Anda dapat mengakses workload yang berjalan di dalam VM melalui browser. Jika Anda tidak memerlukannya Anda dapat mengikuti dokumen ini menggunakan Google Distributed Cloud apa pun.
- Workstation yang memenuhi persyaratan berikut:
Aktifkan Runtime VM di GDC dan instal plugin virtctl
Definisi resource kustom (CRD) Runtime VM on GDC adalah bagian dari
semua cluster Google Distributed Cloud sejak versi 1.10. Sebuah instance
Resource kustom VMRuntime
sudah dibuat saat penginstalan. Namun,
dinonaktifkan secara default.
Aktifkan Runtime VM di GDC:
sudo bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
- KUBECONFIG_PATH: Jalur ke konfigurasi Kubernetes file cluster pengguna Google Distributed Cloud
Validasi bahwa
VMRuntime
diaktifkan:kubectl wait --for=jsonpath='{.status.ready}'=true vmruntime vmruntime
Perlu waktu beberapa menit agar
VMRuntime
siap. Jika bukan siap, lalu periksa beberapa kali dengan penundaan singkat. Contoh berikut output menunjukkan bahwaVMRuntime
sudah siap:vmruntime.vm.cluster.gke.io/vmruntime condition met
Instal virtctl plugin untuk
kubectl
:sudo -E bmctl install virtctl
Contoh output berikut menunjukkan proses penginstalan plugin
virtctl
sudah selesai:Please check the logs at bmctl-workspace/log/install-virtctl-20220831-182135/install-virtctl.log [2022-08-31 18:21:35+0000] Install virtctl succeeded
Verifikasi penginstalan plugin
virtctl
:kubectl virt
Contoh output berikut menunjukkan bahwa plugin
virtctl
tersedia untuk digunakan dengankubectl
:Available Commands: addvolume add a volume to a running VM completion generate the autocompletion script for the specified shell config Config subcommands. console Connect to a console of a virtual machine instance. create Create subcommands. delete Delete subcommands. ...
Men-deploy workload berbasis VM
Saat Anda men-deploy VM ke Google Distributed Cloud, Runtime VM di GDC mengharapkan image VM. Gambar ini berfungsi sebagai untuk VM yang di-deploy.
Dalam tutorial ini, Anda akan memigrasikan workload berbasis VM Compute Engine ke
Google Distributed Cloud. VM Compute Engine ini telah dibuat, dan
aplikasi tempat penjualan (PoS) contoh
dikonfigurasi untuk dijalankan sebagai
layanan. Image disk VM ini beserta workload aplikasi PoS
dibuat
atau komponen lainnya di Google Cloud. Gambar ini kemudian diekspor ke bucket Cloud Storage sebagai
qcow2
gambar. Anda menggunakan
gambar qcow2
yang telah disiapkan ini dalam langkah berikut.
Kode sumber dalam dokumen ini tersedia di GitHub anthos-samples repositori resource. Anda menggunakan resource dari repositori ini untuk menyelesaikan langkah-langkah yang mengikuti.
Men-deploy
StatefulSet
MySQL. Aplikasi tempat penjualan mengharapkan terhubung ke database MySQL untuk menyimpan informasi inventaris dan pembayaran. Tujuan tempat penjualan memiliki manifes contoh yang men-deploy databaseStatefulSet
, mengonfigurasiConfigMap
yang terkait, dan KubernetesService
.ConfigMap
menentukan kredensial untuk instance MySQL, yang merupakan kredensial yang sama yang diteruskan ke tempat penjualan aplikasi.kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/point-of-sale/main/k8-manifests/common/mysql-db.yaml
Deploy workload VM menggunakan image
qcow2
yang telah disiapkan:kubectl virt create vm pos-vm \ --boot-disk-size=80Gi \ --memory=4Gi \ --vcpu=2 \ --image=https://storage.googleapis.com/pos-vm-images/pos-vm.qcow2
Perintah ini membuat file YAML yang diberi nama berdasarkan VM (
google-virtctl/pos-vm.yaml
). Anda dapat memeriksa file untuk melihat definisiVirtualMachine
danVirtualMachineDisk
. Daripada fokus pada dengan pluginvirtctl
, Anda dapat men-deploy workload VM menggunakan Definisi Model Resource Kubernetes (KRM), seperti yang terlihat dalam file YAML yang dibuat.Ketika berhasil dijalankan, perintah tersebut akan menghasilkan {i>output<i} seperti berikut yang menjelaskan berbagai resource yang dibuat:
Constructing manifest for vm "pos-vm": Manifest for vm "pos-vm" is saved to /home/tfadmin/google-virtctl/pos-vm.yaml Applying manifest for vm "pos-vm" Created gvm "pos-vm"
Periksa status pembuatan VM.
Resource
VirtualMachine
diidentifikasi olehvm.cluster.gke.io/v1.VirtualMachine
resource di VM Runtime di GDC. Format singkatnya adalahgvm
.Saat Anda membuat VM, dua resource berikut ini akan dibuat:
- VirtualMachineDisk adalah persistent disk tempat isi tujuan impor image VM.
- VirtualMachine adalah instance VM itu sendiri. DataVolume merupakan yang terpasang ke VirtualMachine sebelum VM di-booting.
Periksa status VirtualMachineDisk. VirtualMachineDisk secara internal membuat resource
DataVolume
. Image VM diimpor ke DataVolume yang terpasang ke dalam VM:kubectl get datavolume
Contoh output berikut menunjukkan awal impor gambar:
NAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv ImportScheduled N/A 8s
Periksa status
VirtualMachine
.VirtualMachine
berada dalam statusProvisioning
hinggaDataVolume
diimpor sepenuhnya:kubectl get gvm
Contoh output berikut menunjukkan
VirtualMachine
yang disediakan:NAME STATUS AGE IP pos-vm Provisioning 1m
Tunggu hingga image VM diimpor sepenuhnya ke
DataVolume
. Lanjutkan ke perhatikan kemajuan saat gambar diimpor:kubectl get datavolume -w
Contoh output berikut menunjukkan disk image yang sedang diimpor:
NAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv ImportInProgress 0.00% 14s ... ... pos-vm-boot-dv ImportInProgress 0.00% 31s pos-vm-boot-dv ImportInProgress 1.02% 33s pos-vm-boot-dv ImportInProgress 1.02% 35s ...
Setelah impor selesai dan
DataVolume
dibuat, hal berikut contoh output menunjukkanPHASE
dariSucceeded
:kubectl get datavolume
NAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv Succeeded 100.0% 14m18s
Pastikan
VirtualMachine
telah berhasil dibuat:kubectl get gvm
Jika pembuatan berhasil,
STATUS
akan menampilkanRUNNING
, sebagai ditunjukkan dalam contoh berikut, beserta alamat IP VM:NAME STATUS AGE IP pos-vm Running 40m 192.168.3.250
Menghubungkan ke VM dan memeriksa status aplikasi
Image yang digunakan untuk VM mencakup contoh aplikasi tempat penjualan. Aplikasi dikonfigurasi agar otomatis dimulai saat booting sebagai sistem layanan. Anda dapat melihat layanan sistem yang file konfigurasi di pos-systemd-services saat ini.
Hubungkan ke konsol VM. Jalankan perintah berikut dan tekan Enter⏎ setelah Anda melihat pesan
Successfully connected to pos-vm…
:kubectl virt console pos-vm
Perintah ini menghasilkan contoh output berikut yang meminta Anda untuk memasukkan detail login:
Successfully connected to pos-vm console. The escape sequence is ^] pos-from-public-image login:
Gunakan akun pengguna dan sandi berikut. Akun ini disiapkan di dalam VM asli yang menjadi tempat image untuk Runtime VM di GDC VirtualMachine telah dibuat.
- Nama Pengguna Login:
abmuser
- Sandi:
abmworks
- Nama Pengguna Login:
Periksa status layanan aplikasi tempat penjualan. Intinya aplikasi penjualan mencakup tiga layanan: API, Inventaris, dan Pembayaran. Semua layanan ini berjalan sebagai layanan sistem.
Ketiga layanan tersebut terhubung satu sama lain melalui {i>localhost<i}. Namun, aplikasi terhubung ke database MySQL menggunakan layanan Kubernetes mysql-db Layanan yang dibuat pada langkah sebelumnya. Perilaku ini berarti bahwa VM secara otomatis terhubung ke jaringan yang sama dengan
Pods
danServices
, memungkinkan komunikasi yang lancar antara workload VM dan aplikasi lain dalam container. Anda tidak perlu melakukan apa pun untuk membuatServices
Kubernetes dapat dijangkau dari VM yang di-deploy menggunakan Runtime VM di GDC.sudo systemctl status pos*
Contoh output berikut menunjukkan status ketiga layanan dan root layanan sistem,
pos.service
:● pos_payments.service - Payments service of the Point of Sale Application Loaded: loaded (/etc/systemd/system/pos_payments.service; enabled; vendor > Active: active (running) since Tue 2022-06-21 18:55:30 UTC; 1h 10min ago Main PID: 750 (payments.sh) Tasks: 27 (limit: 4664) Memory: 295.1M CGroup: /system.slice/pos_payments.service ├─750 /bin/sh /pos/scripts/payments.sh └─760 java -jar /pos/jars/payments.jar --server.port=8083 ● pos_inventory.service - Inventory service of the Point of Sale Application Loaded: loaded (/etc/systemd/system/pos_inventory.service; enabled; vendor> Active: active (running) since Tue 2022-06-21 18:55:30 UTC; 1h 10min ago Main PID: 749 (inventory.sh) Tasks: 27 (limit: 4664) Memory: 272.6M CGroup: /system.slice/pos_inventory.service ├─749 /bin/sh /pos/scripts/inventory.sh └─759 java -jar /pos/jars/inventory.jar --server.port=8082 ● pos.service - Point of Sale Application Loaded: loaded (/etc/systemd/system/pos.service; enabled; vendor preset: e> Active: active (exited) since Tue 2022-06-21 18:55:30 UTC; 1h 10min ago Main PID: 743 (code=exited, status=0/SUCCESS) Tasks: 0 (limit: 4664) Memory: 0B CGroup: /system.slice/pos.service Jun 21 18:55:30 pos-vm systemd[1]: Starting Point of Sale Application... Jun 21 18:55:30 pos-vm systemd[1]: Finished Point of Sale Application. ● pos_apiserver.service - API Server of the Point of Sale Application Loaded: loaded (/etc/systemd/system/pos_apiserver.service; enabled; vendor> Active: active (running) since Tue 2022-06-21 18:55:31 UTC; 1h 10min ago Main PID: 751 (api-server.sh) Tasks: 26 (limit: 4664) Memory: 203.1M CGroup: /system.slice/pos_apiserver.service ├─751 /bin/sh /pos/scripts/api-server.sh └─755 java -jar /pos/jars/api-server.jar --server.port=8081
Keluar dari VM. Untuk keluar dari koneksi konsol, gunakan escape sequence
^]
dengan menekanCtrl + ]
.
Mengakses workload berbasis VM
Jika cluster Anda disiapkan dengan mengikuti petunjuk Running Google Distributed Cloud on
VM Compute Engine dengan Beban Manual
Penyeimbang
panduan, terdapat resource Ingress
bernama pos-ingress
yang sudah dibuat. Ini
resource merutekan traffic dari alamat IP eksternal dari Pemuatan Ingress
Penyeimbang ke layanan server API dari aplikasi contoh tempat penjualan.
Jika cluster Anda tidak memiliki resource
Ingress
ini, buat resource tersebut dengan menerapkan manifes berikut:kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-bm-gcp-terraform/resources/manifests/pos-ingress.yaml
Buat
Service
Kubernetes yang merutekan traffic ke VM.Ingress
resource merutekan traffic keService
ini:kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-vmruntime/pos-service.yaml
Contoh output berikut mengonfirmasi pembuatan Service:
service/api-server-svc created
Dapatkan alamat IP eksternal dari load balancer
Ingress
.Ingress
Load balancer merutekan traffic berdasarkan aturan resourceIngress
. Anda sudah memiliki aturanpos-ingress
untuk meneruskan permintaan ke server APIService
.Service
ini akan meneruskan permintaan ke VM:INGRESS_IP=$(kubectl get ingress/pos-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo $INGRESS_IP
Contoh output berikut menunjukkan alamat IP dari pemuatan
Ingress
penyeimbang:172.29.249.159 # you might have a different IP address
Akses aplikasi menggunakan alamat IP Ingress Loadbalancer di browser. Contoh screenshot berikut menampilkan kios tempat penjualan sederhana dengan dua item. Anda dapat mengklik item lebih dari sekali jika ingin memesan lebih dari satu, lalu lakukan pemesanan dengan tombol Pay. Pengalaman ini menunjukkan bahwa Anda telah berhasil men-deploy workload berbasis VM ke cluster Cloud Terdistribusi Google menggunakan VM Runtime di GDC.
Pembersihan
Anda dapat menghapus semua materi yang dibuat dalam tutorial ini atau hanya menghapus VM dan mempertahankan resource yang dapat digunakan kembali. Menghapus VM di Google Distributed Cloud menjelaskan opsi yang tersedia secara mendetail.
Hapus Semua
Hapus Runtime VM di GDC
VirtualMachine
beserta semuanya sumber daya tersebut:kubectl virt delete vm pos-vm --all
Contoh output berikut mengonfirmasi penghapusan:
vm "pos-vm" used the following resources: gvm: pos-vm VirtualMachineDisk: pos-vm-boot-dv Start deleting the resources: Deleted gvm "pos-vm". Deleted VirtualMachineDisk "pos-vm-boot-dv".
Hapus VM saja
Jika hanya menghapus VM,
VirtualMachineDisk
yang dibuat akan dipertahankan. Hal ini memungkinkan penggunaan kembali image VM ini dan menghemat waktu yang dihabiskan untuk mengimpor saat membuat VM baru.kubectl virt delete vm pos-vm
Contoh output berikut mengonfirmasi penghapusan:
vm "pos-vm" used the following resources: gvm: pos-vm VirtualMachineDisk: pos-vm-boot-dv Start deleting the resources: Deleted gvm "pos-vm".
Langkah selanjutnya
- VM asli yang digunakan dalam panduan ini adalah instance Compute Engine yang menjalankan Ubuntu 20.04 LTS. Image VM ini dapat diakses secara publik melalui pos-vm-images bucket Cloud Storage. Untuk informasi lebih lanjut tentang bagaimana VM dikonfigurasi dan dibuat, lihat petunjuk di repositori tempat penjualan.
- Saat Anda membuat VM di cluster Google Distributed Cloud menggunakan
kubectl virt create vm pos-vm
perintah, file YAML diberi nama berdasarkan VM (google-virtctl/pos-vm.yaml
) adalah dibuat. Anda dapat memeriksa file untuk melihat definisiVirtualMachine
danVirtualMachineDisk
. Daripada menggunakan pluginvirtctl
, Anda dapat men-deploy VM yang menggunakan definisi KRM seperti yang terlihat dalam file YAML yang dibuat.