Dokumen ini memberikan panduan langkah demi langkah untuk men-deploy workload berbasis virtual machine (VM) ke GKE di Bare Metal menggunakan VM Runtime di GDC. Beban kerja yang digunakan dalam panduan ini adalah contoh aplikasi tempat penjualan. Aplikasi ini merepresentasikan terminal tempat penjualan standar yang berjalan di hardware lokal di toko retail.
Dalam dokumen ini, Anda akan memigrasikan aplikasi ini dari VM ke GKE di cluster Bare Metal dan mengakses frontend web aplikasi. 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 cluster. Terakhir, URL dari image tersebut
dapat digunakan untuk membuat VM. VM Runtime di GDC mengharapkan
image dalam format qcow2
. Jika Anda memberikan jenis gambar lain, jenis 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
.
Dokumen ini menggunakan gambar instance VM Compute Engine yang sudah disiapkan sebelumnya, dengan beban kerja yang dijalankan sebagai layanan yang disistem. Anda dapat mengikuti langkah yang sama ini untuk men-deploy aplikasi Anda sendiri.
Tujuan
Sebelum memulai
Untuk menyelesaikan dokumen ini, Anda memerlukan referensi berikut:
- Akses ke GKE pada Bare Metal versi 1.12.0 atau cluster lebih tinggi yang telah dibuat dengan mengikuti panduan Menjalankan GKE pada Bare Metal pada VM Compute Engine dengan Load Balancer Manual. Dokumen ini menyiapkan resource jaringan sehingga Anda dapat mengakses beban kerja yang berjalan di dalam VM melalui browser. Jika tidak memerlukan perilaku tersebut, Anda dapat mengikuti dokumen ini menggunakan GKE apa pun di Bare Metal.
- Workstation yang memenuhi persyaratan berikut:
Aktifkan Runtime VM di GDC dan instal plugin virtctl
VM Runtime di definisi resource kustom (CRD) GDC adalah bagian dari
semua GKE pada cluster Bare Metal sejak versi 1.10. Instance resource kustom
VMRuntime
sudah dibuat saat penginstalan. Namun, fitur ini
dinonaktifkan secara default.
Aktifkan Runtime VM di GDC:
sudo bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
- KUBECONFIG_PATH: Jalur ke file konfigurasi Kubernetes cluster pengguna GKE Enterprise
Validasi bahwa
VMRuntime
diaktifkan:kubectl wait --for=jsonpath='{.status.ready}'=true vmruntime vmruntime
Perlu waktu beberapa menit agar
VMRuntime
siap. Jika belum siap, periksa beberapa kali dengan penundaan singkat. Contoh output berikut menunjukkan bahwaVMRuntime
sudah siap:vmruntime.vm.cluster.gke.io/vmruntime condition met
Instal plugin virtctl untuk
kubectl
:sudo -E bmctl install virtctl
Contoh output berikut menunjukkan proses penginstalan plugin
virtctl
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 GKE 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
GKE pada cluster Bare Metal. VM Compute Engine ini telah dibuat, dan contoh aplikasi tempat penjualan (PoS) dikonfigurasi untuk dijalankan sebagai layanan bersistem. disk image VM ini beserta workload aplikasi PoS
dibuat
di Google Cloud. Image ini kemudian diekspor ke bucket Cloud Storage sebagai image qcow2
. Anda menggunakan
gambar 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
StatefulSet
MySQL. Aplikasi tempat penjualan berharap untuk terhubung ke database MySQL untuk menyimpan inventaris dan informasi pembayaran. Repositori tempat penjualan memiliki manifes contoh yang men-deployStatefulSet
MySQL, mengonfigurasiConfigMap
terkait, danService
Kubernetes.ConfigMap
menentukan kredensial untuk instance MySQL, yang merupakan kredensial yang sama yang diteruskan ke aplikasi tempat penjualan.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 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 akan membuat file YAML yang diberi nama berdasarkan VM (
google-virtctl/pos-vm.yaml
). Anda dapat memeriksa file untuk melihat definisiVirtualMachine
danVirtualMachineDisk
. Daripada menggunakan pluginvirtctl
, Anda dapat men-deploy beban kerja VM menggunakan definisi Model Resource Kubernetes (KRM), seperti yang terlihat pada 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
VirtualMachine
diidentifikasi oleh resourcevm.cluster.gke.io/v1.VirtualMachine
di Runtime VM di GDC. Format 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 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 untuk mengamati progresnya saat gambar diimpor:kubectl get datavolume -w
Contoh output berikut menunjukkan disk image yang 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, contoh output berikut menunjukkanPHASE
dariSucceeded
:kubectl get datavolume
NAME PHASE PROGRESS RESTARTS AGE pos-vm-boot-dv Succeeded 100.0% 14m18s
Pastikan
VirtualMachine
berhasil dibuat:kubectl get gvm
Jika pembuatan berhasil,
STATUS
akan menampilkanRUNNING
, seperti yang ditunjukkan pada contoh berikut, bersama dengan 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 menyertakan aplikasi contoh tempat penjualan. Aplikasi dikonfigurasi untuk otomatis dimulai saat booting sebagai layanan system. Anda dapat melihat file konfigurasi layanan sistem 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 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 tempat image untuk VM Runtime di GDC VirtualMachine dibuat.
- Nama Pengguna Login:
abmuser
- Sandi:
abmworks
- Nama Pengguna Login:
Periksa status layanan aplikasi tempat penjualan. Aplikasi tempat 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 tersebut terhubung ke database MySQL menggunakan mysql-db Kubernetes Service yang dibuat pada langkah sebelumnya. Perilaku ini berarti VM tersebut otomatis terhubung ke jaringan yang sama dengan
Pods
danServices
, sehingga memungkinkan komunikasi yang lancar antara workload VM dan aplikasi dalam container lainnya. Anda tidak perlu melakukan tindakan apa pun agarServices
Kubernetes 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 escape sequence
^]
dengan menekanCtrl + ]
.
Mengakses workload berbasis VM
Jika cluster Anda disiapkan dengan mengikuti panduan Menjalankan GKE di Bare Metal di VM Compute Engine dengan Load Balancing Manual, cluster tersebut memiliki resource Ingress
bernama pos-ingress
yang sudah dibuat. Resource
ini merutekan traffic dari alamat IP eksternal Load Balancer
Ingress ke layanan server API di aplikasi contoh tempat penjualan.
Jika cluster tidak memiliki resource
Ingress
ini, buatlah 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 mengarahkan traffic ke VM. ResourceIngress
merutekan traffic keService
ini: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
. LoadbalancerIngress
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 load balancer
Ingress
:172.29.249.159 # you might have a different IP address
Akses aplikasi menggunakan alamat IP Ingress Loadbalancer di browser. Contoh screenshot berikut menunjukkan kios tempat penjualan sederhana 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 GKE di cluster Bare Metal 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 di GKE di Bare Metal menjelaskan opsi yang tersedia secara mendetail.
Hapus Semua
Hapus Runtime VM di GDC
VirtualMachine
beserta semua resource: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
Hanya menghapus VM yang akan mempertahankan
VirtualMachineDisk
yang dibuat. Tindakan ini memungkinkan penggunaan kembali image VM ini dan menghemat waktu yang dihabiskan untuk mengimpor image 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 bucket Cloud Storage pos-vm-images. Untuk mengetahui informasi lebih lanjut tentang cara VM dikonfigurasi dan image-nya dibuat, lihat petunjuk di repositori tempat penjualan.
- Saat Anda membuat VM di cluster GKE pada Bare Metal menggunakan perintah
kubectl virt create vm pos-vm
, file YAML yang diberi nama berdasarkan VM (google-virtctl/pos-vm.yaml
) akan dibuat. Anda dapat memeriksa file tersebut untuk melihat definisiVirtualMachine
danVirtualMachineDisk
. Daripada menggunakan pluginvirtctl
, Anda dapat men-deploy VM menggunakan definisi KRM seperti yang terlihat dalam file YAML yang dibuat.