hyperkitがdeprecateになったからqemuにしてみたら、どっかんどっかん落ちる。
クラスタは動くけど、minikube cp
とかdocker load
とかディスクの読み書きを重めにしたときによく落ちる。
なんやねん、使いものにならんなぁ。やり方悪いんかなぁ。
しゃあないからqemuやめてmicrok8sやってみる。
ubuntuを提供してるcanonicalのプロダクトなんやな。
稼働のイメージ
GWすぎてlocalとGCEのlinuxはubuntu22から24に切り替えた。xrdpのコンテナもおんなじ。
今回はminikube動いてた⭐️印の箇所をmicrok8sに変えて、hyperkitがmultipassに換わる。
もちろんクラスタとPod類は作り直して、永続化領域はバックアップ取ったものを展開しなおす。
+-mac--------------------------+
| +-microk8s-------+ |
| | ⭐️ | |
| +----------------+ |
| +-multipass-containerd-----+ |
| | +-container-+ ⭐️| |
| | | kubernetes| | | +-local ubuntu24 linux--------+ +-GCE ubuntu24 linux----------+
| | +-----------+ +-/data-+ | | | +-docker---------+ +-vmdk-+ | | +-docker---------+ +--pv--+ |
| | +-container-+ | | | | | | +-container-+ | | data | | | | +-container-+ | | data | |
| | | Django | | d1 | | | | | | Django | | | d1 | | | | | Django | | | d1 | |
| | +-----------+ +-------+ | | | | +-----------+ | +------+ | | | +-----------+ | +------+ |
| | +-container-+ | | | | | | +-container-+ | | | | | | +-container-+ | | | |
| | | mariadb | | d2 | | | | | | mariadb | | | d2 | | | | | mariadb | | | d2 | |
| | +-----------+ +-------+ | | | | +-----------+ | +------+ | | | +-----------+ | +------+ |
| | +-container-+ | | | | | | +-container-+ | | | | | | +-container-+ | | | |
| | | xrdp-ubu24| | d3 | | | <- | | | xrdp-ubu24| | | d3 | | <- | | | xrdp-ubu24| | | d3 | |
| | +-----------+ +-------+ | | <- | | +-----------+ | +------+ | <- | | +-----------+ | +------+ |
| | | | <- | | | | <- | | +-container-+ | |
| | +-------+ | | | | | | | | | gitlab | | |
| | | micro | | | | | | | | | +-----------+ | |
| | +-container-+ | k8s | | | | | +-container-+ | | | | +-container-+ | |
| | | https | | Ubuntu| | | | | | https | | | | | | https | | |
| | +-----------+ +-------+ | | | | +-----------+ | | | | +-----------+ | |
| +--------------------------+ | | +----------------+ | | +----------------+ |
+------------------------------+ +-----------------------------+ +-----------------------------+
途中で気づいたけど、multipassの内部にはdockerがなくなっててcontainerd/ctrになってた。
性能出るんか
先に結論。macにmicrok8s/multiopassをインストールし、minikubeで利用していたマニフェストを再定義してmariadb/xrdp/django/httpsのコンテナを動かしてrdpコンテナへリモートデスクトップ接続したときの様子は以下のとおり。

