Runtime VM di GDC memungkinkan Anda men-deploy workload virtual machine (VM) langsung ke penginstalan software Distributed Cloud khusus untuk bare metal. Dalam tutorial ini, Anda akan memigrasikan contoh aplikasi tempat penjualan, yang mewakili terminal tempat penjualan retail, dari VM Compute Engine ke cluster bare metal dan mengakses frontend webnya.
Deployment menggunakan disk image yang telah disiapkan sebelumnya, tempat workload berjalan sebagai layanan systemd. Anda juga dapat mengikuti langkah-langkah ini untuk menyiapkan dan men-deploy aplikasi berbasis VM Anda sendiri.
Tujuan
Sebelum memulai
Untuk menyelesaikan dokumen ini, Anda memerlukan resource berikut:
- Akses ke cluster bare metal versi 1.12.0 atau yang lebih tinggi yang dibuat dengan mengikuti panduan Menginstal dengan Loadbalancer Manual. Dokumen ini menyiapkan resource jaringan sehingga Anda dapat mengakses workload yang berjalan di dalam VM melalui browser. Jika tidak memerlukan perilaku tersebut, Anda dapat mengikuti dokumen ini menggunakan penginstalan software Distributed Cloud apa pun khusus untuk bare metal.
- Workstation yang memenuhi persyaratan berikut:
Mengaktifkan VM Runtime on GDC dan menginstal plugin virtctl
Definisi resource kustom Runtime VM di GDC adalah bagian dari semua cluster bare metal sejak versi 1.10. Instance resource kustom VMRuntime sudah dibuat setelah penginstalan. Namun, fitur ini dinonaktifkan secara default.
Aktifkan Runtime VM di GDC:
sudo bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH- KUBECONFIG_PATH: Jalur file kubeconfig cluster pengguna.
Validasi bahwa
VMRuntimediaktifkan:kubectl wait --for=jsonpath='{.status.ready}'=true vmruntime vmruntimeMungkin perlu waktu beberapa menit hingga
VMRuntimesiap. Jika belum siap, periksa beberapa kali dengan jeda singkat. Contoh output berikut menunjukkan bahwaVMRuntimesudah siap:vmruntime.vm.cluster.gke.io/vmruntime condition metInstal plugin virtctl untuk
kubectl:sudo -E bmctl install virtctlContoh output berikut menunjukkan proses penginstalan plugin
virtctltelah 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 succeededVerifikasi penginstalan plugin
virtctl:kubectl virtContoh output berikut menunjukkan bahwa plugin
virtctltersedia 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 penginstalan software Distributed Cloud khusus untuk bare metal, VM Runtime di GDC mengharapkan image VM. Image ini berfungsi sebagai boot disk untuk VM yang di-deploy.
Untuk memigrasikan VM yang ada ke dalam cluster, disk image VM tersebut harus dibuat terlebih dahulu. Kemudian, image harus dihosting di repositori yang dapat diakses oleh cluster. Terakhir, URL image tersebut dapat digunakan untuk membuat VM.
Runtime VM di GDC mengharapkan image dalam format qcow2. Jika
Anda memberikan jenis gambar yang berbeda, gambar tersebut akan otomatis dikonversi ke
format qcow2. Untuk menghindari konversi berulang dan mengaktifkan penggunaan kembali, Anda dapat mengonversi disk image virtual dan menghosting image qcow2.
Pada langkah-langkah berikut, Anda akan menggunakan image qcow2 yang telah disiapkan sebelumnya, tempat workload contoh
dibuat sebagai disk image VM
di Google Cloud dan
diekspor ke bucket Cloud Storage.
Kode sumber dalam dokumen ini tersedia di repositori GitHub anthos-samples. Anda akan menggunakan resource dari repositori ini untuk menyelesaikan langkah-langkah berikut.
Men-deploy
StatefulSetMySQL. Aplikasi tempat penjualan diharapkan terhubung ke database MySQL untuk menyimpan informasi inventaris dan pembayaran. Repositori titik penjualan memiliki contoh manifes yang men-deployStatefulSetMySQL, mengonfigurasiConfigMapterkait, danServiceKubernetes.ConfigMapmenentukan kredensial untuk instance MySQL, yang merupakan kredensial yang sama yang diteruskan ke aplikasi point of sale.kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/point-of-sale/main/k8-manifests/common/mysql-db.yamlDeploy workload VM menggunakan image
qcow2yang telah disiapkan sebelumnya:kubectl virt create vm pos-vm \ --boot-disk-size=80Gi \ --memory=4Gi \ --vcpu=2 \ --image=https://storage.googleapis.com/pos-vm-images/pos-vm.qcow2Perintah ini membuat file YAML yang diberi nama sesuai VM (
google-virtctl/pos-vm.yaml). Anda dapat memeriksa file untuk melihat definisiVirtualMachinedanVirtualMachineDisk. Alih-alih menggunakan pluginvirtctl, Anda dapat men-deploy workload VM menggunakan definisi Model Resource Kubernetes (KRM), seperti yang terlihat dalam file YAML yang dibuat.Jika perintah berhasil dijalankan, perintah tersebut akan menghasilkan output seperti contoh 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
VirtualMachinediidentifikasi oleh resourcevm.cluster.gke.io/v1.VirtualMachinedi Runtime VM di GDC. Bentuk singkatnya adalahgvm.Saat Anda membuat VM, dua resource berikut akan dibuat:
- VirtualMachineDisk adalah persistent disk tempat konten image VM diimpor.
- VirtualMachine adalah instance VM itu sendiri. DataVolume dipasang ke VirtualMachine sebelum VM di-booting.
Periksa status VirtualMachineDisk. VirtualMachineDisk secara internal membuat resource
DataVolume. Image VM diimpor ke DataVolume yang dipasang ke VM:kubectl get datavolumeContoh output berikut menunjukkan awal impor image:
NAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv ImportScheduled N/A 8sPeriksa status
VirtualMachine.VirtualMachineberada dalam statusProvisioninghinggaDataVolumediimpor sepenuhnya:kubectl get gvmContoh output berikut menunjukkan
VirtualMachineyang sedang disediakan:NAME STATUS AGE IP pos-vm Provisioning 1mTunggu hingga image VM diimpor sepenuhnya ke
DataVolume. Terus pantau progresnya saat image diimpor:kubectl get datavolume -wContoh 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
DataVolumedibuat, contoh output berikut menunjukkanPHASEdariSucceeded:kubectl get datavolumeNAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv Succeeded 100.0% 14m18sPastikan
VirtualMachinetelah berhasil dibuat:kubectl get gvmJika pembuatan berhasil,
STATUSakan menampilkanRUNNING, seperti yang 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 aplikasi contoh point of sale. Aplikasi dikonfigurasi untuk otomatis dimulai saat booting sebagai layanan systemd. Anda dapat melihat file konfigurasi layanan systemd di direktori pos-systemd-services.
Hubungkan ke konsol VM. Jalankan perintah berikut dan tekan Enter⏎ setelah Anda melihat pesan
Successfully connected to pos-vm…:kubectl virt console pos-vmPerintah ini menghasilkan contoh output berikut yang meminta Anda 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 tempat image untuk VirtualMachine Runtime VM di GDC dibuat.
- Nama Pengguna Login:
abmuser - Sandi:
abmworks
- Nama Pengguna Login:
Memeriksa status layanan aplikasi tempat penjualan. Aplikasi point of sale mencakup tiga layanan: API, Inventaris, dan Pembayaran. Semua layanan ini berjalan sebagai layanan sistem.
Ketiga layanan tersebut terhubung satu sama lain melalui localhost. Namun, aplikasi terhubung ke database MySQL menggunakan Service Kubernetes mysql-db yang dibuat pada langkah sebelumnya. Perilaku ini berarti VM otomatis terhubung ke jaringan yang sama dengan
PodsdanServices, sehingga memungkinkan komunikasi yang lancar antara workload VM dan aplikasi dalam container lainnya. Anda tidak perlu melakukan tindakan tambahan apa pun untuk membuatServicesKubernetes dapat dijangkau dari VM yang di-deploy menggunakan VM Runtime di GDC.sudo systemctl status pos*Contoh output berikut menunjukkan status tiga layanan dan layanan sistem root,
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=8081Keluar dari VM. Untuk keluar dari koneksi konsol, gunakan urutan escape
^]dengan menekanCtrl + ].
Mengakses workload berbasis VM
Jika cluster Anda disiapkan dengan mengikuti panduan Menginstal dengan Loadbalancer Manual, cluster tersebut sudah memiliki resource Ingress yang disebut pos-ingress. Resource ini merutekan traffic dari alamat IP eksternal Load Balancer Ingress ke layanan server API aplikasi contoh point of sale.
Jika cluster Anda tidak memiliki resource
Ingressini, 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.yamlBuat
ServiceKubernetes yang merutekan traffic ke VM. ResourceIngressmerutekan traffic keServiceini:kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-vmruntime/pos-service.yamlContoh output berikut mengonfirmasi pembuatan Service:
service/api-server-svc createdDapatkan alamat IP eksternal load balancer
Ingress.IngressLoadbalancer merutekan traffic berdasarkan aturan resourceIngress. Anda sudah memiliki aturanpos-ingressuntuk meneruskan permintaan ke server APIService.Serviceini meneruskan permintaan ke VM:INGRESS_IP=$(kubectl get ingress/pos-ingress -o jsonpath='{.status.loadBalancer.ingress[0].ip}') echo $INGRESS_IPContoh output berikut menunjukkan alamat IP load balancer
Ingress:172.29.249.159 # you might have a different IP addressAkses aplikasi menggunakan alamat IP Loadbalancer Ingress di browser. Screenshot contoh berikut menunjukkan kios tempat penjualan dengan dua item. Anda dapat mengklik item, lebih dari sekali jika ingin memesan beberapa item, dan melakukan pemesanan dengan tombol Bayar. Pengalaman ini menunjukkan bahwa Anda telah berhasil men-deploy workload berbasis VM ke cluster menggunakan VM Runtime di GDC.
Pembersihan
Anda dapat menghapus semua resource yang dibuat dalam tutorial ini atau hanya menghapus VM dan menyimpan resource yang dapat digunakan kembali. Menghapus VM menjelaskan opsi yang tersedia secara mendetail.
Hapus Semua
Hapus Runtime VM di GDC
VirtualMachinebeserta semua resource-nya:kubectl virt delete vm pos-vm --allContoh 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".
Hanya hapus VM
Menghapus VM saja akan mempertahankan
VirtualMachineDiskyang dibuat. Hal ini memungkinkan penggunaan kembali image VM ini dan menghemat waktu yang dihabiskan untuk mengimpor image saat membuat VM baru.kubectl virt delete vm pos-vmContoh 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 berikutnya
- 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 bucket Cloud Storage pos-vm-images. Untuk mengetahui informasi selengkapnya tentang cara VM dikonfigurasi dan image-nya dibuat, lihat petunjuk di repositori point-of-sale.
- Saat Anda membuat VM di cluster menggunakan perintah
kubectl virt create vm pos-vm, file YAML yang diberi nama sesuai VM (google-virtctl/pos-vm.yaml) akan dibuat. Anda dapat memeriksa file untuk melihat definisiVirtualMachinedanVirtualMachineDisk. Alih-alih menggunakan pluginvirtctl, Anda dapat men-deploy VM menggunakan definisi KRM seperti yang terlihat dalam file YAML yang dibuat.