跳转至

QGA(Qemu Guest Agent)获取虚拟机信息

Guest Agent 信息

Guest Agent(GA)是一种可选的组件,可以在虚拟机内部运行,该组件提供关于正在运行的操作系统的大量额外运行时信息。 我们通常说的 QGA指的就是Qemu-Guest-Agent。

Guest Agent 状态信息,可从vm的status中获取,条件类型为 AgentConnected 时表示Guest Agent 已经连接并处于可用状态。

# kubectl describe vmi vm-ubuntu01 
...

Status:
  Conditions:
   ...
    Status:                True
    Type:                  AgentConnected

KubeVirt 在 VirtualMachineInstance 对象下新增了三个子资源来获取 Guest Agent 提供的信息:

  • guestosinfo 提供了与来guest操作系统相关的基本信息,以及能执行哪些命令。
    ## 先启动一个代理,通过代理访问k8s API
    # kubectl proxy
    Starting to serve on 127.0.0.1:8001
    
# curl http://127.0.0.1:8001/apis/subresources.kubevirt.io/v1/namespaces/default/virtualmachineinstances/vm-ubuntu01/guestosinfo
{
 "fsFreezeStatus": "thawed",
 "fsInfo": {
  "disks": [
   {
    "diskName": "loop3",
    "fileSystemType": "squashfs",
    "mountPoint": "/snap/lxd/27037",
    "totalBytes": 91226112,
    "usedBytes": 91226112
   },
   {
    "diskName": "vda15",
    "fileSystemType": "vfat",
    "mountPoint": "/boot/efi",
    "totalBytes": 109395456,
    "usedBytes": 6333952
   },
   {
    "diskName": "loop2",
    "fileSystemType": "squashfs",
    "mountPoint": "/snap/snapd/20671",
    "totalBytes": 42467328,
    "usedBytes": 42467328
   },
   {
    "diskName": "loop0",
    "fileSystemType": "squashfs",
    "mountPoint": "/snap/core20/2105",
    "totalBytes": 67108864,
    "usedBytes": 67108864
   },
   {
    "diskName": "loop1",
    "fileSystemType": "squashfs",
    "mountPoint": "/snap/lxd/26741",
    "totalBytes": 120061952,
    "usedBytes": 120061952
   },
   {
    "diskName": "vda1",
    "fileSystemType": "ext4",
    "mountPoint": "/",
    "totalBytes": 10196688896,
    "usedBytes": 1838821376
   }
  ]
 },
 "guestAgentVersion": "6.2.0",
 "hostname": "vm-ubuntu01",
 "os": {
  "id": "ubuntu",
  "kernelRelease": "5.15.0-92-generic",
  "kernelVersion": "#102-Ubuntu SMP Wed Jan 10 09:33:48 UTC 2024",
  "machine": "x86_64",
  "name": "Ubuntu",
  "prettyName": "Ubuntu 22.04.3 LTS",
  "version": "22.04.3 LTS (Jammy Jellyfish)",
  "versionId": "22.04"
 },
 "supportedCommands": [
  {
   "enabled": true,
   "name": "guest-ssh-remove-authorized-keys"
  },
  {
   "enabled": true,
   "name": "guest-ssh-add-authorized-keys"
  },
  {
   "enabled": true,
   "name": "guest-ssh-get-authorized-keys"
  },
  {
   "name": "guest-get-devices"
  },
  {
   "enabled": true,
   "name": "guest-get-osinfo"
  },
  {
   "enabled": true,
   "name": "guest-get-timezone"
  },
  {
   "enabled": true,
   "name": "guest-get-users"
  },
  {
   "enabled": true,
   "name": "guest-get-host-name"
  },
  {
   "enabled": true,
   "name": "guest-exec"
  },
  {
   "enabled": true,
   "name": "guest-exec-status"
  },
  {
   "enabled": true,
   "name": "guest-get-memory-block-info"
  },
  {
   "enabled": true,
   "name": "guest-set-memory-blocks"
  },
  {
   "enabled": true,
   "name": "guest-get-memory-blocks"
  },
  {
   "enabled": true,
   "name": "guest-set-user-password"
  },
  {
   "enabled": true,
   "name": "guest-get-fsinfo"
  },
  {
   "enabled": true,
   "name": "guest-get-disks"
  },
  {
   "enabled": true,
   "name": "guest-set-vcpus"
  },
  {
   "enabled": true,
   "name": "guest-get-vcpus"
  },
  {
   "enabled": true,
   "name": "guest-network-get-interfaces"
  },
  {
   "enabled": true,
   "name": "guest-suspend-hybrid"
  },
  {
   "enabled": true,
   "name": "guest-suspend-ram"
  },
  {
   "enabled": true,
   "name": "guest-suspend-disk"
  },
  {
   "enabled": true,
   "name": "guest-fstrim"
  },
  {
   "enabled": true,
   "name": "guest-fsfreeze-thaw"
  },
  {
   "enabled": true,
   "name": "guest-fsfreeze-freeze-list"
  },
  {
   "enabled": true,
   "name": "guest-fsfreeze-freeze"
  },
  {
   "enabled": true,
   "name": "guest-fsfreeze-status"
  },
  {
   "enabled": true,
   "name": "guest-file-flush"
  },
  {
   "enabled": true,
   "name": "guest-file-seek"
  },
  {
   "enabled": true,
   "name": "guest-file-write"
  },
  {
   "enabled": true,
   "name": "guest-file-read"
  },
  {
   "enabled": true,
   "name": "guest-file-close"
  },
  {
   "enabled": true,
   "name": "guest-file-open"
  },
  {
   "enabled": true,
   "name": "guest-shutdown"
  },
  {
   "enabled": true,
   "name": "guest-info"
  },
  {
   "enabled": true,
   "name": "guest-set-time"
  },
  {
   "enabled": true,
   "name": "guest-get-time"
  },
  {
   "enabled": true,
   "name": "guest-ping"
  },
  {
   "enabled": true,
   "name": "guest-sync"
  },
  {
   "enabled": true,
   "name": "guest-sync-delimited"
  }
 ],
 "timezone": "CST, 28800"
}
  • filesystemlist 展示虚拟机内部文件系统的结构,包括挂载点、磁盘使用情况以及各个目录下的文件数量等信息。
    # curl http://127.0.0.1:8001/apis/subresources.kubevirt.io/v1/namespaces/default/virtualmachineinstances/vm-ubuntu01/filesystemlist
    {
     "items": [
      {
       "diskName": "loop3",
       "fileSystemType": "squashfs",
       "mountPoint": "/snap/lxd/27037",
       "totalBytes": 91226112,
       "usedBytes": 91226112
      },
      {
       "diskName": "vda15",
       "fileSystemType": "vfat",
       "mountPoint": "/boot/efi",
       "totalBytes": 109395456,
       "usedBytes": 6333952
      },
      {
       "diskName": "loop2",
       "fileSystemType": "squashfs",
       "mountPoint": "/snap/snapd/20671",
       "totalBytes": 42467328,
       "usedBytes": 42467328
      },
      {
       "diskName": "loop0",
       "fileSystemType": "squashfs",
       "mountPoint": "/snap/core20/2105",
       "totalBytes": 67108864,
       "usedBytes": 67108864
      },
      {
       "diskName": "loop1",
       "fileSystemType": "squashfs",
       "mountPoint": "/snap/lxd/26741",
       "totalBytes": 120061952,
       "usedBytes": 120061952
      },
      {
       "diskName": "vda1",
       "fileSystemType": "ext4",
       "mountPoint": "/",
       "totalBytes": 10196688896,
       "usedBytes": 1838821376
      }
     ],
     "metadata": {}
    }
    
  • userlist 展示当前登录的用户信息
# curl http://127.0.0.1:8001/apis/subresources.kubevirt.io/v1/namespaces/default/virtualmachineinstances/vm-ubuntu01/userlist
{
 "items": [],
 "metadata": {}
}
# curl http://127.0.0.1:8001/apis/subresources.kubevirt.io/v1/namespaces/default/virtualmachineinstances/vm-ubuntu01/userlist
{
 "items": [
  {
   "loginTime": 1707738497.370697,
   "userName": "ubuntu"
  }
 ],
 "metadata": {}
}