Multipass を使った仮想環境構築

プロフィール画像

ykatsuno

2024年07月03日

リ�ンクをコピーXでシェアするfacebookでシェアする

※当記事は2024年1月に執筆した記事で、情報は当時のものになります。

はじめに

みなさん IaC やってますでしょうか?
IaCとは何ぞやという方は Chat GPTくんが教えてくれましたので、参考にしてください。

IaCとは、Infrastructure as Codeの略称で、インフラストラクチャーをコードで管理することです。コードで定義されたインフラストラクチャーを自動化することで、効率的な運用が可能になります。これにより、手動作業によるヒューマンエラーを削減し、セキュリティや信頼性の向上が期待できます。

Chat GPT

IaC を実現するツールは色々とありますが、今入っている案件では Ansible を使ってサーバ内の設定やミドルウェアの管理を行なっています。

そのため設定変更や新しくミドルウェアを入れる場合、Playbook を更新する必要があります。
この際、冪等性を検証したい、新しく使うモジュールをちょっと試したいといったことがあります。
ただ開発チームやビジネスチームが触りうる検証環境では気軽に試せないため、まずはローカル端末に仮想環境を立てて Ansible を検証するようにしています。

ここではローカル端末に仮想環境を立てる際に利用している Multipass について紹介します。

Multipassとは

MultipassOpen in new tab は Ubuntu を支援している Canonical 社が提供しているVM管理ソフトになります。
詳細な使い方は公式ドキュメントOpen in new tabを確認してください。

概要

  • CLI のみのインターフェイスで気軽に Ubuntu の仮想環境を作成可能
  • cloud-init にも対応しているためクラウド環境でサーバを立てたりする際の実験台としても利用可能
  • ただし利用できる OS は Ubuntu のみ
    • CentOS や他の OS を使いたい場合は VagrantOpen in new tab などが選択肢になると思います

インストール手順

Mac の場合は brew でサクッとインストールできます。

$ brew install multipass

仮想環境を作ってみる

ここでは Multipass による仮想環境を扱うにあたり、最低限のコマンドを紹介します。

イメージの確認

  • multipass find で利用可能な Ubuntu イメージを確認
$ multipass find
Image                       Aliases           Version          Description
20.04                       focal             20231129         Ubuntu 20.04 LTS
22.04                       jammy,lts         20231211         Ubuntu 22.04 LTS
23.04                       lunar             20231205         Ubuntu 23.04

Blueprint                   Aliases           Version          Description
anbox-cloud-appliance                         latest           Anbox Cloud Appliance
charm-dev                                     latest           A development and testing environment for charmers
docker                                        0.4              A Docker environment with Portainer and related tools
jellyfin                                      latest           Jellyfin is a Free Software Media System that puts you in control of managing and streaming your media.
minikube                                      latest           minikube is local Kubernetes
ros-noetic                                    0.1              A development and testing environment for ROS Noetic.
ros2-humble                                   0.1              A development and testing environment for ROS 2 Humble.

仮想環境の作成

  • multipass launch で仮想環境を作成
    • オプションでメモリなどを設定可能
    • デフォルトだと LTS のイメージが使われる
    • 設定できる内容は multipass launch -h を見ればOK
$ multipass launch --name test --cpus 2 --memory 3G --disk 5G

仮想環境を確認

  • multipass ls で仮想環境の状況を確認
  • multipass info ${name} とすることで詳細も確認可能
$ multipass ls
Name                    State             IPv4             Image
test                    Running           192.168.64.3     Ubuntu 22.04 LTS

$ multipass info test
Name:           test
State:          Running
IPv4:           192.168.64.3
Release:        Ubuntu 22.04.3 LTS
Image hash:     f885a8e8f62a (Ubuntu 22.04 LTS)
CPU(s):         2
Load:           0.31 0.14 0.05
Disk usage:     1.4GiB out of 4.8GiB
Memory usage:   148.1MiB out of 2.9GiB
Mounts:         --

アクセスする

  • 普通に作成すると ubuntu ユーザーが作成されており、multipass shell ${name} でアクセス可能
  • 鍵を配置すればその鍵を使って SSH することもできます
$ multipass shell test
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-91-generic aarch64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Fri Dec 15 14:09:26 JST 2023

  System load:             0.037109375
  Usage of /:              30.1% of 4.68GB
  Memory usage:            6%
  Swap usage:              0%
  Processes:               95
  Users logged in:         0
  IPv4 address for enp0s1: 192.168.64.3
  IPv6 address for enp0s1: fd90:17d1:1711:a077:5054:ff:feab:4841


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


To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ubuntu@test:~$

仮想環境の停止と再開

  • multipass stop ${name} で停止
  • multipass start ${name} で再開
$ multipass stop test

$ multipass ls
#=> State が Stopped に
Name                    State             IPv4             Image
test                    Stopped           --               Ubuntu 22.04 LTS

$ multipass start test

$ multipass ls
#=> State が Running に
Name                    State             IPv4             Image
test                    Running           192.168.64.3     Ubuntu 22.04 LTS

リソース変更

  • 作成した仮想環境で後からメモリやボリュームを変更したい場合は multipass set を使う
# まずは停止
$ multipass stop test

# リソースの変更
$ multipass set local.test.cpus=4

$ multipass set local.test.disk=10G

$ multipass set local.test.memory=6G

# 再起動
$ multipass start test

$ multipass info test
Name:           test
State:          Running
IPv4:           192.168.64.3
Release:        Ubuntu 22.04.3 LTS
Image hash:     f885a8e8f62a (Ubuntu 22.04 LTS)
CPU(s):         4
Load:           0.07 0.03 0.01
Disk usage:     1.4GiB out of 9.6GiB
Memory usage:   149.3MiB out of 5.8GiB
Mounts:         --

仮想環境の削除

  • multipass delete ${name} で削除対象となる
    • ゴミ箱に入れるようなイメージ
  • multipass recover ${name} で削除対象から復元
    • ゴミ箱から戻すようなイメージ
  • multipass purge で削除対象を完全に削除
    • ゴミ箱を空にするようなイメージ
$ multipass delete test

$ multipass ls
#=> State が Deleted に
Name                    State             IPv4             Image
test                    Deleted           --               Not Available

$ multipass recover test

$ multipass ls
#=> State が Stopped に
Name                    State             IPv4             Image
test                    Stopped           --               Ubuntu 22.04 LTS

$ multipass delete test

$ multipass purge
#=> State が Deleted のものが完全削除

$ multipass ls
No instances found.

おわりに

Ubuntu の仮想環境を気軽に立てることのできる Multipass を紹介しました。
自分は Ansible の検証用途で使うことが多いですが、他にも利用用途はたくさんあるかと思います。
例えば Linux に慣れていない方はコマンドの練習をしてみたり、皆が使うサーバで操作する前に壊しても良い環境で検証をしてみたりなどなど...
Docker などによるコンテナ活用も便利ですが、用途によってはVM活用も視野に入れつつ楽しい仮想環境ライフを送っていきましょう。

この記事を書いた人

ykatsuno
ykatsuno
2020年に大手SIerに新卒入社。AI精度改善やWebアプリ開発/運用などに従事。2023年にメンバーズに入社後はクライアント先でSREとしてプロダクトの信頼性向上に向けた取り組みを行っている。
ページトップへ戻る