Cuttlefish:多租戶架構

Cuttlefish 多用戶群可讓您的主體機器透過單次啟動叫用啟動多個虛擬訪客裝置。

這些多個 Cuttlefish 虛擬機器可共用部分主機磁碟資源,以便節省磁碟空間。每部虛擬機器都會得到一個涵蓋 Android 分區 (例如 superuserdataboot) 的不重複磁碟重疊。您對訪客磁碟所做的任何修改都會放在訪客專屬的磁碟重疊元素中,讓每個 Cuttlefish 虛擬機器都具有磁碟分區的寫入時複製檢視。隨著每個虛擬裝置將更多資料寫入其磁碟檢視畫面,主機磁碟上的覆蓋檔案大小也會增加,因為這些檔案會擷取原始狀態和目前狀態之間的差異。

重設覆蓋檔案可將 Cuttlefish 磁碟還原至原始狀態。這項程序稱為Powerwash

執行個體編號

Cuttlefish 裝置會在與執行個體編號相關聯的主機上建立及使用資源。舉例來說,如果是 Cuttlefish 裝置 (執行個體編號為 1) 的 TCP 伺服器通訊端 (位於 6520 通訊埠) 公開 adb 連線。啟動多個執行個體時,會為第一部裝置在埠 6520 建立 TCP 伺服器 Socket,為第二部裝置在埠 6521 建立 Socket,並為每個額外裝置遞增埠號。

修改支援的執行個體數量上限

主機端資源 (例如 TAP 網路裝置) 必須預先分配給 Cuttlefish 虛擬機器。根據預設,cuttlefish-base Debian 套件會透過 10 為執行個體編號 1 佈建資源。

如要變更這項設定,請在 /etc/default/cuttlefish-host-resources 中修改 num_cvd_accounts,並執行下列指令,重新啟動 cuttlefish-host-resources 服務:

sudo systemctl restart cuttlefish-host-resources

標準設定

標準設定會以 JSON 格式代表 Cuttlefish 裝置的設定。您可以建立標準化設定 JSON 檔案,描述在多用戶群情境中多個 Cuttlefish 裝置的設定。

以下說明用於標準設定 JSON 檔案 (將預留位置替換為裝置設定) 的格式。

{
  "common": {
    CONFIGURATIONS_APPLYING_TO_ALL_DEVICES
  },
  "instances": [
    {
      FIRST_DEVICE_CONFIGURATION
    },
    {
      NTH_DEVICE_CONFIGURATION
    }
  ]
}

下列是包含兩部裝置 (手機和穿戴式裝置) 的設定設定檔範例:

{
  "instances": [
    {
      "@import": "phone",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "OPTIONAL",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_x86_64_phone-userdebug"
      }
    },
    {
      "@import": "wearable",
      "vm": {
        "memory_mb": 8192,
        "setupwizard_mode": "REQUIRED",
        "cpus": 4
      },
      "disk": {
        "default_build": "/home/username/devices/cf_gwear_x86-userdebug"
      }
    }
  ]
}

下表說明包含兩部裝置的範例設定中使用的元素:

元素 類型 說明
instances 陣列 JSON 物件陣列,每個物件會說明要啟動的多租戶裝置群組中的單一裝置。
@import 字串 指出裝置類型,並設定裝置設定的預設值。支援的裝置類型為 phonewearable
vm 物件 指定套用至裝置執行個體專屬 VM 環境的屬性。
memory_mb 數字 要為特定 VM 分配的記憶體量 (以 MB 為單位)。
setupwizard_mode 字串 指定是否要在裝置首次執行時為使用者執行裝置設定精靈。設定精靈模式支援的選項為 DISABLEDOPTIONALREQUIRED
cpus 數字 分配給 VM 的虛擬 CPU 數量。
disk 物件 指定與找出執行單一 VM 執行個體所用的檔案系統構件相關的屬性。
default_build 字串 包含 Cuttlefish 虛擬裝置映像檔的資料夾本機檔案系統路徑。

如需更多以 cvd 發布設定檔的範例,請參閱 Cuttlefish 程式碼樹中的 cvd_test_configs 資料夾。

控制多租戶執行個體

本節說明如何在多用戶群情境中建立及刪除裝置。 您可以使用下列選項啟動多部 Cuttlefish 裝置:

  • 標準設定:使用描述要啟動之執行個體的清單的 JSON 設定檔,為每部裝置啟動自訂設定。
  • 單一訪客映像檔:從單一訪客映像檔啟動多個裝置。

從標準設定啟動多個 VM

如要使用說明多用戶群情境的標準設定建立多個 VM,請叫用 cvd create 指令並加上 --config_file= 標記前置字串,如下所示:

cvd create --config_file=CONFIG_FILE

以下是參照名為 /etc/phone.json 的標準設定檔的叫用例子。

cvd create --config_file=/etc/phone.json

透過單一訪客映像檔啟動多個 VM

如要使用單一訪客映像檔啟動多個 Cuttlefish 裝置,請使用 --num_instances=N 標記,其中 N 是要啟動的裝置數量。根據預設,裝置從執行個體編號 1 開始。

cvd create --num_instances=N

如要變更起始例項編號,請執行下列任一操作:

  • 新增 --base_instance_num=N 旗標,並使用 N 做為第一個執行個體編號。

    cvd create --base_instance_num=N
    
  • 使用符合 vsoc-NN 的使用者帳戶啟動 Cuttlefish,其中 NN 是兩位數形式的基本執行個體編號。舉例來說,如要使用使用者帳戶 vsoc-01 啟動 Cuttlefish,請執行以下指令:

    cvd create --base_instance_num=1
    

如何停止裝置

如要停止上次 cvd create 叫用所啟動的所有裝置,請執行以下指令:

cvd stop

如要重新啟動已停止的裝置,請執行:

cvd start

如要從系統完全移除裝置,請執行下列步驟:

cvd remove