macでmicrok8s(multipass)使ってkubenetesは動くけど、性能はトホホな感じ。
djangoの画面は応答速度倍ぐらいかかってて、dockerのコンテナに比べたらsqlでの集計処理とか、speedtest.netの転送速度も半分ぐらい。
ただし、minikubeでqemu使ってディスクの読み書きでクラスタが止まってまうようなことは、microk8sのmultipassの裏側で動くqemuでは発生せんかった。
主観で言うけど、microk8sよりもminikube(hyperkit)のほうが性能出てたと思う。
microk8sのほうが仮想マシンのリソースも多めに食う。
speedtest.netのサイトでのダウンロード速度測定とか、djangoでmariadb読み書きして使う画面表示の体感速度はこんな感じかなぁ。
ubuntu24のdockerコンテナ > macのminikube(hyperkit) > macのmicrok8s(qemu)
multipassはps -ef
したらわかるんやけど、内側ではqemu動いてる。
例えば以下のプロセスNo319はNo1198のqemu起動してる。
nari@gvis-mac ~ % ps -efww | grep multipass
0 319 1 0 5:07PM ?? 0:03.22 /Library/Application Support/com.canonical.multipass/bin/multipassd --verbosity debug
0 1198 319 0 5:26PM ?? 23:57.17 /Library/Application Support/com.canonical.multipass/bin/qemu-system-x86_64 -accel hvf -drive file=/Library/Application Support/com.canonical.multipass/bin/../Resources/qemu/edk2-x86_64-code.fd,if=pflash,format=raw,readonly=on -cpu host -nic vmnet-shared,model=virtio-net-pci,mac=52:54:00:b0:a8:11 -device virtio-scsi-pci,id=scsi0 -drive file=/var/root/Library/Application Support/multipassd/qemu/vault/instances/microk8s-vm/ubuntu-24.04-server-cloudimg-amd64.img,if=none,format=qcow2,discard=unmap,id=hda -device scsi-hd,drive=hda,bus=scsi0.0 -smp 4 -m 10240M -qmp stdio -chardev null,id=char0 -serial chardev:char0 -nographic -cdrom /var/root/Library/Application Support/multipassd/qemu/vault/instances/microk8s-vm/cloud-init-config.iso
501 1804 1505 0 5:57PM ttys000 0:00.00 grep multipass
501 1384 1350 0 5:30PM ttys001 0:00.31 multipass exec microk8s-vm -- sudo microk8s.kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443 --address 0.0.0.0
nari@gvis-mac ~ %
考えたらそらそやな。
macosはそのままコンテナ動くようにはできてへんから、hyperkitとかqemuでlinuxをエミュレートする分オーバーヘッドあるわな。
素直にlinuxの中でqemu使えば性能出るはず。
業務でGKE/EKS使うから、kubectl使ったりpodの練習したいってときにはminikube/microk8sやったらええ。
コンテナ動かしたいだけやったら、linuxでubuntu動かしてdocker使うほうがCPUもメモリも少なくて済むし、わざわざkubernetesでコンテナにせんでもええ。
ローカルlinuxのetcフォルダとか汚さずにいろんなプロセス試したいっていうときも、minikube/microk8s使うんやなくdocker-ceでやるほうが楽でハードウェアリソースも少なくてすむし、結果を出すのも楽。
m4の入ったmacminiで改善されること祈る。
ホンマたのむで。
以下、ビルドは母艦linuxのdockerでやったものを、microk8sへ持っていって動かした時の試行錯誤の経緯。
インストールできるんか
ドキュメントあるやん。
まずはbrewで入れてみっかな。
そのまま指定してbrew install ubuntu/microk8s/microk8s
ってやってみる。
nari@gvis-mac script % brew install ubuntu/microk8s/microk8s
==> Auto-updating Homebrew...
Adjust how often this is run with HOMEBREW_AUTO_UPDATE_SECS or disable with
HOMEBREW_NO_AUTO_UPDATE. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Tapping ubuntu/microk8s
Cloning into '/usr/local/Homebrew/Library/Taps/ubuntu/homebrew-microk8s'...
remote: Enumerating objects: 140, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 140 (delta 5), reused 22 (delta 4), pack-reused 112
Receiving objects: 100% (140/140), 38.02 KiB | 7.60 MiB/s, done.
Resolving deltas: 100% (32/32), done.
Tapped 1 formula (16 files, 60.2KB).
==> Fetching dependencies for ubuntu/microk8s/microk8s: kubernetes-cli
==> Fetching kubernetes-cli ⭐️kubectlも入る
==> Downloading https://ghcr.io/v2/homebrew/core/kubernetes-cli/manifests/1.30.2
Already downloaded: /Users/nari/Library/Caches/Homebrew/downloads/6dbab7e19b3ac6353f5e603129db0742f12ac4670ef441cec9c8387438477990--kubernetes-cli-1.30.2.bottle_manifest.json
==> Downloading https://ghcr.io/v2/homebrew/core/kubernetes-cli/blobs/sha256:8510fedebdd980a7ddb305e
Already downloaded: /Users/nari/Library/Caches/Homebrew/downloads/f6ea46824eea12e96294d33b9e5f7b7425b394aa227077351857aca7d0f09211--kubernetes-cli--1.30.2.sonoma.bottle.tar.gz
==> Fetching ubuntu/microk8s/microk8s
==> Downloading https://github.com/canonical/microk8s/archive/refs/tags/installer-v2.3.4.tar.gz
==> Downloading from https://codeload.github.com/canonical/microk8s/tar.gz/refs/tags/installer-v2.3.
#=#=- #
==> Installing microk8s from ubuntu/microk8s
==> Installing dependencies for ubuntu/microk8s/microk8s: kubernetes-cli
==> Installing ubuntu/microk8s/microk8s dependency: kubernetes-cli
==> Downloading https://ghcr.io/v2/homebrew/core/kubernetes-cli/manifests/1.30.2 ⭐️kubectlは1.30.2やからkubernetesは1.29より下のバージョン入れたらアカン
Already downloaded: /Users/nari/Library/Caches/Homebrew/downloads/6dbab7e19b3ac6353f5e603129db0742f12ac4670ef441cec9c8387438477990--kubernetes-cli-1.30.2.bottle_manifest.json
==> Pouring kubernetes-cli--1.30.2.sonoma.bottle.tar.gz
🍺 /usr/local/Cellar/kubernetes-cli/1.30.2: 236 files, 55.4MB
==> Installing ubuntu/microk8s/microk8s
==> python3 -m venv --system-site-packages --without-pip /usr/local/Cellar/microk8s/2.3.4/libexec
==> python3 -m pip --python=/usr/local/Cellar/microk8s/2.3.4/libexec/bin/python install urllib3==1.2
==> python3 -m pip --python=/usr/local/Cellar/microk8s/2.3.4/libexec/bin/python install /private/tmp
==> Caveats
Run `microk8s install` to start with MicroK8s
==> Summary
🍺 /usr/local/Cellar/microk8s/2.3.4: 856 files, 7.5MB, built in 1 minute 23 seconds
==> Running `brew cleanup microk8s`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
==> Caveats
==> microk8s
Run `microk8s install` to start with MicroK8s
nari@gvis-mac script %
インストールの後にmicrok8s install
っていうのをやるみたいやけど、これやると仮想マシンでノード用意してクラスタ作るらしい。
macの場合のインストールのやり方も書いてある。
そのままやのうて、CPUとかメモリとかサイズ指定したいやんけ。
クラスタ動くんか
サイズの後に単位つけたら怒られたから、クラスタ作るときは試行錯誤して書いた。
channelにクラスタのバージョン書けるみたい。
nari@gvis-mac script % microk8s install --help
Usage: microk8s install OPTIONS
Options:
--help Show this message and exit.
--cpu Cores used by MicroK8s (default=2, min=2)
--mem RAM in GB used by MicroK8s (default=4, min=2)
--disk Max volume in GB of the dynamically expandable hard disk to be used (default=50, min=10)
--channel Kubernetes version to install (default=1.28/stable)
--image Ubuntu version to install (default=22.04)
-y, --assume-yes Automatic yes to prompts
nari@gvis-mac script %
cpuとディスクに単位は書かず整数値のみ書く。
メモリだけ警告出るから、GB
とかGiB
って必要なんかなって思ったらそうでもなさそう。
いったん放置しておいてクラスタ作った結果だけ見ることにする。
microk8s install --cpu 4 --mem 6 --disk 50 --channel 1.30/stable --image lst
イメージは後でmultipassのイメージのオプション方法わかったけど、24.04指定してみたくてltsってエイリアス使えた。
メンテナンス中やったんかもしれんけど、初回だけやたら処理遅かったな。
nari@gvismac ~ % multipass find
Image Aliases Version Description
core core16 20200818 Ubuntu Core 16
core18 20211124 Ubuntu Core 18
core20 20230119 Ubuntu Core 20
core22 20230717 Ubuntu Core 22
20.04 focal 20240710 Ubuntu 20.04 LTS
22.04 jammy 20240701 Ubuntu 22.04 LTS
24.04 noble,lts 20240710 Ubuntu 24.04 LTS ⭐️このltsってエイリアス書いたら使える
appliance:adguard-home 20200812 Ubuntu AdGuard Home Appliance
appliance:mosquitto 20200812 Ubuntu Mosquitto Appliance
appliance:nextcloud 20200812 Ubuntu Nextcloud Appliance
appliance:openhab 20200812 Ubuntu openHAB Home Appliance
appliance:plexmediaserver 20200812 Ubuntu Plex Media Server Appliance
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.
nari@gvismac ~ %
イメージいっぱいあるんやな。いろんな用途あるみたい。
初回は自動でmultipassがインストールされて、sudoして動くもんがあるみたいで、パスワードの入力求めてくる。
メモリ指定で警告あっても、練習でnmon入れたら設定はできてるっぽかった。
nari@gvis-mac script % microk8s install --cpu 4 --mem 6 --disk 50 --channel=1.30/stable
Support for 'multipass' needs to be set up. Would you like to do that now? [y/N]: y
==> Downloading https://formulae.brew.sh/api/cask.jws.json
############################################################################################# 100.0%
==> Downloading https://github.com/canonical/multipass/releases/download/v1.13.1/multipass-1.13.1+ma
==> Downloading from https://objects.githubusercontent.com/github-production-release-asset-2e65be/11
############################################################################################# 100.0%
==> Installing Cask multipass
==> Running installer for multipass with sudo; the password may be necessary.
Password:
installer: Package name is multipass
installer: Installing at base path /
installer: The install was successful.
🍺 multipass was successfully installed!
Waiting for multipass...
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
launch failed: Remote "" is unknown or unreachable.
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
launch failed: Remote "" is unknown or unreachable.
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
launch failed: Remote "release" is unknown or unreachable. If image mirror is enabled, please confirm it is valid.
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
launch failed: Remote "release" is unknown or unreachable. If image mirror is enabled, please confirm it is valid.
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
Launched: microk8s-vm
microk8s (1.30/stable) v1.30.1 from Canonical✓ installed
microk8s-integrator-macos 0.1 from Canonical✓ installed
MicroK8s is up and running. See the available commands with `microk8s --help`.
nari@gvis-mac script %
addonってなんや?
dnsとかhostpath-storageが見えるから便利機能なんかな。
helmって昔どっかで見たな。kubernetesのパッケージ管理の仕組みやったっけ?
忘れたな。
nari@gvis-mac script % microk8s status --wait-ready
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
enabled:
dns # (core) CoreDNS
ha-cluster # (core) Configure high availability on the current node
helm # (core) Helm - the package manager for Kubernetes
helm3 # (core) Helm 3 - the package manager for Kubernetes
disabled:
cert-manager # (core) Cloud native certificate management
cis-hardening # (core) Apply CIS K8s hardening
community # (core) The community addons repository
dashboard # (core) The Kubernetes dashboard
gpu # (core) Alias to nvidia add-on
host-access # (core) Allow Pods connecting to Host services smoothly
hostpath-storage # (core) Storage class; allocates storage from host directory
ingress # (core) Ingress controller for external access
kube-ovn # (core) An advanced network fabric for Kubernetes
mayastor # (core) OpenEBS MayaStor
metallb # (core) Loadbalancer for your Kubernetes cluster
metrics-server # (core) K8s Metrics Server for API access to service metrics
minio # (core) MinIO object storage
nvidia # (core) NVIDIA hardware (GPU and network) support
observability # (core) A lightweight observability stack for logs, traces and metrics
prometheus # (core) Prometheus operator for monitoring and logging
rbac # (core) Role-Based Access Control for authorisation
registry # (core) Private image registry exposed on localhost:32000
rook-ceph # (core) Distributed Ceph storage using Rook
storage # (core) Alias to hostpath-storage add-on, deprecated
nari@gvis-mac script %
普通のubuntuが動くから、nmonで見たらこうなる。
最初にハードコピー撮るの忘れたから、メモリ10GBまで確保しといて、自分で定義したPod動かしたときの入れとく。

