vSphere IaaS control plane 提供虛擬機器服務功能,讓 DevOps 工程師除了部署及執行容器之外,還可以在一般的共用 Kubernetes 環境中部署及執行虛擬機器。可以使用虛擬機器服務管理命名空間中虛擬機器的生命週期。虛擬機器服務可管理獨立虛擬機器以及構成 Tanzu Kubernetes Grid 叢集的虛擬機器。

虛擬機器服務解決了 DevOps 團隊需要使用 Kubernetes,但現有的虛擬機器型工作負載無法輕鬆容器化的需求。此外,還可協助使用者減少管理非 Kubernetes 平台以及容器平台的額外負荷。在 Kubernetes 平台上執行容器和虛擬機器時,DevOps 團隊可以將其工作負載使用量整併到一個平台中。

備註: 除了獨立虛擬機器之外,虛擬機器服務還管理構成 Tanzu Kubernetes Grid 叢集的虛擬機器。如需叢集的相關資訊,請參閱 將 TKG 服務與 vSphere IaaS 控制平面搭配使用說明文件。
虛擬機器服務管理獨立虛擬機器和構成 Tanzu Kubernetes Grid 叢集的虛擬機器

透過虛擬機器服務部署的每個虛擬機器會作為執行所有元件 (包括其自己的作業系統) 的完整機器運作於 vSphere IaaS control plane 基礎結構之上。虛擬機器可以存取 主管 提供的網路和儲存區,並且使用標準 Kubernetes kubectl 命令進行管理。虛擬機器會作為完全隔離的系統執行,不會受到 Kubernetes 環境中其他虛擬機器或工作負載的干擾。

何時在 Kubernetes 平台上使用虛擬機器?

一般而言,決定在容器中還是在虛擬機器中執行工作負載取決於您的業務需求和目標。使用虛擬機器的原因如下:

  • 您的應用程式無法容器化。
  • 您的專案有特定的硬體需求。
  • 應用程式專為自訂核心或自訂作業系統而設計。
  • 應用程式更適合在虛擬機器中執行。
  • 您想要有一致的 Kubernetes 體驗並避免額外負荷。您可以整併這些堆疊並使用熟悉的 kubectl 命令進行管理,而不是針對非 Kubernetes 和容器平台執行各組單獨的基礎結構。

虛擬機器服務的概念

若要說明要在 vSphere 命名空間 中部署的虛擬機器的狀態,可以使用虛擬機器類別、虛擬機器映像和儲存區類別等參數。然後,虛擬機器服務會整合這些規格,以建立獨立虛擬機器或支援 Tanzu Kubernetes Grid 叢集的虛擬機器。

虛擬機器規格將虛擬機器類別、虛擬機器映像和儲存區類別聚焦在一起以建立虛擬機器
虛擬機器服務
虛擬機器服務是 vSphere IaaS control plane 的一個元件,可提供宣告式、Kubernetes 式 API,用於管理虛擬機器和相關聯的 vSphere 資源。透過虛擬機器服務,vSphere 管理員能夠交付資源並為 Kubernetes 提供範本 (例如虛擬機器類別和虛擬機器映像)。DevOps 工程師可以使用這些資源說明虛擬機器的所需狀態。當 DevOps 工程師指定虛擬機器狀態後,虛擬機器服務會針對支援基礎結構資源將所需狀態轉換為實際狀態。

透過虛擬機器服務建立的虛擬機器只能從 Kubernetes 命名空間使用 kubectl 命令進行管理。vSphere 管理員無法從 vSphere Client 管理虛擬機器,但可以顯示其詳細資料並監控其使用的資源。如需相關資訊,請參閱監控 vSphere IaaS control plane 中可用的虛擬機器

VM 類別
虛擬機器類別是虛擬機器規格,可用來為虛擬機器請求一組資源。虛擬機器類別由 vSphere 管理員進行控制和管理,用於定義諸如虛擬 CPU 數目、記憶體容量和保留區設定等參數。定義的參數由 主管 的基礎結構資源支援和保證。

vSphere 管理員可以建立自訂虛擬機器類別。

此外,工作負載管理還提供了數個預設虛擬機器類別。一般而言,每個預設類別類型有兩個版本:保證和最佳運作版本。保證版本會完整保留虛擬機器規格要求的資源。最佳運作類別版本則不會,它會允許過度認可資源。通常,在生產環境中會使用保證類型。

預設虛擬機器類別的範例包括以下內容。

類別 CPU 記憶體 (GB) 保留的 CPU 和記憶體
guaranteed-large 4 16
best-effort-large 4 16
guaranteed-small 2 4
best-effort-small 2 4

vSphere 管理員可以指派任意數目的現有虛擬機器類別,使其可供 DevOps 工程師在特定命名空間內使用。

