Upgrade to Pro — share decks privately, control downloads, hide ads and more …

KubeVirt の Live Migration をやってみる | Try KubeVirt...

Avatar for cyokozai cyokozai
June 05, 2025
290

KubeVirt の Live Migration をやってみる | Try KubeVirt's Live Migration on Nekko Cloud

TechBull LT&交流会! #2
ネットワークコンテンツ研究会が開発・運用する学生マルチリージョンプライベートクラウド Nekko Cloud。
その次世代基盤として、KubeVirt を活用したプライベートクラウド構築の取り組みを紹介しています。
今回は技術調査として、物理的に離れた2拠点間のノード上で VM インスタンスの Live Migration を行います。

Avatar for cyokozai

cyokozai

June 05, 2025
Tweet

Transcript

  1. KubeVirt の Live Migration をやってみる Try KubeVirt's Live Migration on

    Nekko Cloud @cyokozai TechBull LT&交流会! #2 06.04.2025
  2. 井上 裕介 a.k.a cyokozai 千葉工業大学大学院 情報科学研究科 情報工学専攻 修士1年 ❏ ネットワークコンテンツ研究会

    Nekko Cloud Team ❏ 株式会社スリーシェイク sreake事業部 学生インターン 沖縄行ってきた〜🌺⛱ 飯うまい!人優しい!暖かい! 社会人になったら引っ越そうかな
  3. 我々のプライベートクラウドの要件 dev 環境: メンバーが自由に開発・検証に使える開発環境 prod 環境: サークル内外で利用するサービスを動かす IaaS と PaaS

    の立場を逆転させる • Kubernetes と Proxmox VE 両方の管理を行う負担 • Kubernetes の管理下で VM を動かす! • ベアメタル Kubernetes を中心に *aaS を構築 https://kubevirt.io/ https://kubevirt.io/user-guide/architecture/
  4. ソフトウェア バージョン 概要 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 検証環境
  5. ConfigMapの作成 • kubevirt Namespace に ConfigMap を作成 ❯ kubectl apply

    -f - <<EOF apiVersion: v1 kind: ConfigMap metadata: name: kubevirt-config namespace: kubevirt labels: kubevirt.io: "" data: feature-gates: "LiveMigration" EOF
  6. 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 にデプロイされた
  7. 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:~$
  8. 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
  9. ❯ 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 <none> 1/1 virt-launcher-ubuntu2204-sgj6x 0/3 Completed 0 29m 10.233.75.13 node2 <none> 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
  10. まとめ • node2 で VM 作成 → node2 から node3

    へ VM を移動 • kubectl 3ステップで手軽にタスクの実行 • 実行中も問題なく HTTP レスポンスが返ってきた • マニフェストでタスクの内容を詳細に定義することも可能
  11. 感想 • VM をマニフェストに書いて管理できる手軽さ • VM の一連の操作が kubectl で完結するのアツい •

    CI/CD や IaC との相性も良い🙆 イベント締め切り開発駆動、やめよう!