クラスタ潰したいときはこうするらしい。
いろいろ試したから10回以上潰したで。
nari@gvis-mac script % microk8s uninstall
Thank you for using MicroK8s!
nari@gvis-mac script %
ダッシュボードあるらしい
minikubeのとき、ブラウザでkubernetesのダッシュボード開いたらCPUとかメモリのリソースわかったはず。
microk8sでも開いてみよかって、やってみたらブラウザは勝手に開かず、途中に書いてあるhttpsのURLを開いてトークン入力が必要。
nari@gvis-mac script % microk8s dashboard-proxy
Checking if Dashboard is running.
Infer repository core for addon dashboard
Infer repository core for addon metrics-server
Waiting for Dashboard to come up.
Dashboard will be available at https://192.168.105.69:10443
Use the following token to login:
eyJhbGciOiJSUzI1NiIsImtpZCI6IndFWl9DZUcyS2NWaW1vLTExOVdUSjd6b1pkQ2ozazRodk1MNGtUY3QzVWcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJtaWNyb2s4cy1kYXNoYm9hcmQtdG9rZW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImVmMTUyNWZiLTU4NTMtNDk0MC1hYTY3LWNhN2I3ZjVkOGNjNCIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpkZWZhdWx0In0.Y2T5iOFka5gmidBjqNk2g_yI6lELizxL_ijLzH9B5BratehhjVrCCehCzGNiGYYoAKOQzMHo14Y4UR4ivuqGWPlGiboiXBvdoHROUS-Q6GA-JSoDXDdcLIkJk5YxzM5RSeBZzEt3Z_qhMi7y8F34CUyV_yLREMd5B6jDUuagwjU5G0uJ15t99u68kgDp7scPa4H6axo5FKe_XWddkoJtq5u7R4qxMgcJrOa6VxcTp-SZHEm7TUAJZMzYiBOxVCZaLF1hjZYuE5VMbVnamnH9Hg-IerX7nplQQgZu78Mbgxz7r4cQKQbEMRA7m99oG2p7i3Yh4nEDfTawX3W4HLNKqQ
Forwarding from 0.0.0.0:10443 -> 8443
トークン表示はランダムらしい。
開いてみるかな。
ブラウザの警告表示されるから自己証明書なんやな。

さっきのトークン入れてみる。

おお、minikubeのときとおんなじコンソール開くんや。

