返回首頁OpenShift

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

15 min 分鐘閱讀
#OpenShift#Virtualization#KubeVirt#VMware#混合工作負載

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 建立 VMoc apply -f vm.yaml
啟動啟動已停止的 VMvirtctl start my-vm
停止正常關機virtctl stop my-vm
重啟重新開機virtctl restart my-vm
暫停暫停執行virtctl pause my-vm
刪除刪除 VMoc 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

  1. 進入 Operators → OperatorHub
  2. 搜尋 OpenShift Virtualization
  3. 點擊 Install
  4. 選擇 openshift-cnv namespace
  5. 等待安裝完成

透過 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 提供最簡單的方式:

  1. 進入 Virtualization → Catalog
  2. 選擇作業系統模板(如 RHEL 9)
  3. 設定名稱、CPU、記憶體
  4. 選擇儲存類型
  5. 點擊 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 是答案,但架構設計要做對。從儲存規劃到網路設計,每個決策都會影響後續的遷移成本和維運效率。

預約架構諮詢,讓我們評估你的混合工作負載需求。


參考資源

需要專業的雲端建議?

無論您正在評估雲平台、優化現有架構,或尋找節費方案,我們都能提供協助

預約免費諮詢

相關文章