Slide 1

Slide 1 text

Kubernetesで作るIaaS基盤 Oracle Cloud Hangout Café – Season8 #5 Takuya Niita Principal Cloud Engineer Oracle Corporation Japan, Solution Architect Jun 5th , 2024 コンテナ管理もVM管理も、全てk8sに任せましょう!!

Slide 2

Slide 2 text

自己紹介 Takuya Niita Principal Cloud Engineer Oracle Corporation Japan 2 Copyright © 2024, Oracle and/or its affiliates • 日本オラクル株式会社 ソリューション・アーキテクト部 • AppDev/Container/FaaS/(a little)ML… • Oracle Cloud Hangout Caféメンバー • Oracle Groundbreakers Advocate • 前職は某SIer • Oracle歴/Cloud Native歴:5年 • ジブリ大好き 今回もちゃんとネタあります…!! takuya_0301

Slide 3

Slide 3 text

Copyright © 2024, Oracle and/or its affiliates 3 Agenda 1. そもそもVMって?? 2. KubeVirt 101 3. KubeVirt 201 4. DEMO 5. まとめ

Slide 4

Slide 4 text

そもそもVMって?? Oracle Cloud Hangout Café – Season8 #5 4 Copyright © 2024, Oracle and/or its affiliates

Slide 5

Slide 5 text

VM(仮想マシン)とは…?? ベアメタルサーバ(物理サーバ)のリソースを有効活用するための仕組み 5 Copyright © 2024, Oracle and/or its affiliates ホストOS ハイパーバイザー 依存関係 アプリA 依存関係 ゲストOS ゲストOS ハードウェア アプリB アプリC アプリケーション 依存関係 ホストOS ハードウェア ベアメタルサーバ 仮想マシン(ハイパーバイザー型)

Slide 6

Slide 6 text

VM(仮想マシン)とは…?? ベアメタルサーバ(物理サーバ)のリソースを有効活用するための仕組み 6 Copyright © 2024, Oracle and/or its affiliates ホストOS ハイパーバイザー 依存関係 アプリA 依存関係 ゲストOS ゲストOS ハードウェア アプリB アプリC アプリケーション 依存関係 ホストOS ハードウェア ここって どうなってるの…?? ベアメタルサーバ 仮想マシン(ハイパーバイザー型)

Slide 7

Slide 7 text

VMの仕組み(Linux KVMの場合) 7 Copyright © 2024, Oracle and/or its affiliates KVM libvirt(d) QEMU 仮想マシン virtio

Slide 8

Slide 8 text

VMの仕組み(Linux KVMの場合) – QEMU – QEMU(キューエム、キューエミュ、ケム) • Fabrice Bellard(FFmpegの開発者でもある)が 中心となって開発しているオープンソースの エミュレーター(模倣する仕組み) • クロスプラットフォームで動作し、Linuxでも WindowsでもmacOSでも動作 • H/Wをエミュレーション(模倣)する”プロセス” • CPU, メモリ, I/Oデバイス(HDD, NW…)…な どが対象 • QEMU単体さえあれば、仮想マシンを構築でき るが、仮想マシンのパフォーマンスが低い傾 向がある • では、どうするかは後述 8 Copyright © 2024, Oracle and/or its affiliates

Slide 9

Slide 9 text

【参考】完全仮想化と準仮想化 – 仮想I/Oの高速化 – 完全仮想化 • ハイパーバイザー(今回はLinux KVM)上で動作 するゲストOSの中身に変更を加えずに動作さ せる方式 • オーバヘッドが大きくなりやすい • ゲストOS<=>ホストOS (ハイパーバイザー) 間の命令変換が必要 • 可搬性は高い • ゲストOSに手を加えることはできないもの は完全仮想化を選択せざるを得ない 準仮想化 • ハイパーバイザー(今回はLinux KVM)上で動作 するゲストOSに変更を加えて性能向上を図っ た方式 • ハイパーバイザーが直接ゲストOSと連携 • 予めハイパーバイザーが静的にゲスト OS<=>ホストOS(ハイパーバイザー)間の命令 を変換しておく • パフォーマンスが高い 9 Copyright © 2024, Oracle and/or its affiliates ハイパーバイザー(Linux KVM) エミュレータ(QEMU) がI/Oデバイスを制御 =QEMUが命令を変換 QEMU ゲストOS QEMU エミュレータ(QEMU) がI/Oデバイスを制御 =命令を変換 所詮僕は仮想マシン… 僕は物理マシンだよ!! (という妄想) ハイパーバイザーが 直接I/Oデバイスを 制御するように変更 =事前に命令を変換 ゲストOS