ノードの情報見たらCPU4つありそうやし、メモリも6GBから減ってて(コントロールプレーンが使い込んでるんやな)見えるからいったんこれでいってみっか。
kubernetesのバージョンどないやねん
ちょっとややこしい。
microk8sをインストールしたら、自動的にmultipassがインストールされる。
multipassの中でmicrok8s-vm
っていう名前の仮想マシンが作られて、指定したイメージのubuntuがmac内部で動く。
mac内部のubuntuではaptやなくてsnapでmicrok8sのパッケージが入ってくれる。
このパッケージに関する情報を表示させると、kubernetesで扱えるクラスタのバージョンが表示される箇所がある。
長いなぁ。
例えばmacからはこう打つ。
nari@gvis-mac script % multipass exec microk8s-vm -- sudo snap info microk8s | grep stable | head -4
tracking: 1.30/stable
1.30/stable: v1.30.1 2024-05-29 (6876) 168MB classic
latest/stable: v1.29.0 2024-01-25 (6364) 168MB classic
1.30-strict/stable: v1.30.0 2024-04-18 (6783) 168MB -
nari@gvis-mac script %
1.30のstableってあるんやけど、latestは1.29になっとるのはなんかモメとるんか?
minikubeで1.30使ってたから低い方の1.29なんか使わんとこ。
永続化領域どないや
minikubeのhyperkitにあった/data
ってフォルダは、microk8sのmultipass(qemu)内部のフォルダにはあらへんかった。
運用スクリプトを使う都合もあるから、仮想マシンに入って作って使うことにした。
nari@gvis-mac ~ % multipass shell microk8s-vm
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
:(中略)
ubuntu@microk8s-vm:~$ uname -n
microk8s-vm
ubuntu@microk8s-vm:~$ ls -l /
total 80
lrwxrwxrwx 1 root root 7 Apr 22 22:08 bin -> usr/bin
drwxr-xr-x 2 root root 4096 Feb 26 21:58 bin.usr-is-merged
drwxr-xr-x 5 root root 4096 Jul 2 17:38 boot
drwxrwxrwx 7 root root 4096 Jul 15 07:10 data ⭐️mkdirして作った
drwxr-xr-x 18 root root 3960 Jul 15 17:26 dev
drwxr-xr-x 107 root root 4096 Jul 14 17:06 etc
:(中略)
ubuntu@microk8s-vm:~$
最初は手動で作ったけど、クラスタ作り直すスクリプトでやってもらうことにした。
ホンマはcloud-initって仕組みがあって、軽微なインストールやらコマンド実行ができる定義を読み込んで動かしてくれる。
あんまり複雑なことすると、他の仕組みに移動するとき苦しむことあるかなって思ったから、使うのやめた。
そもそもmariadb/django/xrdpのpod動くんか
minikubeのときにmariadb/django/xrdpはそれぞれyamlを用意してるから、そのまま使えるはず。
データサイズ増えたからpvcに書くサイズちょっと増やしたけど、kubernetesの裏方をminikubeからmicrok8sに変わるだけ。
仮想マシンの中のデータ置き場として指定する永続化領域が使えたら、考え方とか書き方とか引き継いでそのまま動いてくれな困る。
ベースが変わっても、書き換えがあんまり出ずに済むようにしたいもんや。
teratermマクロ
kubernetesはコマンドラインたくさん入力必要。
多少は覚えるけど、水ものやからteratermマクロに書いて調整しながら使う。
kubernetesクラスタ動いたら、dockerイメージをmicrok8sのお腹の中へ持ってく。
数あるからteratermマクロでホイホイ持ってく。
手動でやるの面倒やし。
minikubeのノードではdocker動いてたのが、microk8sのmultipassの中では、containerdとctrが動く。
どっかのネットの書き込みで「kubernetesはdockerを必要としなくなってる」って書いてたのがあったな。
dockerdに対するcontainerdを操作できるんがctrやったかな。
サーバ側の利用経験を積むため、勉強してみよか。
linuxからmacへdockerイメージのコピー
minikubeのときはコピーからdocker loadまでこのマクロでやってた。
試行錯誤のプロセスで、永続化領域置き場へdockerイメージ設置までやってたのをscpしてgunzipまででいったん終わらせるようにした。
こうしとかんと、1回数分かかるコピーを何度もせなアカンかったしな。
include 'Y:_connect\connect\teraIni\gvis.ini'
SOURFILE1 = 'M:\DockerImages\save-jupyter.tar.gz'
DESTFILE1 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-jupyter.tar.gz'
SOURFILE2 = 'M:\DockerImages\save-mariadb.tar.gz'
DESTFILE2 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-mariadb.tar.gz'
SOURFILE3 = 'M:\DockerImages\save-xrdpubu.tar.gz'
DESTFILE3 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-xrdpubu.tar.gz'
SOURFILE4 = 'M:\DockerImages\save-django.tar.gz'
DESTFILE4 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-django.tar.gz'
; --- 接続 --------------
conSTR = 'gvis-mac.intra.gavann-it.com /ssh /2 /auth=password /user=nari /passwd='
strconcat conSTR gvis_macP
strconcat conSTR ' /F='
strconcat conSTR gvis_iPTH
strconcat conSTR 'gray.INI '
strconcat conSTR '/timeout='
strconcat conSTR gvis_TOUT
; ---debug --------------
; messagebox conSTR 'info'
connect conSTR
if result <> 2 goto end
wait "%"
sendln 'rm -f /Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save*'
wait "%"
;; scpsend SOURFILE1 DESTFILE1 ⭐️jupyterlabは母艦linuxでしか使わんからscpせん
scpsend SOURFILE2 DESTFILE2
scpsend SOURFILE3 DESTFILE3
scpsend SOURFILE4 DESTFILE4
;; ファイル送信プロセス確認
do
mpause 5000
sprintf2 str 'ps -ef |grep -v grep |grep -c scp'
sendln str
waitln '0' '1'
loop while result != 1
;; ファイル送信が完了すると次のマクロを実行
sendln 'echo SCP finish'
wait "%"
sendln 'cd /Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages'
wait "%"
sendln 'gunzip save-mariadb.tar.gz' ⭐️gunzipしてdockerイメージをtarファイルにする
wait "%"
sendln 'gunzip save-xrdpubu.tar.gz' ⭐️gunzipしてdockerイメージをtarファイルにする
wait "%"
sendln 'gunzip save-django.tar.gz' ⭐️gunzipしてdockerイメージをtarファイルにする
end
macに置いたらこうなる。
nari@gvis-mac DockerImages % pwd
/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages
nari@gvis-mac DockerImages % ls -lh
total 15826032
-rw-r--r-- 1 nari staff 1.1G 7 12 08:20 save-django.tar
-rw-r--r-- 1 nari staff 389M 7 12 08:15 save-mariadb.tar
-rw-r--r-- 1 nari staff 6.1G 7 12 08:20 save-xrdpubu.tar
nari@gvis-mac DockerImages %
dockerイメージをmultipassへコピー
ホンマはmacのフォルダの一部をmultipassへマウントしてコピーさせたかった。
マウントはエラー出てへんのに、フォルダの中がカラに見えてしもてたからマウントする方法は諦めた。
qemuの呪いなんかなぁ。オーナーをubuntu(uid=1000)にしたり、chmod 777
してみたけどアカンかった。
今回は必要なデータだけmultipass transfer
ってやって永続化領域置き場の/data
へコピーすることにした。
include 'Y:_connect\connect\teraIni\gvis.ini'
SOURFILE1 = 'M:\DockerImages\save-jupyter.tar.gz'
DESTFILE1 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-jupyter.tar.gz'
SOURFILE2 = 'M:\DockerImages\save-mariadb.tar.gz'
DESTFILE2 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-mariadb.tar.gz'
SOURFILE3 = 'M:\DockerImages\save-xrdpubu.tar.gz'
DESTFILE3 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-xrdpubu.tar.gz'
SOURFILE4 = 'M:\DockerImages\save-django.tar.gz'
DESTFILE4 = '/Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-django.tar.gz'
; --- 接続 --------------
conSTR = 'gvis-mac.intra.gavann-it.com /ssh /2 /auth=password /user=nari /passwd='
strconcat conSTR gvis_macP
strconcat conSTR ' /F='
strconcat conSTR gvis_iPTH
strconcat conSTR 'gray.INI '
strconcat conSTR '/timeout='
strconcat conSTR gvis_TOUT
; ---debug --------------
; messagebox conSTR 'info'
connect conSTR
if result <> 2 goto end
wait "%"
sendln 'multipass shell microk8s-vm' ⭐️microk8sのノードにログイン
wait "$"
sendln 'sudo mkdir -p /data' ⭐️microk8sのノードにminikubeみたいな永続化領域置き場作っといてpvc/pvから使ってもらう
wait "$"
sendln 'sudo chmod 777 /data' ⭐️こうしとかなノードのOSユーザubuntuやコンテナの中のOSユーザから使えへん
wait "$"
sendln 'exit'
wait "DockerImages %"
sendln 'multipass transfer /Users/nari/Documents/personal/microk8s/nariDockerDat/DockerImages/save-*.tar microk8s-vm:/data ; sync' ⭐️dockerイメージコピーするねん
wait "DockerImages %"
sendln 'multipass transfer /Users/nari/Documents/personal/microk8s/nariDockerDat/gvis-pv-ubun.tar.gz microk8s-vm:/data ; sync' ⭐️xrdpコンテナで使う永続化領域もコピーしとく
end
置いたらこうなる。
ubuntu@microk8s-vm:/data$ pwd
/data
ubuntu@microk8s-vm:/data$ ls -lh ./save*
-rw-r--r-- 1 ubuntu ubuntu 1.2G Jul 14 17:09 ./save-django.tar
-rw-r--r-- 1 ubuntu ubuntu 389M Jul 14 17:10 ./save-mariadb.tar
-rw-r--r-- 1 ubuntu ubuntu 6.1G Jul 14 17:16 ./save-xrdpubu.tar
ubuntu@microk8s-vm:/data$
dockerイメージのインポート
minikubeのhyperkitの中ではdocker動いてた。
microk8sのmultipassの中ではcontinerdが動いててctr使う。
dockerじゃないコンテナ稼働を練習してみたいのもあるからがんばってみた。
ドキュメントにヒントがあるけど、そのままではインポートできんかった。
試行錯誤してみたら、microk8s-vmに入ってsudo microk8s.ctr images import save-django.tar
って感じでインポートしたらうまくいく。
include 'Y:_connect\connect\teraIni\gvis.ini'
; --- 接続 --------------
conSTR = 'gvis-mac.intra.gavann-it.com /ssh /2 /auth=password /user=nari /passwd='
strconcat conSTR gvis_macP
strconcat conSTR ' /F='
strconcat conSTR gvis_iPTH
strconcat conSTR 'gray.INI '
strconcat conSTR '/timeout='
strconcat conSTR gvis_TOUT
; ---debug --------------
; messagebox conSTR 'info'
connect conSTR
if result <> 2 goto end
wait "%"
sendln 'multipass shell microk8s-vm'
wait "$"
sendln 'cd /data '
wait "$"
sendln 'tar xzf gvis-pv-ubun.tar.gz ' ⭐️xrdpコンテナの永続化領域はsudoなしで展開しとく
wait "$"
sendln 'sudo microk8s.ctr images import save-mariadb.tar ' ⭐️dockerイメージをインポート
wait "$"
sendln 'sudo microk8s.ctr images import save-django.tar ' ⭐️dockerイメージをインポート
wait "$"
sendln 'sudo microk8s.ctr images import save-xrdpubu.tar ' ⭐️dockerイメージをインポート
wait "$"
sendln 'sudo microk8s.ctr images ls | grep save ' ⭐️インポート結果を表示
end
multipassで動くubuntuの中でインポートした結果はこうなる。
ubuntu@microk8s-vm:~$ sudo microk8s.ctr images ls | grep save | awk '{print $1,$4,$5,$6}'
docker.io/library/save-django:gvis-saved 1.1 GiB linux/amd64
docker.io/library/save-mariadb:gvis-saved 388.8 MiB linux/amd64
docker.io/library/save-xrdpubu:gvis-saved 6.1 GiB linux/amd64
ubuntu@microk8s-vm:~$
macから見たディスク置き場
qemuを単独で使った時はqcow2っていうイメージ使ってたはず。
microk8sのmultipassが起動するqemuではimgって拡張子になってた。
確実にディスクに書いてもらうため、multipass transfer
の後にはsync入れとく。
dockerイメージ置いて永続化領域も準備したときのディスク消費をmacから見た時のサイズ確認。
nari@gvis-mac ~ % sudo ls -lha /var/root/Library/Application\ Support/multipassd/qemu/vault/instances/microk8s-vm
total 62140136
drwxr-xr-x 4 root wheel 128B 7 14 17:04 .
drwxr-xr-x 3 root wheel 96B 7 14 17:04 ..
-rw-r--r-- 1 root wheel 52K 7 14 17:04 cloud-init-config.iso
-rw-r--r-- 1 root wheel 32G 7 15 19:01 ubuntu-24.04-server-cloudimg-amd64.img
nari@gvis-mac ~ %
コピーでどうしても手に負えんようになったら、GKE/ECSからの利用みたいにNFSサーバ作ってマウントさせよか。
今はまだそこまではやらんけど。
運用スクリプト
macの中からkubectl使ってPodの操作してる。
pod/service/configmapはそのまま、pv/pvcのサイズは変更したけど、それ意外全部そのまま使える。
minikubeで使ってた運用スクリプトは書き換えた。
クラスタの作成
練習で動かして、いったん落ち着いたのがこの形。
EXEC_HOME=/Users/nari/Documents/personal/script # Execute Home directory
KUBE_HOME=/Users/nari/Documents/personal/microk8s # kubernetes Home directory
LOG_FILE=/Users/nari/Documents/personal/log/300_kube.log # Log file
⭐️multipassで作る仮想マシンのスペック設定
GVIS_CPU=4
GVIS_MEM=10
GVIS_DSK=50
GVIS_VER=1.30/stable
GVIS_IMG=lts
## ---detail----------------------------------------------------------------
⭐️ホンマに潰してもええんかい、って2段階確認
read -p "--- kube Data save ready ? ---(y/N):" yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac
read -p "--- kube Recreate cluster ready ? ---(y/N):" yn
case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac
echo '---Recreate start---'
rm -f ${LOG_FILE}
echo ${LOG_FILE}
microk8s uninstall ⭐️multipassで作る仮想マシンいったん潰す
multipass delete microk8s-vm ⭐️multipassで作る仮想マシンを削除
multipass purge ⭐️multipassで作る仮想マシンを完全削除
echo -------- `date +%F_%T` -------- >> ${LOG_FILE}
microk8s install --cpu ${GVIS_CPU} --mem ${GVIS_MEM} --disk ${GVIS_DSK} --channel ${GVIS_VER} --image ${GVIS_IMG} >> ${LOG_FILE}
sleep 10
multipass exec microk8s-vm -- sudo mkdir /data ⭐️永続化領域作る
multipass exec microk8s-vm -- sudo apt install -y nmon ⭐️個人的に使いたい道具
microk8s enable registry --size 30Gi ⭐️microk8sでdockerイメージ置き場を有効にする
mkdir -p ~/.kube ; chmod 755 ~/.kube ⭐️kubectlの設定置き場
microk8s config > ~/.kube/config ; chmod 600 ~/.kube/config ⭐️microk8sのクラスタ操作できるようにkubectlの設定入れとく
echo -------- kubernetes cluster created -------- >> ${LOG_FILE}
⭐️pv/pvcの設定入れる
kubectl apply -f ${KUBE_HOME}/gvis-PersistentVol-mariadb1011.yaml
kubectl apply -f ${KUBE_HOME}/gvis-PersistentVol-mariadb1011conf.yaml
kubectl apply -f ${KUBE_HOME}/gvis-PersistentVol-sv_django-ssl_certs.yaml
kubectl apply -f ${KUBE_HOME}/gvis-PersistentVol-sv_django-uwsgi-nginx.yaml
kubectl apply -f ${KUBE_HOME}/gvis-PersistentVol-ubun.yaml
⭐️configmapの設定入れる
kubectl apply -f ${KUBE_HOME}/mariadb11-txt-configmap.yaml
⭐️serviceの設定入れる
kubectl apply -f ${KUBE_HOME}/sv-django-service.yaml
kubectl apply -f ${KUBE_HOME}/sv-https-portal-service.yaml
kubectl apply -f ${KUBE_HOME}/sv-mariadb1011-service.yaml
⭐️クラスタとPodの稼働状態確認
onlchk >> ${LOG_FILE}
echo -------- `date +%F_%T` -------- >> ${LOG_FILE}
⭐️しばらくかかるけど、ダッシュボード有効にする
microk8s dashboard-proxy &
⭐️multipassで動く仮想マシンのディスク消費確認したいときのコマンドラインと、クラスタ中のpodの状態見たい時の方法
## sudo ls -lha /var/root/Library/Application\ Support/multipassd/qemu/vault/instances/microk8s-vm
## kubectl get pods --all-namespaces
exit $?
クラスタとPodの稼働状態確認
クラスタの状態とかPodの状態とかを一覧したいときのコマンドライン。
これあると一発で状態が見える。
echo '----- cluster status ------'
microk8s status --wait-ready | head -5
echo '------ cluster node ------'
multipass exec microk8s-vm -- sudo cat /etc/os-release | grep PRETTY_NAME
multipass exec microk8s-vm -- sudo df -h | grep -v var | egrep 'Filesystem|sda1 ' | head -2
echo '----- recent cluster ver -----'
multipass exec microk8s-vm -- sudo snap info microk8s | grep classic | head -3
echo '-------kubectl version -------'
kubectl version --output=yaml | egrep 'clientVersion|serverVersion|gitVersion'
echo '----kubectl po/svc/configmap status ----'
kubectl get po,svc,configmap
echo '-------kubectl PV -------'
kubectl get pv | awk '{ print $1,$2,$3,$5} '
echo '-------kubectl forward -------'
ps -efww | grep kubectl | grep forward | awk '{ print $9,$10,$11,$12,$13 }'
動かすとこうなる。
nari@gvis-mac script % onlchk
----- cluster status ------
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
addons:
------ cluster node ------ ⭐️仮想マシンが動くクラスタの中の情報
PRETTY_NAME="Ubuntu 24.04 LTS"
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 48G 32G 16G 68% /
----- recent cluster ver ----- ⭐️公開されている最近のクラスタバージョン
1.30/stable: v1.30.1 2024-05-29 (6876) 168MB classic
1.30/candidate: v1.30.1 2024-05-29 (6876) 168MB classic
1.30/beta: v1.30.1 2024-05-29 (6876) 168MB classic
-------kubectl version ------- ⭐️使ってるkubectlのバージョン
clientVersion:
gitVersion: v1.30.2
serverVersion:
gitVersion: v1.30.1
----kubectl po/svc/configmap status ---- ⭐️クラスタの中で生きてる定義
NAME READY STATUS RESTARTS AGE
pod/cl-ubun-66d8cd8bcf-lb56b 1/1 Running 0 72s
pod/sv-django-5fcb4bf44f-4slsg 1/1 Running 0 61s
pod/sv-https-portal-74b6b984c8-rbcrj 1/1 Running 0 46s
pod/sv-mariadb1011-55685c8874-vkcw2 1/1 Running 0 84s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.152.183.1 <none> 443/TCP 40h
service/sv-django ClusterIP 10.152.183.228 <none> 38080/TCP 40h
service/sv-https-portal ClusterIP 10.152.183.254 <none> 30080/TCP,30443/TCP 40h
service/sv-mariadb1011 ClusterIP 10.152.183.75 <none> 13306/TCP 40h
NAME DATA AGE
configmap/kube-root-ca.crt 1 40h
configmap/sv-mariadb11-txt 5 40h
-------kubectl PV ------- ⭐️クラスタの中のpv
NAME CAPACITY ACCESS RECLAIM
gvis-pv-django-sslcerts 1Gi RWO Bound
gvis-pv-django-uwsgi-nginx 1Gi RWO Bound
gvis-pv-mariadb1011 20Gi RWO Bound
gvis-pv-mariadb1011conf 5Gi RWO Bound
gvis-pv-ubun 10Gi RWO Bound
pvc-e06cba5f-b71f-40f2-8321-b92c7f9ccbb9 30Gi RWX Bound
-------kubectl forward ------- ⭐️フォワーディングの状態
exec microk8s-vm -- sudo microk8s.kubectl
port-forward --address 0.0.0.0 sv-mariadb1011-55685c8874-vkcw2 13306:3306
port-forward --address 0.0.0.0 cl-ubun-66d8cd8bcf-lb56b 33389:3389
port-forward --address 0.0.0.0 sv-django-5fcb4bf44f-4slsg 38080:8080
nari@gvis-mac script %
クラスタの起動と停止
クラスタ起動は、Podを全起動させて少し待ってからダッシュボード起動させる。
enableさせてるのは、停止のときにdisableしとかな起動してくれんから。
EXEC_HOME=/Users/nari/Documents/personal/script # Execute Home directory
KUBE_HOME=/Users/nari/Documents/personal/microk8s # kubernetes Home directory
LOG_FILE=/Users/nari/Documents/personal/log/300_kube.log # Log file
echo ${LOG_FILE}
echo -------- `date +%F_%T` -------- >> ${LOG_FILE}
microk8s start >> ${LOG_FILE}
/bin/sh ${EXEC_HOME}/304_allPodStart.sh
sleep 30
onlchk >> ${LOG_FILE}
microk8s enable dashboard
sleep 30
microk8s dashboard-proxy
echo -------- `date +%F_%T` -------- >> ${LOG_FILE}
クラスタ停止では、全部のPodを止めてダッシュボードをdisableで削除する。
なんか知らんけど、ダッシュボードをdisableしとかんと次に起動するときにうまいこと起動できん。
EXEC_HOME=/Users/nari/Documents/personal/script # Execute Home directory
KUBE_HOME=/Users/nari/Documents/personal/microk8s # kubernetes Home directory
LOG_FILE=/Users/nari/Documents/personal/log/300_kube.log # Log file
echo ${LOG_FILE}
echo -------- `date +%F_%T_` -------- >> ${LOG_FILE}
/bin/sh ${EXEC_HOME}/303_allPodStop.sh
sleep 20
microk8s disable dashboard
sleep 10
microk8s stop >> ${LOG_FILE}
echo -------- `date +%F_%T_` -------- >> ${LOG_FILE}
Podの起動と停止
そのままminikubeのときのもの流用で、起動は順位を保ちたいのと、実行シェルの中でポートフォワードもやってる。
EXEC_HOME=/Users/nari/Documents/personal/script # Execute Home directory
/bin/sh ${EXEC_HOME}/411_ReCreateDBpod.sh
/bin/sh ${EXEC_HOME}/413_ReCreateXRDPpod.sh
/bin/sh ${EXEC_HOME}/414_ReCreateDjangoPod.sh
/bin/sh ${EXEC_HOME}/415_ReCreateHTTPSpod.sh
例えばmariadbの呼び出し(411_RecrreateDBpod.sh)はこんな感じ。
sleepの秒数はログ見てだいたいの起動時間を目視で確認して、あとは感覚で設定。
KB_HOME=/Users/nari/Documents/personal/microk8s
kubectl get pod
kubectl delete -f ${KB_HOME}/sv-mariadb1011-deployment.yaml
kubectl apply -f ${KB_HOME}/sv-mariadb1011-deployment.yaml
sleep 10
kubectl port-forward --address 0.0.0.0 `kubectl get pod | grep mariadb | awk '{print $1}'` 13306:3306 &
kubectl get pod
停止はバッサリとPod潰す。
EXEC_HOME=/Users/nari/Documents/personal/script # Execute Home directory
KUBE_HOME=/Users/nari/Documents/personal/microk8s # kubernetes Home directory
## stop port forward
/bin/sh ${EXEC_HOME}/305_allForwardingStop.sh
kubectl delete -f ${KUBE_HOME}/sv-https-portal-deployment.yaml
kubectl delete -f ${KUBE_HOME}/sv-django-deployment.yaml
kubectl delete -f ${KUBE_HOME}/cl-ubun-deployment.yaml
kubectl delete -f ${KUBE_HOME}/sv-mariadb1011-deployment.yaml
ポートフォワードする
kubectlでポッドのサービスをフォワーディングさせたらええだけ。
minikubeとかmicrok8s依存とかやない。
これでmacの外側からブラウザでhttpsのdjango使える。mariadbもa5sqlからつながる。
既に作ってある運用スクリプトはこんな感じで、そのまま使う。
kubectl port-forward --address 0.0.0.0 `kubectl get pod | grep mariadb | awk '{print $1}'` 13306:3306 &
kubectl port-forward --address 0.0.0.0 `kubectl get pod | grep cl-ubun | awk '{print $1}'` 33389:3389 &
kubectl port-forward --address 0.0.0.0 `kubectl get pod | grep sv-django | awk '{print $1}'` 38080:8080 &
kubectl port-forward --address 0.0.0.0 `kubectl get pod | grep sv-https | awk '{print $1}'` 30443:443 &
ポートフォワード停止はkillでやってる。
dashboardもフォワーディングしてるみたいやから、プロセス名見て除外した。
## stop port forward
ps -ef | grep kubectl | grep port-forward | grep -v dashboard | awk {'print $2'} | xargs kill -9
minikubeのときはPod稼働させていたら、急にフォワーディングが崩れて接続できんことがあったからこの処理作った。
microk8sやったら今のところ発生してへん。
試行錯誤して使ったコマンドライン
いろいろ書いて練習した足跡。
書き方悪かったり、今はアカンかってもいつか使えるようになるもんもあるかもしれへんけどな。
❌のマーク箇所はエラーになりよる。
microk8sでノードの用意とクラスタ作成
microk8s uninstall
multipass list
multipass delete microk8s-vm
multipass purge
microk8s install --cpu 4 --mem 6 --disk 50 --channel=1.30/stable
microk8s install --cpu 4 --mem 6 --disk 50 --channel=1.30/stable --image=noble ❌
イメージ指定がアカンとき。
launch failed: 'noble' is not a supported alias. Please use `multipass find` for supported image aliases.
An error occurred with the instance when trying to launch with 'multipass': returned exit code 2.
Ensure that 'multipass' is setup correctly and try again.
こうするとうまくいく。
nari@gvismac ~ % microk8s install --cpu 4 --mem 6 --disk 50 --channel=1.30/stable --image=lts
Warning: the "--mem" long option is deprecated in favour of "--memory". Please update any scripts, etc.
Launched: microk8s-vm
2024-07-12T04:02:32+09:00 INFO Waiting for automatic snapd restart...
microk8s (1.30/stable) v1.30.1 from Canonical✓ installed
microk8s-integrator-macos 0.1 from Canonical✓ installed
MicroK8s is up and running. See the available commands with `microk8s --help`.
nari@gvismac ~ %
アドオンで必要なもんを有効にする。ダッシュボードと、イメージ置き場のレジストリやね。
microk8s enable dashboard
microk8s enable registry:size=30Gi
レジストリを有効にする行はこう書かな警告出る。
microk8s enable registry --size 30Gi ⭐️
レジストリにイメージを入れるときに参考にさせてもらったサイト。
作者さんありがとう。参考にさせていただきました。

