LoginSignup
2
3

KVM+NFSでライブマイグレーション環境を構築する

Last updated at Posted at 2023-11-05

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回は前回構築したKVM環境を拡張していきたいと思います。
KVMをもう1台作成し2台とし、さらにNFSを1台構築。ライブマイグレーション環境を作成していきたいと思います。
KVMを構築した記事は以下となります。

HWスペック

KVM

Processorsにhostがあることは私の環境ではマストになります。
image.png

NFS

こちら側はProcessorsにhostsという記載がなくても問題ありません。
image.png

環境イメージ

KVMのホスト(kvm01とkvm02)の/var/lib/libvirt/imagesをNFSの/home/kvm-nfsディレクトリにマウント。/var/lib/libvirt/imagesに作成されるファイルをKVM双方で共有します。
KVM間でVMが無停止で移動できるような環境を作ります。
kvm-ページ4.drawio (1).png

構築

NFSサーバ周りの設定を行う

以下のコマンドを実行してNFSサーバとして必要なアプリをインストールします。

root@kvm-nfs:~# apt update
root@kvm-nfs:~# apt upgrade -y
root@kvm-nfs:~# apt -y install nfs-kernel-server

/home/kvm-nfsをNFS用のディレクトリとして作成しエクスポートします。
エクスポート後、NFSをリスタートします。

root@kvm-nfs:~# cp -p /etc/exports /etc/exports.org
root@kvm-nfs:~# vi /etc/exports
root@kvm-nfs:~# cat /etc/exports
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
/home/kvm-nfs 192.168.2.0/24(rw,no_root_squash)
root@kvm-nfs:~# mkdir /home/kvm-nfs
root@kvm-nfs:~# cd /home/
root@kvm-nfs:/home# chmod 777 kvm-nfs
root@kvm-nfs:/home# exportfs -a
exportfs: /etc/exports [2]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.2.0/24:/home/kvm-nfs".
  Assuming default behaviour ('no_subtree_check').
  NOTE: this default has changed since nfs-utils version 1.0.x
root@kvm-nfs:~# systemctl restart nfs-server
root@kvm-nfs:~# systemctl enable nfs-server

KVM側でNFSのクライアントとなるためのアプリケーションをインストールします。またrootでssh出来るように設定を行います。

root@kvm02:~# apt install -y nfs-common
root@kvm02:~# passwd root
New password:
Retype new password:
passwd: password updated successfully
root@kvm02:~# vi /etc/ssh/sshd_config
root@kvm02:~# tail -n5 /etc/ssh/sshd_config
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server
permitRootLogin yes
root@kvm02:~# systemctl restart sshd

cockpitにログインします。
image (94).png
画面左のストレージタブを押下し、NFSマウントに表示されている+マークを押下します。
image (95).png
以下のように設定を入れて、追加するを押下します。
image (96).png
cockpitで以下のように表示されていればOKです。
image (97).png
コマンドからもマウントが出来ていることが確認できます。

root@kvm02:~# df -m
Filesystem                        1M-blocks  Used Available Use% Mounted on
tmpfs                                  2000     2      1999   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv     24015 14548      8222  64% /
tmpfs                                  9999     0      9999   0% /dev/shm
tmpfs                                     5     0         5   0% /run/lock
tmpfs                                  9999     0      9999   0% /run/qemu
/dev/sda2                              1946   129      1699   8% /boot
tmpfs                                  2000     1      2000   1% /run/user/1000
tmpfs                                  2000     1      2000   1% /run/user/0
192.168.2.110:/home/kvm-nfs           15011  2887     11340  21% /var/lib/libvirt/images

上記一連の流れをkvm01側でも実行します。
kvm01で本当にファイルが共有できているか確認します。test.txtをNFSにマウントした/var/lib/libvirt/images配下に作成します。

root@kvm01:~# cd /var/lib/libvirt/images
root@kvm01:/var/lib/libvirt/images# touch test.txt
root@kvm01:/var/lib/libvirt/images# ls
test.txt

NFS側でも上記で作成したファイルが確認できます。共有できていそうですね。

root@kvm-nfs:~# cd /home/kvm-nfs/
root@kvm-nfs:/home/kvm-nfs# ls
test.txt

