Slide 1

Slide 1 text

KubeVirt の Live Migration をやってみる Try KubeVirt's Live Migration on Nekko Cloud @cyokozai TechBull LT&交流会! #2 06.04.2025

Slide 2

Slide 2 text

井上 裕介 a.k.a cyokozai 千葉工業大学大学院 情報科学研究科 情報工学専攻 修士1年 ❏ ネットワークコンテンツ研究会 Nekko Cloud Team ❏ 株式会社スリーシェイク sreake事業部 学生インターン 沖縄行ってきた〜🌺⛱ 飯うまい!人優しい!暖かい! 社会人になったら引っ越そうかな

Slide 3

Slide 3 text

目次 ● Nekko Cloud について ● KubeVirt への期待 ● マイグレーション ● KubeVirt Live Migration ● まとめと感想

Slide 4

Slide 4 text

Nekko Cloud について

Slide 5

Slide 5 text

自称「マルチリージョンプライベートクラウド」 「メンバーの自宅サーバーを VPN で繋いで プライベートクラウドを作ろう!」というチーム ←詳しくはこちら↓

Slide 6

Slide 6 text

←詳しくはこちら↓ KubeVirt に関するLT in CloudNative Days Summer 2025 次世代基盤を k8s だけで構築したい!

Slide 7

Slide 7 text

KubeVirt への期待

Slide 8

Slide 8 text

我々のプライベートクラウドの要件 dev 環境: メンバーが自由に開発・検証に使える開発環境 prod 環境: サークル内外で利用するサービスを動かす IaaS と PaaS の立場を逆転させる ● Kubernetes と Proxmox VE 両方の管理を行う負担 ● Kubernetes の管理下で VM を動かす! ● ベアメタル Kubernetes を中心に *aaS を構築 https://kubevirt.io/ https://kubevirt.io/user-guide/architecture/

Slide 9

Slide 9 text

やってみたいこと IaaS, PaaS を kubernetes 上で運用しよう!

Slide 10

Slide 10 text

マイグレーション

Slide 11

Slide 11 text

今回やってみたいこと KubeVirt でマルチリージョン間の ライブマイグレーションは可能か?

Slide 12

Slide 12 text

ライブマイグレーション ● Node 01 をメンテナンスのため停止する ● メンテ中でも VM は使いたいので別のマシン (Node 02) へ移動する

Slide 13

Slide 13 text

ライブマイグレーション ● VM を Node 01 から Node 02 へライブマイグレーションする ● ライブマイグレーション中でも VM は使用可能

Slide 14

Slide 14 text

ライブマイグレーション ● Node 02 で VM が起動 ● ユーザ側のダウンタイム 0 で VM を移動することができた

Slide 15

Slide 15 text

KubeVirt Live Migration

Slide 16

Slide 16 text

KubeVirt のライブマイグレーション HTTP リクエスト Migration実行

Slide 17

Slide 17 text

Kubernetes on Proxmox VE 検証クラスタ

Slide 18

Slide 18 text

ソフトウェア バージョン 概要 Proxmox VE 8.3.3 Nekko Cloud IaaS 基盤 Ubuntu 22.04 node1, node2, node3 on PVE kubectl CLI 1.33.0 ローカルで実行 KubeVirt CRD 1.5.1 ローカルで実行 ハードウェア バージョン 概要 Mac Book Air M3 macOS Sequoia 15.4.1 arm64 kubectl 実行端末 node1, node2, node3 Ubuntu 22.04 検証環境

Slide 19

Slide 19 text

ConfigMapの作成 ● kubevirt Namespace に ConfigMap を作成 ❯ kubectl apply -f - <

Slide 20

Slide 20 text

VMの作成・起動 ● VM のデプロイ → 起動 ❯ kubectl apply -f ./vms/ubuntu2204.yaml virtualmachine.kubevirt.io/ubuntu2204 created ❯ kubectl get vm NAME AGE STATUS READY ubuntu2204 15m Stopped False ❯ kubectl virt start ubuntu2204 VM ubuntu2204 was scheduled to start ❯ kubectl get vms NAME AGE STATUS READY ubuntu2204 3h34m Running True ❯ kubectl get vmi NAME AGE PHASE IP NODENAME READY ubuntu2204 6h46m Running 10.xxx.xxx.xxx node2 True node2 にデプロイされた

Slide 21

Slide 21 text

VM への接続 ❯ kubectl virt console ubuntu2204 Successfully connected to ubuntu2204 console. The escape sequence is ^] Ubuntu 22.04.5 LTS ubuntu ttyS0 nc-template/ubuntu v0.1.0 ▓▓▓▓ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒▒ ▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒ ▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒ ▓▓▓▓▓▓▓▓▓▒▒▒▒▒▒▒ █▓▓▓▓▓▓▓▓▓▓▓▒▒▒▒ ████▓▓▓▓▓▓▓▓▒▒▒▒ ██████▓▓▓▓▓▓▓▓ ubuntu login: admin Password: password Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-139-generic x86_64) ~~~ ncadmin@ubuntu:~$

Slide 22

Slide 22 text

VM への接続 ● VM の port 8080 をリッスン状態にする $ while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Live Migration ..." ) | nc -l -p 8080; done & ● 別のターミナルを開き、VM に HTTP リクエストを送信 ❯ export HOST_IP=$(kubectl get vmi ubuntu2204 -o jsonpath='{.status.interfaces[0].ipAddress}') ❯ export PORT=$(kubectl get svc ubuntu2204-http -o jsonpath='{.spec.ports[0].nodePort}') ❯ curl ${HOST_IP}:${PORT} ● port 22, 8080 の NodePort を開放 ❯ kubectl virt expose vmi ubuntu2204 --name=ubuntu2204-http --port=22 --type=NodePort ❯ kubectl virt expose vmi ubuntu2204 --name=ubuntu2204-http --port=8080 --type=NodePort

Slide 23

Slide 23 text

❯ kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES virt-launcher-ubuntu2204-2lk29 3/3 Running 0 25m 10.233.71.13 node3 1/1 virt-launcher-ubuntu2204-sgj6x 0/3 Completed 0 29m 10.233.75.13 node2 1/1 ライブマイグレーション ● Live Migration を実行 ● VM インスタンスを確認 ❯ kubectl get vmi -o wide NAME AGE PHASE IP NODENAME READY LIVE-MIGRATABLE PAUSED ubuntu2204 23m Running 10.233.71.13 node3 True True node3 に移動した🙌 ● 実行中の様子を確認 ❯ kubectl virt migrate ubuntu2204

Slide 24

Slide 24 text

まとめと感想

Slide 25

Slide 25 text

まとめ ● node2 で VM 作成 → node2 から node3 へ VM を移動 ● kubectl 3ステップで手軽にタスクの実行 ● 実行中も問題なく HTTP レスポンスが返ってきた ● マニフェストでタスクの内容を詳細に定義することも可能

Slide 26

Slide 26 text

感想 ● VM をマニフェストに書いて管理できる手軽さ ● VM の一連の操作が kubectl で完結するのアツい ● CI/CD や IaC との相性も良い🙆

Slide 27

Slide 27 text

感想 ● VM をマニフェストに書いて管理できる手軽さ ● VM の一連の操作が kubectl で完結するのアツい ● CI/CD や IaC との相性も良い🙆 イベント締め切り開発駆動、やめよう!

Slide 28

Slide 28 text

プライベートクラウド次世代基盤、出来るかな? 学生が作る

Slide 29

Slide 29 text

ありがとうございました