Slide 10

Slide 10 text

VMの仕組み(Linux KVMの場合) – virtio – virtio • 仮想マシン向けのI/Oフレームワーク • ホストOSとゲストOSで共有されたメモリ 上にキューを構築し、キューを利用して データ入出力を実施 • 仮想マシンに対して準仮想化デバイスを提供 10 Copyright © 2024, Oracle and/or its affiliates

Slide 11

Slide 11 text

VMの仕組み(Linux KVMの場合) – libvirt(d) – libvirt(d) • Red Hat社を中心としたオープンソースプロ ジェクト • 仮想化環境管理用の共通APIを提供するライブ ラリ • KVMだけではなく、Xenなどの他の仮想化 ソフトウェアの操作を統一的なAPIで処理 することが目的 • ハイパーバイザーに依存しない • libvirtdというデーモンが実行され、libvirt APIを介してVM(QEMU)を制御するための 窓口になる • libvirtdを経由すればリモートからでも制御 できる • QEMUはlibvirt経由で操作することが多い 11 Copyright © 2024, Oracle and/or its affiliates

Slide 12

Slide 12 text

VMの仕組み(Linux KVMの場合) – ハイパーバイザー – パイパーバイザー(Linux KVM) • Kernel-based Virtual Machineの略 • Linuxに組み込まれているオープンソース の仮想化技術(ハイパーバイザー型) • Linuxそのものをハイパーバイザーとして 機能させることができる • QEMUが作成した仮想マシンを高速に動作させ るようにするためのアクセラレーター • KVMがQEMUと連携して、バックエンド機 能をサポートしたり、代替するイメージ • KVM自身が仮想マシンのエミュレーション をするわけではない • 物理HWと仮想HWの仲介を行う • あくまでもエミュレーションはQEMU のお仕事 12 Copyright © 2024, Oracle and/or its affiliates

Slide 13

Slide 13 text

ここまでのまとめとKubeVirtの世界 ここまでのまとめ • QEMU: H/Wをエミュレーション(模倣)する(仮想マシンの実態) • virtio: 準仮想化を提供する仮想マシン向けのI/Oフレームワーク • libvirt: ハイパーバイザーに依存せず、仮想化環境管理用の共通APIを提供するライブラリ • ハイパーバイザー(Linux KVM): 仮想マシンを高速に動作させるようにするためのアクセラレーター KubeVirt • KVMはLinuxカーネルの機能だし・・・ • K8sはLinuxで動くことが多いし・・・ • ハイパーバイザーのレイヤーがK8sでもいいよね…!! 13 Copyright © 2024, Oracle and/or its affiliates

Slide 14

Slide 14 text

KubeVirt 101 Oracle Cloud Hangout Café – Season8 #5 14 Copyright © 2024, Oracle and/or its affiliates

Slide 15

Slide 15 text

KubeVirt KubeVirt • https://github.com/kubevirt/kubevirt • 最新v1.2.1(2024/5現在) • GA(v1.0)到達は2023/7 • Kubernetes上で仮想マシン(VM)をコンテナとして操作するための仕組み(インタフェース) • Kubernetes Operatorを利用して実現 • コンテナ化が難しいVMワークロードもK8s上で管理できる • Red Hat社を中心に開発されているオープンソースソフトウェア(Apache License 2.0) • Red Hat OpenShift VirtualizationやAnthos for VM Runtimeなどで利用 • Oracle Linuxのパッケージ”Oracle Cloud Native Environment(OCNE)”のコンポーネントにも 15 Copyright © 2024, Oracle and/or its affiliates

Slide 16

Slide 16 text