CUIでライブマイグレーションを行う

/var/lib/libvirt/imagesにubuntuのISOをダウンロードします。

root@kvm01:~# cd /var/lib/libvirt/images
root@kvm01:/var/lib/libvirt/images# wget https://releases.ubuntu.com/22.04.1/ubuntu-22.04.1-live-server-amd64.iso
root@kvm01:/var/lib/libvirt/images# ls
test.txt  ubuntu-22.04.1-live-server-amd64.iso

これを使ってcockpit経由でVMを立ち上げます。
image (98).png
image (99).png
image (100).png
起動完了。sshも出来ることが確認できました。
image - 2023-11-05T151825.849.png
作成したVM用のqcow2が出来ていることも確認できます。

root@kvm01:/var/lib/libvirt/images# ls -ltr
total 5233528
-rw-r--r-- 1 libvirt-qemu kvm   1474873344 Aug  9  2022 ubuntu-22.04.1-live-server-amd64.iso
-rw-r--r-- 1 root         root           0 Nov  5 03:23 test.txt
-rw------- 1 libvirt-qemu kvm  10739318784 Nov  5 03:58 nfs-vm.qcow2

ライブマイグレーションを実行するためにKVMホスト双方の鍵を交換する必要があります。
kvm01側で以下を実行。鍵を作成し、kvm02へ共有しています。

root@kvm01:~# cd .ssh/
root@kvm01:~/.ssh# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):password
Enter same passphrase again:password
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:3yUMg1Wxr5UzNhzLB4Od2hvpLeF/3lKDYodNSU6ux9Q root@kvm01
The key's randomart image is:
+---[RSA 3072]----+
|          ..o.   |
|         o   * . |
|        . o B O  |
|           + % E |
|        S   @ ^ .|
|         . * # @.|
|          o * =.o|
|              .oo|
|               o=|
+----[SHA256]-----+
root@kvm01:~/.ssh# ssh-copy-id root@192.168.2.101
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.2.101 (192.168.2.101)' can't be established.
ED25519 key fingerprint is SHA256:n94qaYmKdNQISHZiZDQ4TbJGzyHKNKVWehHzgWi3EjE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.2.101's password:
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'root@192.168.2.101'"
and check to make sure that only the key(s) you wanted were added.

kvm02に鍵を渡せているかを確認するため実際に鍵を使ってsshしてみます。login出来ていればOKです。
これをkvm02側でも実行します。

root@kvm01:~/.ssh# ssh root@192.168.2.101
Enter passphrase for key '/root/.ssh/id_rsa':
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-88-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
  System information as of Sun Nov  5 04:06:32 AM UTC 2023
  System load:  0.16015625         Processes:               165
  Usage of /:   60.6% of 23.45GB   Users logged in:         0
  Memory usage: 1%                 IPv4 address for br0:    192.168.2.101
  Swap usage:   0%                 IPv4 address for virbr0: 192.168.122.1
 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.
   https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
Web console: https://kvm02:9090/ or https://192.168.2.101:9090/
Last login: Sat Nov  4 16:58:42 2023 from ::ffff:192.168.2.65

/root/.ssh/authorized_keysに先方のkvmホストの鍵が存在することを確認します。

root@kvm01:~/.ssh# cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCYq0MaWbhUANHQ4UZ8bzFZIyNm3boyM8rLUlmqX7XuT2HuU6C76f/U4NOx0cQux2o7/HBZpGPbEp2W33Dtb9NDSvvjg21jOeSCDtv2PCH+d0PL3GQnZY1Klnpimbj0Ox6li4yagRHD91OAI4nmUukq+02sguDaRuG4gVJIHCo7LePuiLOLF0VpSDe33T2f+rGj3QUwJ/9Ddan4nwEFWgqQVx+w2Yh1Z9ZhOaKGXGa2tZyPp5BoEre3uof+4hxcbJOUbQ5ZWSPW5zk7Mx1tzuuY62PWVAHtWHLCYYnUto7XWrMD4UqBHaXvHYxJGKDJJN892lDP/nzD0voOIZJnLgc3QaJPjYCjGfLqffu5JTvqkmQQYnphmJ2lWOowjPs9WaIfekxvGsZmmtDd9o4SXtRoQw0pcjnjDDizAMcZsb2qtjiLFm1XGBAWEr9P4h0F+ePgsw1GQL3iypS5bzqsXgW8rYE1OT2LpxjzInUr3mc/fACS/tiELZTEo6HD6uajs0U= root@kvm02

