この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、菊池です。
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が作成できました。