これだけは抑えたい!! カスタムリソース(CR) VirtualMachine(VM) • KubeVirtにおけるトップレベルのCR • KubernetesのコアリソースであるDeploymentに相当 • templateフィールドにVirtualMachineInstanceリソースを持つ • .metadata.nameで指定される名前がそのまま仮想マシン名になる VirtualMachineInstance(VMI) • KubernetesのコアリソースであるPodに相当 • VMに割り当てるCPUやメモリの指定、PVCの指定などの従来のPodで指定するようなフィールド を指定できる • VMで必要なパラメータや実態は本リソースで管理 • DeploymentとPodの関係性と同じ 16 Copyright © 2024, Oracle and/or its affiliates

Slide 17

Slide 17 text

これだけは抑えたい!! カスタムリソース(CR) 17 Copyright © 2024, Oracle and/or its affiliates VirtualMachineInstance Podでの”.spec.containers.resources”に相当する設定値 VMに割り当てるCPUやメモリの要求値やリミットを設 定できる Podでの”.spec.containers[*].volumeMounts” と”.spec.volumes”に相当する設定値。 基本的には”.spec.volumes”にVMイメージを格納しておく PVCに任意のVMイメージを格納しておくData Volume(KubeVirt用のPV)を利用したVM起動ができる (Containerized Data Importer、後述)

Slide 18

Slide 18 text

これだけは抑えたい!! KubeVirtのアーキテクチャ 18 Copyright © 2024, Oracle and/or its affiliates https://kubevirt.io/user-guide/architecture/

Slide 19

Slide 19 text

これだけは抑えたい!! KubeVirtのアーキテクチャ 19 Copyright © 2024, Oracle and/or its affiliates 解説済み

Slide 20

Slide 20 text

これだけは抑えたい!! KubeVirtのアーキテクチャ 20 Copyright © 2024, Oracle and/or its affiliates virt-controller • VirtualMachineInstance(VMI)の監視と関連するPodの管理を担当 • VMIリソースに関連づけられたPodのライフサイクルを管理 virt-api • 仮想化関連の操作のエントリーポイントとして機能するHTTP APIサーバ • KubeVirtでの操作のエントリーポイント • KubeVirtでのkube-apiserverのような存在 以前はvirt-controllerとして 1つのコンポーネントだった

Slide 21

Slide 21 text

これだけは抑えたい!! KubeVirtのアーキテクチャ 21 Copyright © 2024, Oracle and/or its affiliates 解説済み 解説済み

Slide 22

Slide 22 text

これだけは抑えたい!! KubeVirtのアーキテクチャ 22 Copyright © 2024, Oracle and/or its affiliates virt-handler • DaemonSetとして各Worker Nodeに配置されるコンポー ネント • VMIリソースを監視し、リソースが変更された場合に必要 な操作を実施 • virt-apiがkube-apiserverであれば、virt-handlerはkubelet のような存在 virt-launcher • VMIリソースにつき、1つのvirt-launcherを作成 • VMIが作成された際に関連する(VMに相当する) Podを起 動する役割を担う • libvirtdとqemuを制御 • VMIが利用するcgroupと(Linux) namespaceを提供するこ とが目的 • virt-launcherの制御はvirt-handlerによって実施

Slide 23

Slide 23 text

これだけは抑えたい!! KubeVirtのアーキテクチャ 23 Copyright © 2024, Oracle and/or its affiliates virt-operator インストール&管理 インストール&管理 KubeVirtコンポーネントのライフサイクル 管理やインストールを担当

Slide 24

Slide 24 text

これだけは抑えたい!! VM(Pod)が起動するまでの流れ 24 Copyright © 2024, Oracle and/or its affiliates VMの作成 リクエスト ① ② ③ VMの 起動状態を更新 ④ ② VMの起動状態 を連携 VMの起動を 指示 ⑤ ② Podの スケジューリングと起動 ⑥ libvirtのAPIを経由し QEMUを操作 ①~②までは従来のKubernetesの処理 ③以降がKubeVirt Operatorと関連コンポーネントによる処理

Slide 25

Slide 25 text

これだけは抑えたい!! VMの操作コマンド virtctl(kubectl virt) • VMの起動/停止 • VMの一時停止/再開 25 Copyright © 2024, Oracle and/or its affiliates virtctl start virtctl stop virtctl pause vm virtctl unpause vm virtctl pause vmi or or virtctl unpause vmi VM or VMIリソースの作成後に利用できる

Slide 26

Slide 26 text

