paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

Home labのステージング環境をmultipassで作成する

自宅で作っているツール類でGithubとかに公開したくないもの(家計簿系)をどうするかなあと考えていたのですが、今更ローカルにGitlabか何か立てればいいじゃんと思い立ちました。

プライベートリポジトリでいいじゃんという話は置いておいて、気軽に使える環境あってもいいかなと思って自宅ラボにも1つ作ることにしました。

ラボのDocker swarmにデプロイすれば終わりの話ですが、まずは本番稼働前にステージング環境で試さないといけません。

Dockerのステージング環境をどうするか

Docker swarm環境をもう1つほしいところですがラボは省スペースPCなのでリソースが潤沢にあるわけではありません。

案としては

  1. Docker swarmにステージング用のNWを作ってそこで動かす
  2. 別の筐体にスタンドアロンDockerを立てる

くらいでしょうか。

ステージング環境もクラスタで動かしたいので案1としたいところですが、本番と同じyamlファイルを使うべきと考えますので案2の1台でswarmを動かしてステージング環境としたいと思います。

ちょうど最近NUCをサブ機デスクトップとしてお迎えしたのでこの機器で稼働させます。

仮想環境としてmultipassを使ってみる

サブ機はUbuntuを使っていて直にインストールしてもいいのですが別の検証用にmicrok8sを入れてしまったのでこれ以上環境を汚したくありません。

なので仮想環境上に作ろうと思います。 先代サブ機ではKVMを使っていましたがmultipassなる管理ツールがあるので今回はこちらの検証も兼ねつつ作成したいと思います。

multipassインストール

ドキュメント通りにインストール。

❯ sudo snap install multipass
[sudo] masashi のパスワード: 
multipass 1.12.2 from Canonical✓ installed

これでOK。

ゲスト作成

OS問わず同じコマンドで仮想環境を管理できるツールなのですが、イメージがUbuntuのみだそうです。
私は普段から使っていますので特に問題はありません。
CLIで仮想環境を管理するとなるとVagrantとかの類ということですね。

ゲストを作成します。

❯ multipass launch --name dev-lab
Launched: dev-lab

❯ multipass list
Name                    State             IPv4             Image
dev-lab                 Running           10.153.193.26    Ubuntu 22.04 LTS

❯ multipass exec dev-lab -- lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 22.04.3 LTS
Release:    22.04
Codename:   jammy


❯ multipass info dev-lab
Name:           dev-lab
State:          Running
IPv4:           10.153.193.26
Release:        Ubuntu 22.04.3 LTS
Image hash:     5bed3f233c24 (Ubuntu 22.04 LTS)
CPU(s):         1
Load:           0.01 0.18 0.12
Disk usage:     1.4GiB out of 4.8GiB
Memory usage:   158.7MiB out of 951.9MiB
Mounts:         --

リソース指定もできるのですがデフォルトだと1CPU、メモリ1G、ディスク5Gですね。

LXDの様な使い勝手と聞いていましたがコマンドがまさにまんまですね。
昔はLXD使っていたので楽勝です。

Dockerインストール

仮想マシンに入ってインストール。 ラボとバージョンを合わせるため使用中のバージョンを探して指定します。

これでリポジトリ内のインストールできるバージョンを探して、

sudo apt-cache policy docker-ce
sudo apt-cache policy docker-ce-cli
sudo apt-cache policy containerd.io
sudo apt-cache policy docker-buildx-plugin
sudo apt-cache policy docker-compose-plugin

バージョン指定でインストール。

ubuntu@dev-lab:~$ sudo apt-get install docker-ce=5:23.0.5-1~ubuntu.22.04~jammy docker-ce-cli=5:23.0.5-1~ubuntu.22.04~jammy containerd.io=1.6.20-1 docker-buildx-plugin=0.10.4-1~ubuntu.22.04~jammy docker-compose-plugin=2.17.3-1~ubuntu.22.04~jammy

準備OKです。

ubuntu@dev-lab:~$ docker version
Client: Docker Engine - Community
 Version:           23.0.5
 API version:       1.42
 Go version:        go1.19.8
 Git commit:        bc4487a
 Built:             Wed Apr 26 16:21:07 2023
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          23.0.5
  API version:      1.42 (minimum version 1.12)
  Go version:       go1.19.8
  Git commit:       94d3ad6
  Built:            Wed Apr 26 16:21:07 2023
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.20
  GitCommit:        2806fc1057397dbaeefbea0e4e17bddfbd388f38
 runc:
  Version:          1.1.5
  GitCommit:        v1.1.5-0-gf19387a
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

シングルですがswarmを有効化。

ubuntu@dev-lab:~$ docker swarm init
Swarm initialized: current node (znqyqxen2v6xibh0zhjm44qb1) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3xgnkwpu6yww50hr5cqrn30kxe7fpmr19uxjv4uxpgci152e13-6jhfcbh93zbs4sgpwguxc6l6a 10.153.193.26:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

ubuntu@dev-lab:~$ docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
znqyqxen2v6xibh0zhjm44qb1 *   dev-lab    Ready     Active         Leader           23.0.5

これで一応同じ環境ができました。

まとめ

とりあえず今回はここまでにします。
ただの仮想環境を作っただけなのであまりコメントすることはないですね。
次回Git系ツールをデプロイしたいと思います。

これに絡んだ話でcloud-initというVM作成時にパッケージインストール等行ってくれるツールがあるのですが、multipassと合わせて実行するという合わせ技がありました。
VMを複製せずともコンテナの様に同じ環境の仮想マシンがボンボンと作れるということですね。
ありがたいことにもう何でも自動化の世界です。
cloud-initもいつか試したい。

ラボ

My kickass home labを構築しました - paloma blog