multipassのコマンドライン
multipassはそれ単体でいろいろできるらしい。
解説されてる方がおられた。作者さんありがとう。

使ったのはmultipass list
でクラスタが作ってくれたノードが動いてるのかってことや、multipass find
で指定できるイメージを調べたとき。
multipass info
ってやってみると、細かい状態を表示してくれるけど、これは使わず。
nari@gvis-mac script % multipass info
Name: microk8s-vm
State: Running
Snapshots: 0
IPv4: 192.168.105.89
10.1.254.64
Release: Ubuntu 24.04 LTS
Image hash: 182dc760bfca (Ubuntu 24.04 LTS)
CPU(s): 4
Load: 0.99 2.23 2.54
Disk usage: 32.1GiB out of 48.4GiB
Memory usage: 4.4GiB out of 9.7GiB
Mounts: --
nari@gvis-mac script %
他にもマウントする方法とか模索したけど、ノードの中でどうしてもmacの領域をlsで表示できず。
multipass mount /Users/nari/Documents/personal/microk8s microk8s-vm:/mk8s ⭐️エラーにはならんけど、なんも見えん
multipass umount microk8s-vm:/mk8s
multipass info
マウントしてノードにログインしたら、こんなふうになりよった。touchできてもlsで表示できん。
ubuntu@microk8s-vm:~$ cd /mk8s
ubuntu@microk8s-vm:/mk8s$ ls ⭐️最初はすっからかん
ubuntu@microk8s-vm:/mk8s$ touch foo.txt ⭐️ファイル作る
ubuntu@microk8s-vm:/mk8s$ ls -l ⭐️マジか!? なんもあらへんてか?
total 0
ubuntu@microk8s-vm:/mk8s$ ls -l foo.txt ⭐️ファイル名指定したら出てきよる
-rw-r--r-- 1 ubuntu ubuntu 0 Jul 18 04:34 foo.txt
ubuntu@microk8s-vm:/mk8s$ ls -l * ⭐️ワイルドカード指定あかんの? 使えんなぁ
ls: cannot access '*': No such file or directory
ubuntu@microk8s-vm:/mk8s$ ls -l foo* ⭐️終わったな
ls: cannot access 'foo*': No such file or directory
ubuntu@microk8s-vm:/mk8s$
microk8sのコマンドライン
dockerイメージをインポートするときに使った。一覧は表示できる。
nari@gvis-mac ~ % microk8s ctr images ls | awk '{print $1}' | head -10
REF
docker.io/calico/cni:v3.25.1
docker.io/calico/cni@sha256:9a2c99f0314053aa11e971bd5d72e17951767bf5c6ff1fd9c38c4582d7cb8a0a
docker.io/calico/kube-controllers:v3.25.1
docker.io/calico/kube-controllers@sha256:02c1232ee4b8c5a145c401ac1adb34a63ee7fc46b70b6ad0a4e068a774f25f8a
docker.io/calico/node:v3.25.1
docker.io/calico/node@sha256:0cd00e83d06b3af8cd712ad2c310be07b240235ad7ca1397e04eb14d20dcc20f
docker.io/cdkbot/hostpath-provisioner:1.5.0
docker.io/cdkbot/hostpath-provisioner@sha256:ac51e50e32b70e47077fe90928a7fe4d3fc8dd49192db4932c2643c49729c2eb
docker.io/coredns/coredns:1.10.1
nari@gvis-mac ~ %
これができんかった。
nari@gvis-mac DockerImages % microk8s ctr image import save-django.tar ❌
ctr: open save-django.tar: operation not permitted
An error occurred when trying to execute 'sudo microk8s.ctr image import save-django.tar' with 'multipass': returned exit code 1.
nari@gvis-mac DockerImages %
transferした後でノードにログインして、こうしたらうまくいく。
macでmicrok8s ctr
ってやるのはノードの中でsudo microk8s.ctr
ってやってるのと同じっぽい。
ついでにtarでxrdpのPodで使う永続化領域も展開。
nari@gvis-mac ~ % multipass shell microk8s-vm
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-36-generic x86_64)
:(中略)
Last login: Fri Jul 12 04:17:29 2024 from 192.168.105.1
ubuntu@microk8s-vm:~$ cd /data
ubuntu@microk8s-vm:/data$ sudo microk8s.ctr images import save-mariadb.tar
unpacking docker.io/library/save-mariadb:gvis-saved (sha256:dd057d804629f86df7ee582d9211a261741af40607b9195cccc0b086f09a8d00)...done
ubuntu@microk8s-vm:/data$ sudo microk8s.ctr images import save-django.tar
unpacking docker.io/library/save-django:gvis-saved (sha256:af055ed99b5c57225ac3d5d3939e0b1cffbb03a90f303533d3ddadffae6d0136)...done
ubuntu@microk8s-vm:/data$ sudo microk8s.ctr images import save-xrdpubu.tar
unpacking docker.io/library/save-xrdpubu:gvis-saved (sha256:03a70bd90f06295d3409c0795501feba05d2eff67acc4673c503451a027edd00)...done
ubuntu@microk8s-vm:/data$
ubuntu@microk8s-vm:/data$ tar xzf gvis-pv-ubun.tar.gz
ubuntu@microk8s-vm:/data/gvis-pv-ubun$ cd /data/gvis-pv-ubun/script/
ubuntu@microk8s-vm:/data/gvis-pv-ubun/script$ ls
003_mkPass.sh 009_set_locale.sh 901_OSstop.sh _serviceStatus.sh
005_ntp_date_mod.sh 800_crontab_root.txt 902_OSreboot.sh xclock
005_ntp_date_mod.sh.log 810_aptUpdate.sh _serviceStart.sh
ubuntu@microk8s-vm:/data/gvis-pv-ubun/script$
ダッシュボードつながらんことがあった。
error: error upgrading connection: error dialing backend: dial tcp 192.168.105.87:10250: connect: connection refused
An error occurred when trying to execute 'sudo microk8s.kubectl port-forward -n kube-system service/kubernetes-dashboard 10443:443 --address 0.0.0.0' with 'multipass': returned exit code 1.
クラスタの停止のときにアドオンをdisableしておいて、起動のときにenableにしたら回避できた。
ただし、クラスタ起動のときにダッシュボードの起動は時間かかるけど動くのは動く。
microk8s enable dashboard
sleep 30
microk8s dashboard-proxy
:(中略)
error when retrieving current configuration of:
Resource: "/v1, Resource=serviceaccounts", GroupVersionKind: "/v1, Kind=ServiceAccount"
Name: "kubernetes-dashboard", Namespace: "kube-system"
from server for: "/root/snap/microk8s/6876/tmp/temp-8563.yaml": Get "https://127.0.0.1:16443/api/v1/namespaces/kube-system/serviceaccounts/kubernetes-dashboard": dial tcp 127.0.0.1:16443: connect: connection refused
error when retrieving current configuration of:
Resource: "/v1, Resource=services", GroupVersionKind: "/v1, Kind=Service"
Name: "kubernetes-dashboard", Namespace: "kube-system"
from server for: "/root/snap/microk8s/6876/tmp/temp-8563.yaml": Get "https://127.0.0.1:16443/api/v1/namespaces/kube-system/services/kubernetes-dashboard": dial tcp 127.0.0.1:16443: connect: connection refused
:(中略)
Name: "dashboard-metrics-scraper", Namespace: "kube-system"
from server for: "/root/snap/microk8s/6876/tmp/temp-8563.yaml": Get "https://127.0.0.1:16443/apis/apps/v1/namespaces/kube-system/deployments/dashboard-metrics-scraper": dial tcp 127.0.0.1:16443: connect: connection refused
An error occurred when trying to execute 'sudo microk8s.enable dashboard' with 'multipass': returned exit code 1.
Checking if Dashboard is running.
Infer repository core for addon dashboard
Infer repository core for addon metrics-server
Waiting for Dashboard to come up.
W0717 04:09:07.763766 10947 reflector.go:470] k8s.io/client-go/tools/watch/informerwatcher.go:146: watch of *unstructured.Unstructured ended with: very short watch: k8s.io/client-go/tools/watch/informerwatcher.go:146: Unexpected watch close - watch lasted less than a second and no items received
Dashboard will be available at https://192.168.105.89:10443
Use the following token to login:
eyJhbGciOiJSUzI1NiIsImtpZCI6IkFnYmJEX3U2R1pVc2JEUHpmZFVTbTNOdXVJOTlMUEF1bk42eXZEWkZtdnMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJtaWNyb2s4cy1kYXNoYm9hcmQtdG9rZW4iLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC5uYW1lIjoiZGVmYXVsdCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6IjBjNDA0MDUwLWE4YzctNDYxMi04NDM1LWM5YzA1ZDMwMzRmNyIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTpkZWZhdWx0In0.FQrmyHWgeNN68PaKHO69z1ULq89ObgEqEwkE2sLhKBuufUTxsHRgdnakzJXMWhJ4Bh9qoVvh6odEZTmQimtpLAE-FIEwv0_Fhnca33vxvkIjwGiR2lIFR_gRuDajMkBiR5yCvWV-hVlf6KEvdx7e54QaPAnijPulQR2cTw4jySrSZNT7tfX0oekY4e_FYaTlc4skYDk8ibC0FaEAa_BlQl_g2y2bGoYa23d3kTOcU3yxvaPEbx5SnJsuPrjokc3Cze0gcPoSLr2GxPmkFurPViz6dh7P1wXIIJDQ0WT8HRDv8kWy3L-YATRfPZvWQvGMUYMKVCfKbTJbjggU-LtoZA
kubernetes手間かかるわぁ。