KubeVirtをとりあえず触ってみよう https://kubevirt.io/labs/manifests/vm.yaml ↑こちらのデモ用Manifestを利用 • 中身はVMリソース • VMリソース名および仮想マシン名は”testvm” • 軽量なLinuxディストリビューションである”Cirros”イメージを利用 • デモ用のためデータの永続化等は含まれていない(永続化の方法は後述) • 手順 • VMリソースの作成 • VMの起動 • コンソール接続(ただし、一般的なVMイメージはパスワード認証をサポートしないため、あまり利用しない) 26 Copyright © 2024, Oracle and/or its affiliates kubectl apply -f https://kubevirt.io/labs/manifests/vm.yaml virtctl start testvm virtctl console testvm SSHやVNC接続は後述

Slide 27

Slide 27 text

KubeVirt 201 Oracle Cloud Hangout Café – Season8 #5 27 Copyright © 2024, Oracle and/or its affiliates

Slide 28

Slide 28 text

実践!!KubeVirt VM構築編 • VMの共通設定(テンプレート) • NetworkPolicy • ネットワーク • ストレージ • ヘルスチェック VM操作編 • VMへのアクセス – SSH, VNC – • cloud-init • Containerized Data Importer(CDI) • VMのクローン/エスクポート • ライブマイグレーション • ホットプラグ 28 Copyright © 2024, Oracle and/or its affiliates

Slide 29

Slide 29 text

実践!!KubeVirt VM構築編 • VMの共通設定(テンプレート) • NetworkPolicy • ネットワーク • ストレージ • ヘルスチェック VM操作編 • VMへのアクセス – SSH, VNC – • cloud-init • Containerized Data Importer(CDI) • VMのクローン/エスクポート • ライブマイグレーション • ホットプラグ 29 Copyright © 2024, Oracle and/or its affiliates

Slide 30

Slide 30 text

VMの共通設定(テンプレート) VirtualMachineInstancetype • VMに割り当てるCPUやメモリなどのリソースを中心としたパラメータセット • “VirtualMachineInstancetype(VirtualMachineClusterInstancetypes)”で作成 • VMリソースから利用する場合はテンプレート名を”.spec.instancetype”で指定 • 以前はPreset(VirtualMachineInstancePreset)と呼ばれる仕組みも存在したが、 v0.57.0からdeprecated VirtualMachinePreference • VMリソースで指定されないフィールドをカプセル化するためのパラメータセット • ≒ VMリソースで指定されないフィールドのデフォルト値を規定 • “VirtualMachinePreference(VirtualMachineClusterPreference)”で作成 • ユーザが値を指定することによってオーバーライドできる • VMリソースから利用する場合はテンプレート名を”.spec.preference”で指定 30 Copyright © 2024, Oracle and/or its affiliates KubeVirt公開済みのテンプレート https://github.com/kubevirt/common- instancetypes U/Oシリーズなどのスペック/ワークロード に応じたテンプレートを提供

Slide 31

Slide 31 text

【補足】 VirtualMachineInstancetype/VirtualMachinePreferenceを利用したVMリソース 31 Copyright © 2024, Oracle and/or its affiliates “.spec.domain.cpu(memory).guest”に割り当てられる値。 ”.spec.domain.resources.requests.cpu(memory)” 相当の設定。 ちなみに両方設定された場合は後者が優先

Slide 32

Slide 32 text

NetworkPolicy KubeVirtで作成したVMへはコンテナと同様のNetworkPolicyを適用できる 32 Copyright © 2024, Oracle and/or its affiliates VMへのアクセスを全拒否するポリシー VMへのHTTP/HTTPSトラフィックのみを許可するポリシー VM(I)リソースのlabel を指定すればOK

Slide 33

Slide 33 text

