Dokumen ini memberikan panduan langkah demi langkah untuk men-deploy workload berbasis virtual machine (VM) ke penginstalan Google Distributed Cloud (khusus software) di bare metal menggunakan VM Runtime di GDC. Workload yang digunakan dalam panduan ini adalah aplikasi point of sale contoh. Aplikasi ini merepresentasikan terminal point of sale umum yang berjalan di hardware lokal di toko retail.
Dalam dokumen ini, Anda akan memigrasikan aplikasi ini dari VM ke dalam cluster dan
mengakses frontend web aplikasi. Untuk memigrasikan VM yang ada ke dalam cluster, image disk 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. VM Runtime di GDC mengharapkan gambar 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 ulang, Anda dapat mengonversi image disk virtual dan
menghosting image qcow2.
Dokumen ini menggunakan image instance VM Compute Engine yang telah disiapkan sebelumnya, tempat beban kerja berjalan sebagai layanan systemd. Anda dapat mengikuti langkah-langkah yang sama untuk men-deploy aplikasi Anda sendiri.
Aktifkan VM Runtime di GDC dan instal plugin virtctl
Definisi resource kustom VM Runtime di GDC adalah bagian dari semua
cluster bare metal sejak versi 1.10. Instance resource kustom VMRuntime sudah dibuat saat penginstalan. Namun, fitur ini dinonaktifkan secara
default.
- Mengaktifkan VM Runtime 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 vmruntime- VMRuntimemungkin memerlukan waktu beberapa menit hingga siap. Jika belum siap, periksa beberapa kali dengan jeda singkat. Output contoh berikut menunjukkan bahwa- VMRuntimesudah siap:- vmruntime.vm.cluster.gke.io/vmruntime condition met
- Instal plugin virtctl untuk - kubectl:- sudo -E bmctl install virtctl- Contoh output berikut menunjukkan bahwa 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 succeeded
- Verifikasi penginstalan plugin - virtctl:- kubectl virt- Contoh output berikut menunjukkan bahwa plugin - virtctltersedia untuk digunakan dengan- kubectl:- 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 Google Distributed Cloud (khusus software) di bare metal, VM Runtime di GDC mengharapkan image VM. Image ini berfungsi sebagai boot disk untuk VM yang di-deploy.
Dalam tutorial ini, Anda akan memigrasikan workload berbasis VM Compute Engine ke dalam cluster. VM Compute Engine ini dibuat, dan aplikasi contoh point of sale (PoS) dikonfigurasi untuk dijalankan sebagai layanan systemd. Image disk VM ini beserta workload aplikasi PoS telah dibuat
di Google Cloud. Gambar ini kemudian diekspor ke bucket Cloud Storage sebagai
gambar qcow2. Anda akan menggunakan
image qcow2 yang telah disiapkan ini pada langkah-langkah berikut.
Kode sumber dalam dokumen ini tersedia di repositori GitHub anthos-samples. Anda menggunakan resource dari repositori ini untuk menyelesaikan langkah-langkah berikutnya.
- Deploy - StatefulSetMySQL. Aplikasi tempat penjualan diharapkan terhubung ke database MySQL untuk menyimpan informasi inventaris dan pembayaran. Repositori titik penjualan memiliki manifes contoh yang men-deploy- StatefulSetMySQL, mengonfigurasi- ConfigMapterkait, dan- ServiceKubernetes.- 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.yaml
- Deploy 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.qcow2- Perintah ini membuat file YAML yang dinamai sesuai dengan VM ( - google-virtctl/pos-vm.yaml). Anda dapat memeriksa file untuk melihat definisi- VirtualMachinedan- VirtualMachineDisk. Daripada menggunakan plugin- virtctl, Anda dapat men-deploy workload VM menggunakan definisi Model Resource Kubernetes (KRM), seperti yang terlihat dalam file YAML yang dibuat.- Jika berhasil dijalankan, perintah 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 resource- VirtualMachinedi VM Runtime di GDC.- vm.cluster.gke.io/v1.VirtualMachineBentuk singkatnya adalah- gvm.- 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 di-mount ke VirtualMachine sebelum VM di-boot.
 - Periksa status VirtualMachineDisk. VirtualMachineDisk secara internal membuat resource - DataVolume. Image VM diimpor ke DataVolume yang dipasang ke 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.- VirtualMachineberada dalam status- Provisioninghingga- DataVolumediimpor sepenuhnya:- kubectl get gvm- Contoh output berikut menunjukkan - VirtualMachineyang disediakan:- NAME STATUS AGE IP pos-vm Provisioning 1m
- Tunggu hingga image VM diimpor sepenuhnya ke - DataVolume. Lanjutkan untuk melihat progres saat gambar diimpor:- kubectl get datavolume -w- Contoh output berikut menunjukkan image disk 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 menunjukkan- PHASEdari- Succeeded:- kubectl get datavolume- NAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv Succeeded 100.0% 14m18s
- Pastikan bahwa - VirtualMachinetelah berhasil dibuat:- kubectl get gvm- Jika pembuatan berhasil, - STATUSakan menampilkan- RUNNING, seperti yang ditunjukkan dalam contoh berikut, beserta alamat IP VM:- NAME STATUS AGE IP pos-vm Running 40m 192.168.3.250
Hubungkan ke VM dan periksa status aplikasi
Image yang digunakan untuk VM mencakup aplikasi contoh point of sale. Aplikasi dikonfigurasi agar 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-vm- Perintah 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 di GDC VM Runtime dibuat. - Nama Pengguna Login: abmuser
- Sandi: abmworks
 
- Nama Pengguna Login: 
- Periksa status layanan aplikasi point of sale. 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 - Podsdan- Services, sehingga memungkinkan komunikasi yang lancar antara workload VM dan aplikasi dalam container lainnya. Anda tidak perlu melakukan tindakan tambahan apa pun untuk membuat- ServicesKubernetes 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=8081
- Keluar dari VM. Untuk keluar dari koneksi konsol, gunakan urutan escape - ^]dengan menekan- Ctrl + ].
Mengakses workload berbasis VM
Jika cluster Anda disiapkan dengan mengikuti panduan
Menginstal dengan Load Balancer Manual, resource Ingress bernama pos-ingress sudah dibuat. 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 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 - ServiceKubernetes yang merutekan traffic ke VM. Resource- Ingressmerutekan traffic ke- Serviceini:- kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/anthos-samples/main/anthos-vmruntime/pos-service.yaml- Output contoh berikut mengonfirmasi pembuatan Layanan: - service/api-server-svc created
- Dapatkan alamat IP eksternal load balancer - Ingress.- IngressLoadbalancer merutekan traffic berdasarkan aturan resource- Ingress. Anda sudah memiliki aturan- pos-ingressuntuk meneruskan permintaan ke server API- Service.- Serviceini 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 load balancer - Ingress:- 172.29.249.159 # you might have a different IP address
- Akses aplikasi menggunakan alamat IP Load Balancer 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 dalam cluster menggunakan VM Runtime di GDC. 
