前回、Multipassを使って手元の環境でKubernetesを動かすという記事を書きました。
今回は作ったクラスターをログインせずに使えたら便利だよねという小ネタです。
Multipass VMにssh公開鍵認証
MultipassでVMを作るには次のような感じでコマンドを実行します。 イメージは指定しない場合、LTSタグが指定されたUbuntuイメージが使われます(現在はUbuntu 20.04LTS)。
% multipass launch -n foo
(基本のVM作成方法)
% multipass launch -c2 -m4G -d16G -n foo 20.04
(VMに任意のvCPU、メモリー、ストレージ、イメージを設定して起動)
現在のUbuntu Serverはデフォルトでcloud-initがインストールされているので、これを応用するとVMにsshコマンドを使って接続できます。これを設定する利点としてはVMへのファイルのやり取りがしやすくなるという点です。
実はこれ、launchコマンドを説明するドキュメントには載っていません。でも、上手く動きます。
% multipass launch -n foo --cloud-init - <<EOF ssh_authorized_keys: - $(cat ~/.ssh/id_rsa.pub) EOF
multipass launch
コマンドを実行してから数十秒程度待ってから、VMが起動したか確認してみます。問題なく起動したようです。
% multipass list Name State IPv4 Image foo Running 192.168.205.31 Ubuntu 20.04 LTS
ssh
コマンドを使って、VMにアクセスしてみましょう。デフォルトユーザーは他のクラウドイメージと同様、ubuntu
ユーザーです。
% ssh -i ~/.ssh/id_rsa ubuntu@192.168.205.31 ... Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.205.31' (ED25519) to the list of known hosts. Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.4.0-105-generic aarch64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Mar 29 16:41:09 JST 2022 System load: 0.28 Usage of /: 8.3% of 15.34GB Memory usage: 5% Swap usage: 0% Processes: 122 Users logged in: 0 IPv4 address for enp0s1: 192.168.205.31 IPv6 address for enp0s1: fd7e:8daa:f56:3f94:5054:ff:fe38:49c0 0 updates can be applied immediately. To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@foo:~$
Multipass VMでmicrok8sを動かしてホストでクラスタにアクセス
sshができるということは、scpコマンドなども利用できます。 前回のようにmicrok8sを動かしてkubeconfigをエクスポートし、ホストからアクセスしてみましょう。 次のように設定していきます。
% sudo snap install microk8s --classic --channel=1.22/stable % sudo microk8s enable rbac dns % sudo microk8s config > /home/ubuntu/microk8s-config
あとは出力したkubeconfigを手元にコピーするだけです。
% scp -i ~/.ssh/id_rsa ubuntu@192.168.205.31:~/microk8s-config /Users/ytooyama/Desktop/
コピーしたkubeconfigファイルを使って、クラスターにアクセスしてみましょう。
% kubectl get no --kubeconfig=/Users/ytooyama/Desktop/microk8s-config or % export KUBECONFIG=/Users/ytooyama/Desktop/microk8s-config:/Users/ytooyama/.kube/config % kubectl get no NAME STATUS ROLES AGE VERSION foo Ready <none> 11m v1.22.6-3+7e02437f65494f
このような感じです。
Multipass VMはコマンドを使って簡単に停止できますし、WindowsやmacOSの場合はMultipass VMの操作をGUIで行うツールがインストールされます。GUIを使うとMultipass VMの作成はできませんが、VMの停止や起動、シェルへのアクセスが可能になっています。
使う時だけ起動して、使わない時は停止しておけばマシンリソースの節約になります。まさにクラウドっぽい使い方で手元のマシンにVMを作成できるということです。あまり用件が厳しくないアプリを動かすのであれば、わざわざ仮想マシンソフトウェアを開いてVMを作成し、Ubuntuを手動でインストールなんてことをせずに、multipass launch
コマンドでVM環境が出来上がります。
Multipassは、入れておくと便利なツールです。