ネットワーク KubeVirtでは2つのインタフェースからネットワークが構築される 33 Copyright © 2024, Oracle and/or its affiliates VM Pod • VM側のネットワークインタフェース(.spec.domain.devices.interfaces) • いわゆるip(f)configなどで表示/操作されるもの • Kubernetes/Pod側のネットワークと紐付けることによってネットワークに接続 • ドキュメントでは、”フロントエンド”とも呼ばれている • 以下をサポート • bridge: Linux Bridgeを利用 • slirp(QEMUユーザネットワーキングモード) : QEMU提供のNWを利用 • sriov(SR-IOV PCIデバイスでのパススルー接続) : ホスト側のNWアダプタを利用 • masquerade: iptablesを利用したNAT接続 • Kubernetes/Pod側のネットワークインタフェース(.spec.networks) • いわゆるCNI(Container Network Interface)で管理されるもの • VM側のネットワークインタフェースに対して、どの論理/物理デバイスに接続している かを宣言 • ドキュメントでは、 ”バックエンド”とも呼ばれている • 以下をサポート • pod: デフォルトネットワーク • multus: Multus CNIを利用したセカンダリーネットワークの接続

Slide 34

Slide 34 text

【補足】ネットワークの設定例 34 Copyright © 2024, Oracle and/or its affiliates 対応させる VM側のネットワーク(フロントエンド) Kubernetes/Pod側のネットワーク(バックエンド)

Slide 35

Slide 35 text

ストレージ KubeVirtでは2つのボリュームから永続ボリュームが構築される 35 Copyright © 2024, Oracle and/or its affiliates VM Pod • VM側のボリューム(.spec.domain.devices.disks) • 以下をサポート • lun(ホスト側のiSCSIターゲットに対してマッピングできる論理Volume) • disk(汎用ディスクとしての利用) • cdrom(CD–ROMドライブとしてストレージを利用、Read-Only) • filesystem(共有ファイルシステムとしての利用) • Kubernetes/Pod側のボリューム(.spec.volumes) • いわゆるCSI(Container Storage Interface)で管理されるもの • 以下をサポート • cloudInitNoCloud/cloudInitConfigDrive: cloud-initの設定 • pvc(PersistentVolumeClaim) • ephemeral: PVCと共に利用できるVM上のローカルRead-Only Volume • containerDisk: VMイメージ保存/配布用Volume(raw or qcow2形式) • emptyDisk: KubernetesのemptyDirと同様 • hostDisk: Worker Node上のVolumeを利用 • configMap/secret • serviceAccount • downwardMetrics: ホストのメトリクスを提供(vhostmd相当) PVCを利用する場合は VolumeSnapshotClass/VolumeSnapshot が必須 ホストに関する メトリクスを提 供するデーモン

Slide 36

Slide 36 text

【参考】VolumeSnapshotClass/VolumeSnapshot 36 Copyright © 2024, Oracle and/or its affiliates VolumeSnapshotClass • https://kubernetes.io/ja/docs/concepts/storage/volume-snapshot-classes/ • VolumeSnapshotContent(スナップショットの実体)をプロビジョニング(作成)する際のストレージ仕様 に関する情報を提供 • CSIドライバーのみ対応 • PersistentVolumeから見たStorageClassに相当するリソース VolumeSnapshot • https://kubernetes.io/ja/docs/concepts/storage/volume-snapshots/ • VolumeSnapshotClassを利用してVolumeSnapshotContentを作成するためのリクエスト • PersistentVolumeから見たPersistentVolumeClaim(PVC)に相当するリソース KubeVirtではVMのストレージ状態をキャプチャするために利用

Slide 37

Slide 37 text

【参考】ストレージの設定例 37 Copyright © 2024, Oracle and/or its affiliates 対応させる VM側のボリューム Kubernetes/Pod側のボリューム disk busの指定 virtioを利用する場合 Volumeは”/dev/vda”でマウントされる

Slide 38

Slide 38 text

VMへのexecおよびping(guestAgentPing)は qemu-guest-agentを利用するため 多くの場合はcloud-initによる”qemu-guest- agent”の有効化が必要 ヘルスチェック KubeVirtで作成したVMへはコンテナと同様のProbe(Liveness/Readiness)を適用できる =Kubernetesのオートヒーリングやヘルスチェックの恩恵を受けられる…!! 38 Copyright © 2024, Oracle and/or its affiliates LivenessProbe ReadinessProbe

Slide 39

Slide 39 text

【参考】watchdog 39 Copyright © 2024, Oracle and/or its affiliates VMのウォッチドックタイマー相当の設定。 VMが応答しなくなった際のアクションを指定 できる ”poweroff”, ”shutdown”,”reset”が利用できる Watchdogのプログラムを実行するbusybox

Slide 40

Slide 40 text

