[英]Azure HyperVGeneration V2 VM creation
我希望使用節點/Javascript SDK 為 Azure 啟動 VM。 到目前為止,我的代碼很幸運,它幾乎可以按預期工作。 但是,我想啟動第 2 代/HyperV v2 虛擬機,而不是默認的 v1。 這是我的代碼片段:
return new Promise((resolve, reject) => {
let resourceClient = new ComputeManagementClient(credentials, azureSubscriptionID);
resourceClient.virtualMachines.createOrUpdate(reourceGroup, name, {
location: location,
osProfile: { computerName: name, adminUsername: 'admin', adminPassword: adminPassword, customData: Buffer.from(prepScript).toString('base64') },
hardwareProfile: { vmSize: 'Standard_B2s' },
HyperVGeneration: 'V2',
storageProfile: {
imageReference: { publisher: 'Canonical', offer: 'UbuntuServer', sku: '18.04-LTS', version: 'latest' },
osDisk: { name: name + '-disk', createOption: 'FromImage' }
},
networkProfile: {
networkInterfaces: [{ id: nic.id, primary: true }]
}
}, function (err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
}
我遇到的問題是:
HyperVGeneration: 'V2'
因為它似乎甚至不適用。 我也沒有收到任何錯誤,只是創建了一個 V1 虛擬機。 Azure 文檔在這里有點缺乏: https://docs.microsoft.com/en-us/javascript/api/@azure/arm-compute/hypervgeneration?view=azure-node-latest我也試過其他HyperVGenerationType / Types等參數具有相同的結果。
我想到了!
我在這里解決了錯誤的假設。 不是將 VM 生成/HyperVGeneration 配置為 V2,而是以某種方式使用 gen2 映像 sku 來作為 OS 磁盤的基礎,而是自動將 VM 生成配置為 V2。 MS 用多個名稱調用同一事物的事實也無濟於事:VM 生成、HyperV 生成、映像生成。
無論如何,解決方案是實際查找所有可以安裝的可用圖像並從中選擇正確的圖像。 要獲取您所在地區的可用圖像:
az vm image list --all --publisher 'Canonical' --sku '18_04' --output table
它返回如下內容:
Offer Publisher Sku Urn Version
-------------------------------------------- ----------- ---------------------------- ------------------------------------------------------------------------------------------- ---------------
0001-com-ubuntu-confidential-vm-experimental Canonical 18_04 Canonical:0001-com-ubuntu-confidential-vm-experimental:18_04:18.04.20210309 18.04.20210309
0001-com-ubuntu-confidential-vm-experimental Canonical 18_04-gen2 Canonical:0001-com-ubuntu-confidential-vm-experimental:18_04-gen2:18.04.20210309 18.04.20210309
0001-com-ubuntu-pro-advanced-sla Canonical 18_04 Canonical:0001-com-ubuntu-pro-advanced-sla:18_04:18.04.20200318 18.04.20200318
0001-com-ubuntu-pro-advanced-sla Canonical 18_04 Canonical:0001-com-ubuntu-pro-advanced-sla:18_04:18.04.20200605 18.04.20200605
...
另一件值得注意的事情是,一些 Ubuntu 圖像的 sku 為“18.04”,而一些“18_04”則進一步混淆了事情。
最終的解決方案是使用此代碼段將它們放在一起:
return new Promise((resolve, reject) => {
let resourceClient = new ComputeManagementClient(credentials, azureSubscriptionID);
resourceClient.virtualMachines.createOrUpdate(reourceGroup, name, {
location: location,
osProfile: { computerName: name, adminUsername: 'admin', adminPassword: adminPassword, customData: Buffer.from(prepScript).toString('base64') },
hardwareProfile: { vmSize: 'Standard_B2s' },
storageProfile: {
imageReference: { publisher: 'Canonical', offer: 'UbuntuServer', sku: '18_04-lts-gen2', version: 'latest' },
osDisk: { name: name + '-disk', createOption: 'FromImage' }
},
networkProfile: {
networkInterfaces: [{ id: nic.id, primary: true }]
}
}, function (err, result) {
if (err) {
reject(err);
} else {
resolve(result);
}
});
}
請注意圖像 sku 是18_04-lts-gen2而不是18.04-LTS 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.