虛擬機器類別為 DevOps 工程師提供了簡化的體驗。DevOps 不需要瞭解他們計劃建立的每個虛擬機器的完整組態。但是,他們可以從可用選項中選取虛擬機器類別,然後由虛擬機器服務管理虛擬機器組態。

在 Kubernetes 端,虛擬機器類別會顯示為 VirtualMachineClass 資源。

虛擬機器映像
虛擬機器映像是一個包含軟體組態 (包括作業系統、應用程式和資料) 的範本。

當 DevOps 工程師建立虛擬機器時,可以從與命名空間相關聯的內容程式庫中選取映像。對於 DevOps,這些映像將公開為 VirtualMachineImage 物件。

vSphere 管理員可以建立與 vSphere IaaS control plane 相容的虛擬機器映像,並將其上傳到內容程式庫。

內容程式庫
DevOps 工程師使用內容程式庫作為映像來源來建立虛擬機器。類似於虛擬機器類別,vSphere 管理員可以向命名空間或叢集指派現有內容程式庫,使其可供 DevOps 工程師使用。vSphere 管理員還可以使命名空間內容程式庫可寫入。此額外權限允許 DevOps 使用者將其映像發佈到程式庫。
儲存區類別
虛擬機器服務使用儲存區類別來放置虛擬磁碟和動態連結持續性磁碟區。如需有關儲存區類別的詳細資訊,請參閱 在 vSphere IaaS control plane 中將持續性儲存區與 主管 工作負載搭配使用
虛擬機器規格
DevOps 工程師在 YAML 檔案中說明了虛擬機器的所需狀態,其中整合了虛擬機器映像、虛擬機器類別和儲存區類別。
適用於 Kubernetes 的虛擬機器 Operator
透過虛擬機器 Operator,可以使用 Kubernetes 風格的宣告式 API 來管理虛擬機器。
從 vSphere 8.0 Update 3 版本開始, vSphere IaaS control plane 支援虛擬機器 Operator v1alpha2。此版本提供了以下功能及其他優點:
  • 增強了啟動載入提供者支援,包括內嵌 Cloud-Init 和 Windows 支援。
  • 增強了客體網路組態。
  • 擴增了狀態功能。
  • 支援使用者定義的就緒門。
  • 新增了 VirtualMachineWebConsoleRequest API。

除了特定於 v1alpha2 的新 API 變更外,v1alpha2 中的大多數其他 API 都能以與 v1alpha1 相同的方式運作。虛擬機器規格中的大多數欄位都與 v1alpha1 回溯相容。

v1alpha2 發佈後,可以繼續使用 v1alpha1 物件。所有 v1alpha1 物件將使用虛擬機器 Operator 中內建的轉換 Webhook 自動轉換為 v1alpha2。

如需虛擬機器 Operator v1alpha2 和支援欄位的相關資訊,請參閱 https://vm-operator.readthedocs.io/en/stable/ref/api/v1alpha2/

網路
虛擬機器服務沒有任何特定需求,其依賴於 vSphere IaaS control plane 中可用的網路組態。虛擬機器服務支援兩種類型的網路:vSphere 網路或 NSX。部署虛擬機器時,可用網路提供者為虛擬機器配置靜態 IP 位址。如需相關資訊,請參閱 vSphere IaaS 控制平面概念和規劃說明文件中的 主管網路

虛擬機器服務和具有 vSphere 區域的 主管

在三區域 主管 上建立虛擬機器時,將在所有可用區域之間複寫虛擬機器執行個體。若要透過 YAML 檔案控制虛擬機器放置,DevOps 團隊可以使用 Kubernetes 標籤 topology.kubernetes.io/zone。例如, topology.kubernetes.io/zone: zone-a02

佈建和監控虛擬機器的工作流程

身為 vSphere 管理員,您可以為虛擬機器的原則和控管設定門檻,並且向 DevOps 工程師交付虛擬機器資源 (例如虛擬機器類別和虛擬機器範本)。部署虛擬機器後,可以使用 vSphere Client 進行監控。

步驟 執行者 說明
1 vSphere 管理員 建立內容程式庫並將其指派給命名空間或 主管
2 vSphere 管理員 建立虛擬機器類別並將其指派給命名空間

若要使用 NVIDIA vGPU,請在虛擬機器類別中設定 PCI 裝置。請參閱在 vSphere IaaS control plane 中部署具有 vGPU 和其他 PCI 裝置的虛擬機器

3 DevOps 工程師 在 Kubernetes 命名空間中佈建虛擬機器

對於 Tanzu Kubernetes Grid 叢集虛擬機器,請參閱將 TKG 服務與 vSphere IaaS 控制平面搭配使用

4 vSphere 管理員 監控已部署的虛擬機器
5 DevOps 工程師 將虛擬機器映像發佈到內容程式庫