実践!!KubeVirt VM構築編 • VMの共通設定(テンプレート) • NetworkPolicy • ネットワーク • ストレージ • ヘルスチェック VM操作編 • VMへのアクセス – SSH, VNC – • cloud-init • Containerized Data Importer(CDI) • VMのクローン/エスクポート • ライブマイグレーション • ホットプラグ 40 Copyright © 2024, Oracle and/or its affiliates

Slide 41

Slide 41 text

VMへのアクセス – SSH, VNC – SSH • ServiceやIngressを利用したSSH接続ができる(virtctlで公開) • 従来のSSHアクセスで接続(公開鍵設定は後述するcloud-initで対応できる) • ローカルへのプロキシ(ProxyCommand利用時など) VNC • remote-viewerで実行する場合(VM側のremote-viewerのインストールも必要) • vnc-proxyのみを実行したい場合(任意のVNCクライアント利用時など) 41 Copyright © 2024, Oracle and/or its affiliates virtctl expose vmi vm1 --name=vm1-ssh --port=20222 --target-port=22 --type=NodePort ssh -i ~/.ssh/id_rsa [email protected] -p 20222 Serviceが作成される virtctl vnc testvm --port 5901 virtctl vnc --proxy-only --port 5901 testvm virtctl ssh -i ~/.ssh/id_rsa testvm -p 20222 scpも可 virtctl ssh -i ~/.ssh/id_rsa testvm -p 20222 --local-ssh testvm

Slide 42

Slide 42 text

cloud-init cloud-initの他にWindows用Startup ScriptのSysPrepやContainer OS(旧CoreOS)用のIgnitionもサポート 42 Copyright © 2024, Oracle and/or its affiliates テキスト、base64エンコード文字列や Kubernetes Secretでの定義をする。 ”cloudinitConfigDrive”形式も利用できる。 この例では、公開鍵の登録を実施。 これにより、シームレスにSSH接続できる 対応させる

Slide 43

Slide 43 text

Containerized Data Importer(CDI) Containerized Data Importer(CDI) • DataVolume(=PVCをVMディスクとして利用可能にしたCR)を利用してVMイメージをインポート • ユースケースは主に以下 • ディスクイメージをWebサーバやコンテナレジストリからインポート • 既存のPVCをベースにVMクローンを作成 • ローカルディスクをDataVolumeにアップロード • CDIにはKubeVirtのコアコンポーネントとは別に別途OperatorとCRDのインストールが必要 43 Copyright © 2024, Oracle and/or its affiliates raw or qcow2形式

Slide 44

Slide 44 text

【補足】Containerized Data Importer(CDI)の利用 44 Copyright © 2024, Oracle and/or its affiliates 対応させる CDI=>定義はPVCと類似 Ubuntuイメージ

Slide 45

Slide 45 text

VMのクローン/エスクポート クローン(Feature Gate有効化必須) VirtualMachineClone(CR)を利用した作成 エクスポート/Snapshot (Feature Gate化有効必須) ※VirtualMachineExport(CR)を利用した作成もOK 45 Copyright © 2024, Oracle and/or its affiliates virtctl vmexport create vm1-export –vm=vm1 virtctl vmexport create snap1-export --snapshot=snap1 virtctl vmexport create pvc1-export --pvc=pvc1 現状はVirtualMachineと VirtualMachineSnapshotのみサポート。 将来的には他のリソースもサポート予定

Slide 46

Slide 46 text

ライブマイグレーション ライブマイグレーション=仮想マシンを稼働させたまま、別のホスト(Worker Node)に移動する ※VirtalMachineInstanceMigration(CR)を利用した作成も可 ※DataVolume(CDI)を利用する場合はStorageClass/PVCでReadWriteMany(RWX)のサポートが必須 サポートするライブマイグレーション戦略 1. (デフォルト) PreCopy => B/Gデプロイのイメージ • ターゲットVMを作成後にソースVMを実行したまま状態をコピーし、完了後にソース元を削除 2. Post-Copy => カナリアリリースのイメージ • ターゲットVMとソースVMを両方稼働させながら、データが存在するVMにアクセス • ソースVMの全てのデータをコピー完了後にソースVMを削除 3. Auto-Converge • 移行アルゴリズムは変えずに、VMのCPUリソースをスロットリングすることで移行スピードを上げる 46 Copyright © 2024, Oracle and/or its affiliates virtctl migrate vmi-fedora virtctl migrate-cancel vmi-fedora 対象はVMI 最もシンプルかつ制御しやすい

