[Azure] ローカル Hyper-V の Linux 仮想マシンから Linux VM を作成する
こんにちは、菊池です。
Azureの勉強をかねて、ローカルのHyper-V上で作成したCentOS7の仮想マシンを、Azureにインポートして VM作成するまでを試してみました。
ローカル Hyper-V の Linux 仮想マシンから Linux VM を作成
それでは実際にやっていきます。移行元となる環境は以下の通りです。
- 仮想マシン:CentOS Linux release 7.8.2003
- ホスト:Windows 10 Professional
OSの設定
まずは、インポートするCentOS上で、事前準備のための設定を実施していきます。
/etc/sysconfig/networkを以下のように編集します。
$ sudo cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=localhost.localdomain
/etc/sysconfig/network-scripts/ifcfg-eth0
を編集します。DHCPが有効、IPv6の無効であることを確認しましょう。
$ sudo cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="no" NAME="eth0" DEVICE="eth0" ONBOOT="yes" PEERDNS="yes" PEERROUTES="yes" USERCTL="no" NM_CONTROLLED="no"
udev ルールを編集して、イーサネット インターフェイスの静的ルールが生成されないようにします。
$ sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
Azure内でホストされるリポジトリを利用するように、/etc/yum.repos.d/CentOS-Base.repo
を以下のように書き換えます。
$ sudo cat /etc/yum.repos.d/CentOS-Base.repo [openlogic] name=CentOS-$releasever - openlogic packages for $basearch baseurl=http://olcentgbl.trafficmanager.net/openlogic/$releasever/openlogic/$basearch/ enabled=1 gpgcheck=0 [base] name=CentOS-$releasever - Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful [extras] name=CentOS-$releasever - Extras #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/extras/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra baseurl=http://olcentgbl.trafficmanager.net/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
yumメタデータをクリアし、最新のパッケージに更新しておきます。
$ sudo yum clean all $ sudo yum update
Azureの追加のカーネルパラメータを含むように編集します。
$ sudo cat /etc/default/grub GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="rootdelay=300 console=ttyS0 earlyprintk=ttyS0 net.ifnames=0" GRUB_DISABLE_RECOVERY="true"
GRUB構成をリビルドしておきましょう。
$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-1127.10.1.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1127.10.1.el7.x86_64.img Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-06562123303d48a1b233ed071cd4d4ba Found initrd image: /boot/initramfs-0-rescue-06562123303d48a1b233ed071cd4d4ba.img done
Azure Linux エージェントをインストールし、自動起動を設定しておきます。
$ sudo yum install python-pyasn1 WALinuxAgent $ sudo systemctl enable waagent
スワップ領域を以下のように編集しておきます。
$ grep ResourceDisk /etc/waagent.conf ResourceDisk.Format=y ResourceDisk.Filesystem=ext4 ResourceDisk.MountPoint=/mnt/resource ResourceDisk.EnableSwap=y ResourceDisk.SwapSizeMB=2048 ## NOTE: set this to whatever you need it to be. ResourceDisk.MountOptions=None
仮想マシンをプロビジョニング解除し、Azure でのプロビジョニング用に準備します。
sudo waagent -force -deprovision export HISTSIZE=0 logout
以上でOSの準備は完了です。ここまでできたら、仮想マシンをシャットダウンしておきます。
VHDXをVHDへの変換
利用可能な仮想ディスクは、容量固定のVHD形式となります。元の仮想マシンは容量可変のVHDX形式だったため、Hyper-Vマネージャにてディスク形式を変換します。
Hyper-Vマネージャの右のメニューから、[仮想ディスクの編集] を選択します。
仮想ハードディスクの変換ウィザードが立ち上がりますので、先に進みます。
変換対象のディスクを選択して次へ。
操作は [変換] を選びます。
VHDへの変換を選択。
こちらも[容量固定] を選びます。
変換後のVHDの出力先/ファイル名を選んで、実行します。
しばらくすると、変換が完了します。
VHDのインポート
作成できたVHDを、Azureにアップロードします。事前準備として、以下の2つのツールをインストールして利用可能にしておきましょう。
まずは az disk create
で空のマネージドディスクを作成します。
$ az disk create -n centos7disk -g test -l japaneast --for-upload --upload-size-bytes 32212255232 --sku standard_lrs {- Finished .. "creationData": { "createOption": "Upload", "galleryImageReference": null, "imageReference": null, "sourceResourceId": null, "sourceUniqueId": null, "sourceUri": null, "storageAccountId": null, "uploadSizeBytes": 32212255232 }, "diskIopsReadOnly": null, "diskIopsReadWrite": 500, "diskMbpsReadOnly": null, "diskMbpsReadWrite": 60, "diskSizeBytes": null, "diskSizeGb": null, "diskState": "ReadyToUpload", "encryption": { "diskEncryptionSetId": null, "type": "EncryptionAtRestWithPlatformKey" }, "encryptionSettingsCollection": null, "hyperVgeneration": "V1", "id": "/subscriptions/89670823-7dcf-4a9b-9b0c-xxxxxxxxxxxx/resourceGroups/test/providers/Microsoft.Compute/disks/centos7disk", "location": "japaneast", "managedBy": null, "managedByExtended": null, "maxShares": null, "name": "centos7disk", "osType": null, "provisioningState": "Succeeded", "resourceGroup": "test", "shareInfo": null, "sku": { "name": "Standard_LRS", "tier": "Standard" }, "tags": {}, "timeCreated": "2020-06-04T04:17:10.440374+00:00", "type": "Microsoft.Compute/disks", "uniqueId": "6cdc3cc5-1745-4c96-9674-da4535772bcf", "zones": null }
Azureポータルを確認すると、マネージドディスクが作成されていることがわかります。
続いて、このマネージドディスクにSAS(Shared Access Signatures)を作成して、アクセス可能にします。
$ az disk grant-access -n centos7disk -g test --access-level Write --duration-in-seconds 86400 {- Finished .. "accessSas": "https://md-impexp-xxxxxxxxxxxx.blob.core.windows.net/xxxxxxxxxxxx/abcd?sv=2017-04-17&sr=b&si=3b11230c-a077-4615-b44e-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
作成されたSASを利用し、AzCopyでVHDのアップロードを実行します。
$ ./azcopy copy "~/centos7.vhd" "https://md-impexp-xxxxxxxxxxxx.blob.core.windows.net/xxxxxxxxxxxx/abcd?sv=2017-04-17&sr=b&si=3b11230c-a077-4615-b44e-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" --blob-type PageBlob INFO: Scanning... INFO: Any empty folders will not be processed, because source and/or destination doesn't have full folder support Job ca8aafb6-6df2-e142-46fb-29a21398c218 has started Log file is located at: /Users/kikuchi.shuji/.azcopy/ca8aafb6-6df2-e142-46fb-29a21398c218.log 100.0 %, 0 Done, 0 Failed, 1 Pending, 0 Skipped, 1 Total, 2-sec Throughput (Mb/s): 73.518 Job ca8aafb6-6df2-e142-46fb-29a21398c218 summary Elapsed Time (Minutes): 0.5342 Number of File Transfers: 1 Number of Folder Property Transfers: 0 Total Number of Transfers: 1 Number of Transfers Completed: 1 Number of Transfers Failed: 0 Number of Transfers Skipped: 0 TotalBytesTransferred: 32212255232 Final Job Status: Completed
アップロード完了です。生成したSASを無効化しておきます。
$ az disk revoke-access -n centos7disk -g test
ここでマネージドディスク を確認すると、30GBのディスクが生成されていることがわかります。
VMの作成
アップロードしたVHDを使って、仮想マシンを起動します。Azure CLIで以下のように実行します。
$ az vm create \ --resource-group test \ --name ImportedVM \ --os-type linux \ --size Standard_B2s \ --vnet-name test-vnet \ --subnet test-subnet1 \ --public-ip-address "" \ --attach-os-disk centos7disk {- Finished .. "fqdns": "", "id": "/subscriptions/89670823-7dcf-4a9b-9b0c-xxxxxxxxxxxx/resourceGroups/test/providers/Microsoft.Compute/virtualMachines/ImportedVM", "location": "japaneast", "macAddress": "00-0D-3A-CD-8E-38", "powerState": "VM running", "privateIpAddress": "172.16.0.5", "publicIpAddress": "", "resourceGroup": "test", "zones": "" }
起動できました。Azureポータルからも、VMが起動しているのが確認できます。
SSHで接続してみます。VnetにはVPNで接続してありますので、プライベートIPで直接接続できます。
$ ssh 172.16.0.5 The authenticity of host '172.16.0.5 (172.16.0.5)' can't be established. ECDSA key fingerprint is SHA256:QarstG9qFnjMtIjMw1ORfKsiMBvtGytOMTiFrlbssps. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '172.16.0.5' (ECDSA) to the list of known hosts. skikuchi@172.16.0.5's password: Last login: Thu Jun 4 08:36:55 2020 from 10.212.134.200 $
特に問題なく、インポートしたVMに接続できることが確認できました!
まとめ
公式のドキュメントの手順にしたがって進めていくことで、特に迷ったりトラブルが発生することもなく、ローカルのHyper-Vの仮想マシンからAzure上のLinux VMが作成できました。