さらに、/etc/hostsを編集し名前解決を出来るようにします。NFSは名前解決できなくても問題ありませんので、今回は設定しておりません。この設定もKVMホスト双方で行います。

root@kvm01:~/.ssh# cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 kvm01
192.168.2.100 kvm02

※名前解決できるようにしておかないとライブマイグレーションを行う際に以下のようなエラーが出てしまいます。IPアドレスで指定しているんですけどね…

root@kvm02:~# virsh migrate --live nfs-vm qemu+ssh://192.168.2.100/system
Enter passphrase for key '/root/.ssh/id_rsa':
error: Unable to resolve address 'kvm01' service '49152': Name or service not known

さらに/etc/ssh/sshd_configのPasswordAuthenticationをyesに変更します。これもkvm双方で実施します。
※どっかの英語のサイトに書いていましたが、おそらくいらないです。

root@kvm01:~# vi /etc/ssh/sshd_config
root@kvm01:~# cat /etc/ssh/sshd_config | grep -i PasswordAuthentication
PasswordAuthentication yes
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication, then enable this but set PasswordAuthentication
root@kvm01:~# systemctl restart sshd

ここまで設定を入れたらCUIでライブマイグレーションを行っていきたいと思います。
virsh listの出力結果がmigrate以後出力されておりませんから、kvm01からkvm02に移動したことがわかります。

root@kvm01:~# virsh list
 Id   Name     State
------------------------
 13   nfs-vm   running
 
root@kvm01:~# virsh migrate --live nfs-vm qemu+ssh://192.168.2.101/system 
Enter passphrase for key '/root/.ssh/id_rsa':

root@kvm01:~# virsh list
 Id   Name   State
--------------------

kvm02でも同様に確認してみます。

root@kvm02:~# virsh list
 Id   Name     State
------------------------
 1    nfs-vm   running

root@kvm02:~# virsh migrate --live nfs-vm qemu+ssh://192.168.2.100/system
Enter passphrase for key '/root/.ssh/id_rsa':

root@kvm02:~# virsh list
 Id   Name   State
--------------------

GUIでもライブマイグレーションを行う

cockpitでもライブマイグレーションを行えるようにしたいと思います。
※結論から先に記載しますが、今の状態だと失敗しますので少し修正が必要です。
まずcockpitの左にあるホストが記載されているタブを押下して、新しいホストの追加を押下します。
image - 2023-11-05T152818.720.png
相手のホストのIPアドレスとユーザ名を入力し追加するを押下します。
image - 2023-11-05T152821.405.png
追加が出来ました。
image - 2023-11-05T152823.775.png
cockpitでライブマイグレーションを実行するためには仮想マシンからマイグレーションしたいVMの3点を選択し、移行を押下します。
image - 2023-11-05T153017.598.png
以下のような画面が表示されるので"qemu+ssh://192.168.2.101/system"と入力し、移行を押下します。
image - 2023-11-05T153020.011.png
すると以下のようなエラーが出てしまいます。
これはid_rsaを作成した際にパスフレーズを設定しまったことによります。ライブマイグレーション実行時、cockpitだとパスワードをCUIの時のように入力することができないためです。

Cannot recv data: Permission denied, please try again. Permission denied, please try again. root@192.168.2.101: Permission denied (publickey,password).: Connection reset by peer

これを解消するためにKVM双方で以下のコマンドを実行。パスフレーズを削除しました。

root@kvm01:~# ssh-keygen -p -f ~/.ssh/id_rsa
Enter old passphrase:
Key has comment 'root@kvm01'
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

改めてcockpit経由でライブマイグレーションを行います。
image - 2023-11-05T153451.915.png
image - 2023-11-05T153455.498.png
今度はエラーが出力されず画面からライブマイグレーションしたVMが消えていることがわかります。
image - 2023-11-05T153500.943.png
kvm02側で表示されています。cockpit経由のライブマイグレーションも行えました。
image - 2023-11-05T153504.077.png

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3