Slide 47

Slide 47 text

ホットプラグ ホットプラグ=VMをオンライン(in-place)の状態でデバイスやリソースを変更すること KubeVirtでは以下のリソースをホットプラグ(アンプラグ)できる • CPU/メモリ • ネットワーク • ストレージ ※今回はシンプルなCPU/メモリについて紹介 • 以下のFeature Gateを有効化 • LiveMigrate • VMLiveUpdateFeatures • “kubectl patch”コマンドでVMの”.spec.template.spec.domain.cpu(memory)”を変更 47 Copyright © 2024, Oracle and/or its affiliates kubectl patch vm test-vm --type='json’ -p='[{"op": "replace", "path": "/spec/template/spec/domain/cpu/sockets", "value": 5}]' kubectl patch vm vm-cirros --type='json' -p='[{"op": "replace", "path": "/spec/template/spec/domain/memory/guest", "value": "256Mi"}]'

Slide 48

Slide 48 text

DEMO Oracle Cloud Hangout Café – Season8 #5 48 Copyright © 2024, Oracle and/or its affiliates

Slide 49

Slide 49 text

実践!!KubeVirt VM構築編 • VMの共通設定(テンプレート) • NetworkPolicy • ネットワーク • ストレージ • ヘルスチェック VM操作編 • VMへのアクセス – SSH, VNC – • cloud-init • Containerized Data Importer(CDI) • VMのクローン/エスクポート • ライブマイグレーション • ホットプラグ 49 Copyright © 2024, Oracle and/or its affiliates

Slide 50

Slide 50 text

デモシナリオ 1. VMテンプレートを利用してVMリソースを作成(OKE) • 作成するVMはContainerized Data Importer(CDI)を利用してストレージ領域を作成し、ubuntuを プロビジョニング • 作成するVMはcloud-initにより、公開鍵情報を登録 • LoadBalancer経由でSSHアクセス 2. ライブマイグレーションをやってみる(minikube) 50 Copyright © 2024, Oracle and/or its affiliates OKEだと うまくいかなかったので。。。

Slide 51

Slide 51 text

まとめ Oracle Cloud Hangout Café – Season8 #5 51 Copyright © 2024, Oracle and/or its affiliates

Slide 52

Slide 52 text

まとめ KubeVirt • Kubernetes上でPodと同じようなインタフェースで制御できるVM管理の仕組みを提供 • VMのテンプレート機能、ホットプラグ/アンプラグやライブマイグレーションなどの従来のハイパー バイザーに劣らない機能を提供 • 従来のKVM/QEMUで出来ていたことは大体できそう(今後の開発も含めて) KubeVirtのユースケース • コンテナとVMを同じインタフェース、環境でデプロイできる • どうしてもコンテナ化できないワークロードを同じKubernetesクラスタで管理できる • スケジューリングやオートヒーリングなどのKubernetesのメリットを享受できる • (今日は紹介できなかったのですが)GitOpsなどのKubernetesエコシステムも享受できる KubeVirtを使えば、IaaS基盤を構築できることも夢じゃない…!? 52 Copyright © 2024, Oracle and/or its affiliates 昨今のPlatform Engineeringにも一役買うかも…!?

Slide 53

Slide 53 text

参考資料 KubeVirt公式レポジトリ&ドキュメント • https://kubevirt.io/ • https://github.com/kubevirt デモ • https://github.com/oracle-japan/ochacafe-kubevirt 書籍 • https://learning.oreilly.com/library/view/what-is-kubevirt/9781098133429/ 参考記事 • https://blog.inductor.me/entry/2023/07/14/143631 @inductorさん • https://techblog.yahoo.co.jp/entry/2020122430052973 @LINEヤフーさんTech Blog • https://rheb.hatenablog.com/archive/category/Red%20Hat%20OpenShift%20Virtualization @Red Hatさん 53 Copyright © 2024, Oracle and/or its affiliates

Slide 54

Slide 54 text

Thank you 54 Copyright © 2024, Oracle and/or its affiliates

Slide 55

Slide 55 text

No content