我希望使用適用于 Azure 的節點/Javascript SDK 來啟動 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 Docs 在這里有點缺乏:https : //docs.microsoft.com/en-us/javascript/api/@azure/arm-compute/hypervgeneration?view= azure-node- latest 我也試過另一個HyperVGenerationType / Types等引數具有相同的結果。
uj5u.com熱心網友回復:
我想到了!
我在這里解決了錯誤的假設。不是將 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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402586.html
標籤:
上一篇:在Rust中接收DHCPv6訊息
下一篇:創建一個Sql同步組是否可能?
