Halaman ini membahas pemecahan masalah virtual machine (VM) untuk Operator Aplikasi (AO) di perangkat air-gapped Google Distributed Cloud (GDC).
Memulihkan boot disk VM yang penuh
Jika VM kehabisan ruang di boot disk, misalnya, saat aplikasi mengisi partisi boot disk dengan log, kemampuan penting di VM akan gagal berfungsi. Anda mungkin tidak dapat menambahkan kunci SSH baru melalui resource
VirtualMachineAccessRequest
, atau membuat koneksi SSH ke VM menggunakan kunci yang ada.
Halaman ini menjelaskan langkah-langkah untuk membuat VM baru dan memasang disk untuk memulihkan konten ke VM baru sebagai disk tambahan. Langkah-langkah ini menunjukkan hal berikut:
- Koneksi SSH yang berhasil ke VM baru.
- Tingkatkan jumlah ruang dengan memasang disk untuk memulihkan dan menghapus data yang tidak diperlukan.
- Hapus VM baru dan ganti disk asli ke VM asli.
Sebelum memulai
Sebelum melanjutkan, pastikan Anda meminta akses VM tingkat project. Ikuti
langkah-langkah yang diberikan
untuk menetapkan peran Project VirtualMachine Admin (project-vm-admin
).
Untuk operasi VM menggunakan gdcloud CLI, minta Admin IAM Project Anda untuk memberi Anda peran Project VirtualMachine Admin dan peran Project Viewer (project-viewer
).
Untuk menggunakan perintah antarmuka command line (CLI) gdcloud
, pastikan Anda telah mendownload, menginstal,
dan mengonfigurasi CLI gdcloud
.
Semua perintah untuk appliance air-gapped GDC menggunakan CLI gdcloud
atau
kubectl
, dan memerlukan lingkungan sistem operasi (OS).
Mendapatkan jalur file kubeconfig
Untuk menjalankan perintah terhadap server Management API, pastikan Anda memiliki resource berikut:
Temukan nama server Management API, atau tanyakan kepada Administrator Platform (PA) Anda nama servernya.
Login dan buat file kubeconfig untuk server Management API jika Anda belum memilikinya.
Gunakan jalur untuk menggantikan
MANAGEMENT_API_SERVER{"</var>"}}
dalam petunjuk ini.
Memulihkan disk VM yang kehabisan ruang penyimpanan
Untuk memulihkan boot disk VM yang kehabisan ruang, selesaikan langkah-langkah berikut:
Hentikan VM yang ada dengan mengikuti langkah-langkah di bagian Menghentikan VM.
Edit VM yang ada:
kubectl --kubeconfig ADMIN_KUBECONFIG edit \ virtualmachine.virtualmachine.gdc.goog -n PROJECT VM_NAME
Ganti nama disk VM yang ada di kolom
spec
dengan nama placeholder baru:... spec: disks: - boot: true virtualMachineDiskRef: name: VM_DISK_PLACEHOLDER_NAME
Buat VM baru dengan sistem operasi (OS) image yang berbeda dari VM asli. Misalnya, jika disk asli menggunakan OS
ubuntu-2004
, buat VM baru denganrocky-8
.Pasang disk asli sebagai disk tambahan ke VM baru:
... spec: disks: - boot: true autoDelete: true virtualMachineDiskRef: name: NEW_VM_DISK_NAME - virtualMachineDiskRef: name: ORIGINAL_VM_DISK_NAME
Ganti kode berikut:
- NEW_VM_DISK_NAME: nama yang Anda berikan ke disk VM baru.
- ORIGINAL_VM_DISK_NAME: nama disk VM asli.
Setelah Anda membuat VM dan VM berjalan, buat koneksi SSH ke VM dengan mengikuti Menghubungkan ke VM.
Buat direktori dan pasang disk asli ke direktori pemasangan. Contoh,
/mnt/disks/new-disk
.Periksa file dan direktori di direktori pemasangan menggunakan ruang ekstra:
cd /mnt/disks/MOUNT_DIR du -hs -- * | sort -rh | head -10
Ganti MOUNT_DIR dengan nama direktori tempat Anda memasang disk asli.
Outputnya mirip dengan hal berikut ini:
18G home 1.4G usr 331M var 56M boot 5.8M etc 36K snap 24K tmp 16K lost+found 16K dev 8.0K run
Periksa setiap file dan direktori untuk memverifikasi jumlah ruang yang digunakan masing-masing. Contoh ini memeriksa direktori
home
karena menggunakan18G
ruang penyimpanan.cd home du -hs -- * | sort -rh | head -10
Outputnya mirip dengan hal berikut ini:
17G log_file ... 4.0K readme.md 4.0K main.go
Contoh file
log_file
adalah file yang perlu dihapus karena menggunakan17G
ruang, dan tidak diperlukan.Hapus file yang tidak Anda perlukan yang menghabiskan ruang tambahan, atau cadangkan file ke boot disk VM baru:
Pindahkan file yang ingin Anda simpan:
mv /mnt/disks/MOUNT_DIR/home/FILENAME/home/backup/
Hapus file yang menggunakan ruang penyimpanan ekstra:
rm /mnt/disks/MOUNT_DIR/home/FILENAME
Ganti FILENAME dengan nama file yang ingin Anda pindahkan atau hapus.
Logout dari VM baru dan Hentikan VM.
Edit VM baru untuk menghapus disk asli dari kolom
spec
:kubectl --kubeconfig ADMIN_KUBECONFIG \ edit virtualmachine.virtualmachine.gdc.goog -n PROJECT NEW_VM_NAME
Hapus daftar
virtualMachineDiskRef
yang berisi nama disk VM asli:spec: disks: - autoDelete: true boot: true virtualMachineDiskRef: name: NEW_VM_DISK_NAME - virtualMachineDiskRef: # Remove this list name: ORIGINAL_VM_DISK_NAME # Remove this disk name
Edit VM asli dan ganti VM_DISK_PLACEHOLDER_NAME yang Anda tetapkan di langkah kedua dengan nama sebelumnya:
... spec: disks: - boot: true virtualMachineDiskRef: name: VM_DISK_PLACEHOLDER_NAME # Replace this name with the previous VM name
Mulai VM asli. Jika Anda telah mengosongkan ruang yang cukup, VM akan berhasil di-boot.
Jika Anda tidak memerlukan VM baru, hapus VM tersebut:
kubectl --kubeconfig ADMIN_KUBECONFIG \ delete virtualmachine.virtualmachine.gdc.goog -n PROJECT NEW_VM_NAME
Menyediakan mesin virtual
Bagian ini menjelaskan cara memecahkan masalah yang mungkin terjadi saat menyediakan virtual machine (VM) baru di perlengkapan air-gapped Google Distributed Cloud (GDC).
Operator Aplikasi (AO) harus menjalankan semua perintah terhadap cluster pengguna default.
Tidak dapat membuat disk
Jika PersistentVolumeClaim
(PVC) dalam status Pending
, tinjau alternatif berikut untuk mengatasi status tersebut:
Class penyimpanan tidak mendukung pembuatan PVC dengan mode akses
ReadWriteMany
:Perbarui nilai
spec.dataVolumeTemplate.spec.pvc.storageClassName
virtual machine dengan class penyimpanan yang mendukung mode aksesReadWriteMany
dan menggunakan driver Antarmuka Penyimpanan Container (CSI) sebagai penyedia penyimpanannya.Jika tidak ada class penyimpanan lain di cluster yang dapat menyediakan kemampuan
ReadWriteMany
, perbarui nilaispec.dataVolumeTemplate.spec.pvc.accessMode
untuk menyertakan mode aksesReadWriteOnce
.
Driver CSI tidak dapat menyediakan
PersistentVolume
:Periksa pesan error:
kubectl describe pvc VM_NAME-boot-dv -n NAMESPACE_NAME
Ganti variabel berikut:
VM_NAME
: Nama mesin virtual.NAMESPACE_NAME
: Nama namespace.
Konfigurasi driver untuk mengatasi error. Untuk memastikan penyediaan
PersistentVolume
berfungsi, buat PVC pengujian dispec
baru dengan nama yang berbeda dari yang ditentukan didataVolumeTemplate.spec.pvc
:cat <<EOF | kubectl apply - apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pvc namespace: NAMESPACE_NAME spec: storageClassName: standard-rwx accessModes: - ReadWriteMany resources: requests: storage: 10Gi EOF
Setelah penyediaan objek
PersistentVolume
berhasil, hapus PVC pengujian setelah verifikasi:kubectl delete pvc test-pvc -n NAMESPACE_NAME
Tidak dapat membuat virtual machine
Jika resource mesin virtual diterapkan tetapi tidak mencapai status Running
, ikuti langkah-langkah berikut:
Tinjau log mesin virtual:
kubectl get vm VM_NAME -n NAMESPACE_NAME
Periksa status Pod yang sesuai dari mesin virtual:
kubectl get pod -l kubevirt.io/vm=VM_NAME
Output menampilkan status Pod. Kemungkinan opsinya adalah sebagai berikut:
Status ContainerCreating
Jika Pod dalam status ContainerCreating
, ikuti langkah-langkah berikut:
Dapatkan detail tambahan tentang status Pod:
kubectl get pod -l kubevirt.io/vm=VM_NAME
Jika volume tidak di-unmount, pastikan semua volume yang ditentukan di kolom
spec.volumes
berhasil di-mount. Jika volume adalah disk, periksa status disk.Kolom
spec.accessCredentials
menentukan nilai untuk memasang kunci publik SSH. Pastikan secret dibuat di namespace yang sama dengan mesin virtual.
Jika tidak ada cukup resource di cluster untuk membuat Pod, ikuti langkah-langkah berikut:
Jika cluster tidak memiliki cukup resource komputasi untuk menjadwalkan Pod virtual machine, hapus Pod lain yang tidak diinginkan untuk membantu melepaskan resource.
Kurangi nilai
spec.domain.resources.requests.cpu
danspec.domain.resources.requests.memory
mesin virtual.
Status Error
atau CrashLoopBackoff
Untuk mengatasi masalah Pod dalam status Error
atau CrashLoopBackoff
, ambil log dari Pod komputasi mesin virtual:
kubectl logs -l kubevirt.io/vm=VM_NAME -c compute
Status Running
dan kegagalan mesin virtual
Jika Pod dalam status Running
, tetapi mesin virtual itu sendiri gagal,
ikuti langkah-langkah berikut:
Lihat log dari Pod log mesin virtual:
kubectl logs -l kubevirt.io/vm=VM_NAME -c log
Jika log menunjukkan error saat startup mesin virtual, periksa perangkat booting yang benar dari mesin virtual. Tetapkan nilai
spec.domain.devices.disks.bootOrder
dari disk boot utama dengan nilai1
. Gunakan contoh berikut sebagai referensi:… spec: domain: devices: disks: - bootOrder: 1 disk: bus: virtio name: VM_NAME-boot-dv …
Untuk memecahkan masalah konfigurasi image mesin virtual, buat mesin virtual lain dengan image yang berbeda.
Mengakses konsol serial
Bagian ini menjelaskan cara menggunakan konsol serial instance VM untuk men-debug masalah booting dan jaringan, memecahkan masalah instance yang tidak berfungsi, berinteraksi dengan Grand Unified Bootloader (GRUB), dan melakukan tugas pemecahan masalah lainnya.
Berinteraksi dengan port serial sebanding dengan menggunakan jendela terminal: input dan output dalam mode teks, tanpa dukungan antarmuka grafis. Sistem operasi (OS) instance, input dan output dasar (BIOS), sering menulis output ke port serial dan menerima input seperti perintah.
Untuk mendapatkan akses ke konsol serial, pelajari bagian berikut:
Mengonfigurasi nama pengguna dan sandi
Secara default, image sistem Linux GDC tidak dikonfigurasi untuk mengizinkan login berbasis sandi bagi pengguna lokal.
Jika VM Anda menjalankan image yang telah dikonfigurasi sebelumnya dengan login konsol serial, Anda dapat menyiapkan sandi lokal di VM dan login melalui konsol serial. Di VM Linux GDC, Anda mengonfigurasi nama pengguna dan sandi melalui skrip startup yang disimpan sebagai secret Kubernetes selama atau setelah pembuatan VM.
Petunjuk berikut menjelaskan cara menyiapkan sandi lokal setelah pembuatan VM. Untuk mengonfigurasi nama pengguna dan sandi, selesaikan langkah-langkah berikut:
- Buat file teks.
Di file teks, konfigurasikan nama pengguna dan sandi:
#!/bin/bash username="USERNAME" password="PASSWORD" sudo useradd -m -s /bin/bash "$username" echo "$username:$password" | sudo chpasswd sudo usermod -aG sudo "$username"
Ganti kode berikut:
USERNAME
: nama pengguna yang ingin Anda tambahkan.PASSWORD
: sandi untuk nama pengguna. Hindari sandi dasar, karena beberapa OS mungkin memerlukan panjang dan kompleksitas sandi yang minimal.
Buat skrip startup sebagai secret Kubernetes:
kubectl --kubeconfig=ADMIN_KUBECONFIG create secret \ generic STARTUP_SCRIPT_NAME -n PROJECT_NAMESPACE \ --from-file=STARTUP_SCRIPT_PATH
Ganti kode berikut:
PROJECT_NAMESPACE
: namespace project tempat VM berada.- STARTUP_SCRIPT_NAME
: the name you give to the startup script. For example,
configure-credentials`. STARTUP_SCRIPT_PATH
: jalur ke skrip startup yang berisi nama pengguna dan sandi yang Anda konfigurasi.
Edit spesifikasi VM:
kubectl --kubeconfig=ADMIN_KUBECONFIG edit gvm \ -n PROJECT_NAMESPACE VM_NAME
Ganti
VM_NAME
dengan nama VM yang akan ditambahkan dalam skrip startup.Di kolom
startupScripts
, tambahkan referensi secret Kubernetes yang Anda buat pada langkah ketiga:spec: compute: memory: 8Gi vcpus: 8 disks: - boot: true virtualMachineDiskRef: name: disk-name startupScripts: - name: STARTUP_SCRIPT_NAME scriptSecretRef: name: STARTUP_SCRIPT_NAME
-
- Jika Anda sedang mengerjakan VM baru, lewati langkah ini.
Mengakses konsol serial VM
Untuk mulai mengakses konsol serial VM, lakukan hal berikut:
Hubungkan ke konsol serial:
gdcloud compute connect-to-serial-port VM_NAME \ --project PROJECT_NAMESPACE
Saat diminta, masukkan nama pengguna dan sandi yang Anda tentukan di Konfigurasi nama pengguna dan sandi.