OpenShift Virtualization:容器與虛擬機整合完整指南【2026】

OpenShift Virtualization:容器與虛擬機整合完整指南
容器是趨勢,但不是所有東西都能塞進容器裡。
那台跑了十年的 Windows Server、授權綁 MAC 的老軟體、不知道原始碼在哪的黑盒子應用⋯⋯這些東西短期內不可能容器化,但你又想統一管理。
OpenShift Virtualization 的解法是:讓 VM 也變成 Kubernetes 的一等公民。
本文將完整介紹 OpenShift Virtualization,從技術原理到實際部署,幫助你評估這個混合架構方案。如果你對 OpenShift 還不熟悉,建議先閱讀 OpenShift 完整指南。
OpenShift Virtualization 簡介
什麼是 OpenShift Virtualization?
OpenShift Virtualization 是 OpenShift 的附加功能,讓你在同一個平台上同時運行 容器 和 虛擬機。
傳統架構:
┌─────────────────┐ ┌─────────────────┐
│ 容器平台 │ │ 虛擬化平台 │
│ (Kubernetes) │ │ (VMware/KVM) │
│ ┌───┐ ┌───┐ │ │ ┌───┐ ┌───┐ │
│ │Pod│ │Pod│ │ │ │VM │ │VM │ │
└──┴───┴─┴───┴───┘ └──┴───┴─┴───┴───┘
兩套系統、兩套管理
OpenShift Virtualization 架構:
┌─────────────────────────────────────┐
│ OpenShift 統一平台 │
│ ┌───┐ ┌───┐ ┌─────┐ ┌─────┐ │
│ │Pod│ │Pod│ │VM │ │VM │ │
│ │ │ │ │ │(Pod)│ │(Pod)│ │
└──┴───┴─┴───┴─┴─────┴─┴─────┴───────┘
一套系統、一套管理
技術基礎:KubeVirt
OpenShift Virtualization 基於開源專案 KubeVirt:
- CNCF 孵化專案
- 讓 Kubernetes 能夠管理 VM
- VM 跑在特殊的 Pod 裡面(virt-launcher)
- 用 Kubernetes API 操作 VM 生命週期
KubeVirt 的設計理念:VM 就是一種特殊的 Pod。
調度、網路、儲存都用 Kubernetes 原生機制,只是裡面跑的不是容器,而是虛擬機。
為什麼需要「容器化 VM」?
場景一:混合工作負載
某企業有:
- 新開發的微服務(容器)
- 舊的 Monolithic 應用(VM)
- 想要統一管理、統一監控
場景二:VMware 遷移
VMware 授權費用越來越高,想遷移到開源方案,但:
- 應用太多,不可能全部容器化
- 需要一個過渡方案
場景三:開發測試環境
開發者需要:
- 測試容器化應用
- 同時測試 VM 上的舊版本
- 不想維護兩套環境
插圖:左右對照圖。左邊「傳統架構」顯示容器平台和虛擬化平台分離,各...
場景描述: 左右對照圖。左邊「傳統架構」顯示容器平台和虛擬化平台分離,各自有管理介面、監控、網路。右邊「整合架構」顯示 OpenShift 統一管理容器和 VM,共用監控、日誌、網路。用箭頭表示從左到右的轉變,標註「統一管理」。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪
Slug:
openshift-virtualization-unified-platform
核心功能
VM 生命週期管理
OpenShift Virtualization 支援完整的 VM 生命週期操作:
| 操作 | 說明 | CLI 指令 |
|---|---|---|
| 建立 | 從模板或 YAML 建立 VM | oc apply -f vm.yaml |
| 啟動 | 啟動已停止的 VM | virtctl start my-vm |
| 停止 | 正常關機 | virtctl stop my-vm |
| 重啟 | 重新開機 | virtctl restart my-vm |
| 暫停 | 暫停執行 | virtctl pause my-vm |
| 刪除 | 刪除 VM | oc delete vm my-vm |
VirtualMachine YAML 範例:
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: my-vm
spec:
running: true
template:
spec:
domain:
cpu:
cores: 2
memory:
guest: 4Gi
devices:
disks:
- name: rootdisk
disk:
bus: virtio
interfaces:
- name: default
masquerade: {}
networks:
- name: default
pod: {}
volumes:
- name: rootdisk
dataVolume:
name: my-vm-disk
Live Migration
Live Migration(即時遷移) 可以在不停機的情況下,把 VM 從一個 Node 移到另一個:
# 觸發 Live Migration
virtctl migrate my-vm
# 查看遷移狀態
oc get vmim
Live Migration 的用途:
- Node 維護時不中斷服務
- 資源平衡
- 硬體升級
Live Migration 需求:
- 共享儲存(所有 Node 都能存取)
- 足夠的網路頻寬
- 目標 Node 有足夠資源
快照與備份
VM 快照讓你保存某個時間點的狀態:
apiVersion: snapshot.kubevirt.io/v1alpha1
kind: VirtualMachineSnapshot
metadata:
name: my-vm-snapshot
spec:
source:
apiGroup: kubevirt.io
kind: VirtualMachine
name: my-vm
還原快照:
apiVersion: snapshot.kubevirt.io/v1alpha1
kind: VirtualMachineRestore
metadata:
name: my-vm-restore
spec:
target:
apiGroup: kubevirt.io
kind: VirtualMachine
name: my-vm
virtualMachineSnapshotName: my-vm-snapshot
模板管理
OpenShift Virtualization 內建多種 VM 模板:
- RHEL 7/8/9
- CentOS Stream
- Fedora
- Windows Server(需要自備授權)
也可以建立自訂模板,預先設定 CPU、記憶體、網路等配置。
架構設計
組件架構
OpenShift Virtualization 主要組件:
| 組件 | 功能 |
|---|---|
| virt-controller | 管理 VM 生命週期 |
| virt-handler | 每個 Node 上的代理 |
| virt-launcher | 包含 VM 的 Pod |
| virt-api | 提供 API endpoint |
| CDI(Containerized Data Importer) | 匯入 VM 磁碟映像 |
架構圖:
┌─────────────────────────────────────────────┐
│ Control Plane │
│ ┌───────────────┐ ┌───────────────┐ │
│ │ virt-api │ │ virt-controller│ │
│ └───────────────┘ └───────────────┘ │
├─────────────────────────────────────────────┤
│ Worker Node │
│ ┌───────────────┐ ┌───────────────────┐ │
│ │ virt-handler │ │ virt-launcher (Pod)│ │
│ │ │ │ ┌─────────────┐ │ │
│ │ │ │ │ VM │ │ │
│ └───────────────┘ └──┴─────────────┴──┘ │
└─────────────────────────────────────────────┘
網路設計
OpenShift Virtualization 支援多種網路模式:
| 模式 | 說明 | 適用場景 |
|---|---|---|
| Pod Network(masquerade) | VM 使用 Pod 網路 | 一般用途,簡單 |
| Bridge | 直接連接實體網路 | 需要固定 IP |
| SR-IOV | 直接存取實體網卡 | 高效能需求 |
Pod Network(預設):
VM 使用跟 Pod 一樣的網路,透過 NAT 存取外部:
spec:
template:
spec:
networks:
- name: default
pod: {}
domain:
devices:
interfaces:
- name: default
masquerade: {}
Bridge Network:
VM 直接橋接到實體網路,可以有獨立的 IP:
spec:
template:
spec:
networks:
- name: bridge-net
multus:
networkName: br-external
domain:
devices:
interfaces:
- name: bridge-net
bridge: {}
儲存設計
VM 磁碟用 DataVolume 管理,底層是 PVC:
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: my-vm-disk
spec:
source:
http:
url: "https://download.example.com/rhel9.qcow2"
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
storageClassName: ocs-storagecluster-ceph-rbd
儲存類型選擇:
| 存取模式 | 說明 | 支援 Live Migration |
|---|---|---|
| ReadWriteOnce(RWO) | 單節點讀寫 | 否 |
| ReadWriteMany(RWX) | 多節點讀寫 | 是 |
Live Migration 需要 RWX 儲存(如 ODF、NFS)。
安裝與設定
前置需求
硬體需求:
- 支援虛擬化的 CPU(Intel VT-x 或 AMD-V)
- Worker Node 至少 16GB RAM
- 建議使用 SSD 儲存
軟體需求:
- OpenShift 4.12 或更新版本
- Bare Metal 或支援巢狀虛擬化的環境
確認虛擬化支援:
# 在 Worker Node 上檢查
cat /proc/cpuinfo | grep -E "(vmx|svm)"
安裝 Operator
透過 Web Console:
- 進入 Operators → OperatorHub
- 搜尋 OpenShift Virtualization
- 點擊 Install
- 選擇 openshift-cnv namespace
- 等待安裝完成
透過 CLI:
# 建立 Namespace
apiVersion: v1
kind: Namespace
metadata:
name: openshift-cnv
---
# 建立 OperatorGroup
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
name: kubevirt-hyperconverged-group
namespace: openshift-cnv
spec:
targetNamespaces:
- openshift-cnv
---
# 訂閱 Operator
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: hco-operatorhub
namespace: openshift-cnv
spec:
source: redhat-operators
sourceNamespace: openshift-marketplace
name: kubevirt-hyperconverged
channel: stable
建立 HyperConverged
安裝 Operator 後,需要建立 HyperConverged 資源來啟用功能:
apiVersion: hco.kubevirt.io/v1beta1
kind: HyperConverged
metadata:
name: kubevirt-hyperconverged
namespace: openshift-cnv
spec:
infra: {}
workloads: {}
等待所有 Pod 就緒:
oc get pods -n openshift-cnv
建立虛擬機
從模板建立
Web Console 提供最簡單的方式:
- 進入 Virtualization → Catalog
- 選擇作業系統模板(如 RHEL 9)
- 設定名稱、CPU、記憶體
- 選擇儲存類型
- 點擊 Create VirtualMachine
從 ISO 安裝
上傳 ISO 並建立 VM:
# 建立 DataVolume 存放 ISO
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: windows-iso
spec:
source:
upload: {}
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 6Gi
---
# 建立空白磁碟
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: windows-disk
spec:
source:
blank: {}
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
上傳 ISO:
virtctl image-upload dv windows-iso \
--image-path=/path/to/windows.iso \
--uploadproxy-url=https://cdi-uploadproxy-openshift-cnv.apps.cluster.example.com
匯入現有 VM
從 QCOW2 或 VMDK 匯入:
apiVersion: cdi.kubevirt.io/v1beta1
kind: DataVolume
metadata:
name: imported-disk
spec:
source:
http:
url: "https://example.com/vm-disk.qcow2"
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 50Gi
VMware 遷移
對於想從 VMware 離開的企業,OpenShift Virtualization 提供 MTV(Migration Toolkit for Virtualization)。
MTV 工具介紹
MTV 可以自動化地:
- 探索 VMware vSphere 環境
- 選擇要遷移的 VM
- 轉換磁碟格式(VMDK → QCOW2)
- 遷移到 OpenShift Virtualization
安裝 MTV
從 OperatorHub 安裝 Migration Toolkit for Virtualization:
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
name: mtv-operator
namespace: openshift-mtv
spec:
source: redhat-operators
sourceNamespace: openshift-marketplace
name: mtv-operator
channel: release-v2.6
遷移規劃
Step 1:建立 Provider
連接 VMware vCenter:
apiVersion: forklift.konveyor.io/v1beta1
kind: Provider
metadata:
name: vmware-source
namespace: openshift-mtv
spec:
type: vsphere
url: https://vcenter.example.com/sdk
secret:
name: vmware-credentials
Step 2:建立 NetworkMap
對應 VMware 網路到 OpenShift 網路:
apiVersion: forklift.konveyor.io/v1beta1
kind: NetworkMap
metadata:
name: network-mapping
namespace: openshift-mtv
spec:
map:
- source:
id: network-123
destination:
type: pod
provider:
source:
name: vmware-source
Step 3:建立 StorageMap
對應儲存:
apiVersion: forklift.konveyor.io/v1beta1
kind: StorageMap
metadata:
name: storage-mapping
namespace: openshift-mtv
spec:
map:
- source:
id: datastore-456
destination:
storageClass: ocs-storagecluster-ceph-rbd
provider:
source:
name: vmware-source
Step 4:建立 Plan 並執行
apiVersion: forklift.konveyor.io/v1beta1
kind: Plan
metadata:
name: migration-plan
namespace: openshift-mtv
spec:
provider:
source:
name: vmware-source
destination:
name: host
map:
network:
name: network-mapping
storage:
name: storage-mapping
vms:
- id: vm-789
name: web-server-01
VMware 遷移是大工程,需要完善的規劃。預約架構諮詢,讓我們幫你制定遷移策略。
插圖:展示 MTV 遷移流程。從「VMware vSphere」出...
場景描述: 展示 MTV 遷移流程。從「VMware vSphere」出發,經過「探索 VM」→「建立 Network/Storage Map」→「建立遷移計畫」→「執行遷移」→「驗證測試」,最終到達「OpenShift Virtualization」。每個步驟用方框表示,箭頭連接各步驟。
視覺重點:
- 主要內容清晰呈現
必須出現的元素:
- 依據描述
需要顯示的中文字: 無
顏色調性: 專業、清晰
避免元素: 抽象圖形、齒輪
Slug:
openshift-mtv-migration-flow
最佳實踐
資源規劃
CPU:
- 不要過度分配(overcommit)CPU
- 生產環境建議 CPU 預留比例 < 150%
記憶體:
- VM 記憶體是實際佔用,不像容器
- 規劃時要計算所有 VM 的記憶體總和
儲存:
- 使用 SSD 或高效能儲存
- Live Migration 需要 RWX 儲存
- 預留足夠空間給快照
安全設定
網路隔離:
- 使用 Network Policy 隔離 VM 流量
- 敏感 VM 放在獨立的 namespace
存取控制:
- 使用 RBAC 限制誰能管理 VM
- 敏感操作(如刪除)需要額外權限
# 限制只能啟動/停止 VM,不能刪除
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: vm-operator
rules:
- apiGroups: ["kubevirt.io"]
resources: ["virtualmachines"]
verbs: ["get", "list", "watch", "update", "patch"]
- apiGroups: ["kubevirt.io"]
resources: ["virtualmachineinstances"]
verbs: ["get", "list", "watch"]
監控日誌
監控:
- VM 指標自動整合到 OpenShift Monitoring
- 可用 Prometheus 查詢 VM CPU、記憶體、網路
日誌:
- VM 內部日誌需要安裝 Guest Agent
- Guest Agent 也提供額外指標
常見問題 FAQ
Q1:OpenShift Virtualization 跟 VMware 比效能如何?
效能取決於底層硬體和設定。KubeVirt 使用 QEMU/KVM,這是 Linux 原生的虛擬化技術,效能成熟穩定。對於一般工作負載,效能差異不大。高效能需求(如資料庫)可以用 SR-IOV 網路和專用儲存優化。
Q2:所有 VM 都能遷移過來嗎?
大部分 Linux 和 Windows VM 可以遷移。但有些情況需要注意:(1)使用 VMware 專屬功能(如 vSphere HA)的 VM 需要重新設計高可用機制;(2)授權綁硬體的軟體可能需要重新授權;(3)某些老舊 OS 可能需要驅動程式調整。
Q3:Live Migration 會中斷服務嗎?
正常情況下不會。Live Migration 會先複製記憶體,最後才切換執行位置,切換時間通常只有毫秒級。但如果 VM 記憶體寫入非常頻繁,可能需要多次迭代複製,遷移時間會拉長。
Q4:可以混用容器和 VM 的應用嗎?
可以。這是 OpenShift Virtualization 的核心價值。容器和 VM 可以:(1)使用同一個 Service 暴露;(2)透過 Service 互相呼叫;(3)共用監控和日誌。例如前端跑容器,後端資料庫跑 VM。
Q5:授權費用怎麼算?
OpenShift Virtualization 包含在 OpenShift Container Platform 訂閱中,不需要額外付費。但要注意:(1)VM 內的 OS 授權(如 Windows)需要另外處理;(2)遷移來的 VM 軟體授權可能需要確認;(3)硬體資源成本要算進去。
想把 VM 和容器統一管理?
OpenShift Virtualization 是答案,但架構設計要做對。從儲存規劃到網路設計,每個決策都會影響後續的遷移成本和維運效率。
預約架構諮詢,讓我們評估你的混合工作負載需求。
參考資源
相關文章
OpenShift 進階功能:ACM、ACS、LDAP、驗證設定完整指南【2026】
深入介紹 OpenShift 進階功能設定,涵蓋 ACM 多叢集管理、ACS 進階安全、LDAP/AD 身份驗證、RBAC 權限設計、Auto Scaling 與 Service Mesh。
OpenShiftOpenShift AI:企業 AI/ML 平台完整指南【2026】
深度解析 OpenShift AI 2.x 平台,涵蓋 LLM 推論服務、vLLM 整合、GPU 調度(NVIDIA H100/A100)、KServe 模型服務、MLOps Pipeline、RAG 應用與 OpenShift Lightspeed。
OpenShiftOpenShift 架構解析:Control Plane、Operator 與網路設計【2026】
深度解析 OpenShift 架構設計,涵蓋 Control Plane 組件、Worker Node、Operator 機制、OVN-Kubernetes 網路、儲存架構、安全設計與高可用性配置。