macでmicrok8sを利用1-さらばminikube

hyperkitがdeprecateになったからqemuにしてみたら、どっかんどっかん落ちる。

クラスタは動くけど、minikube cpとかdocker loadとかディスクの読み書きを重めにしたときによく落ちる。

なんやねん、使いものにならんなぁ。やり方悪いんかなぁ。

しゃあないからqemuやめてmicrok8sやってみる。

MicroK8s - Zero-ops Kubernetes for developers, edge and IoT | MicroK8s
MicroK8s is the simplest production-grade conformant K8s. Lightweight and focused. Single command install on Linux, Wind...

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コンテナへリモートデスクトップ接続したときの様子は以下のとおり。

gvis-microk8s-start

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へ持っていって動かした時の試行錯誤の経緯。

インストールできるんか

ドキュメントあるやん。

MicroK8s - Installing MicroK8s on macOS | MicroK8s
MicroK8s is the simplest production-grade upstream K8s. Lightweight and focused. Single command install on Linux, Window...

まずは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の場合のインストールのやり方も書いてある。

MicroK8s - Installing MicroK8s on macOS | MicroK8s
MicroK8s is the simplest production-grade upstream K8s. Lightweight and focused. Single command install on Linux, Window...

そのままやのうて、CPUとかメモリとかサイズ指定したいやんけ。

クラスタ動くんか

サイズの後に単位つけたら怒られたから、クラスタ作るときは試行錯誤して書いた。

channelにクラスタのバージョン書けるみたい。

MicroK8s - Selecting a snap channel | MicroK8s
MicroK8s is the simplest production-grade upstream K8s. Lightweight and focused. Single command install on Linux, Window...
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ってなんや?

MicroK8s - MicroK8s Addons | MicroK8s
MicroK8s is the simplest production-grade upstream K8s. Lightweight and focused. Single command install on Linux, Window...

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動かしたときの入れとく。

gvis-microk8s-start

クラスタ潰したいときはこうするらしい。
いろいろ試したから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

トークン表示はランダムらしい。
開いてみるかな。

ブラウザの警告表示されるから自己証明書なんやな。

gvis-microk8s-start

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

gvis-microk8s-start

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

gvis-microk8s-start

ノードの情報見たら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 - How to work with a private registry | MicroK8s
MicroK8s is the simplest production-grade upstream K8s. Lightweight and focused. Single command install on Linux, Window...
MicroK8s - Image Side-loading | MicroK8s
MicroK8s is the simplest production-grade upstream K8s. Lightweight and focused. Single command install on Linux, Window...

試行錯誤してみたら、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 ⭐️

レジストリにイメージを入れるときに参考にさせてもらったサイト。

作者さんありがとう。参考にさせていただきました。

MicroK8sとSkaffoldで開発環境を構築した際のメモ(Mac) - Qiita
概要MicroK8sが native対応した というニュースを見て、Mac上でMicroK8sにより構築したクラスタとSkaffoldを使って開発をしてみようと思ったところ、ドキュメントに(直接的…

multipassのコマンドライン

multipassはそれ単体でいろいろできるらしい。

解説されてる方がおられた。作者さんありがとう。

macOS で multipass やってみようぜ (v1.0.0+mac) - Qiita
multipass ってなに?mutipass って入れてるのに multipath が多くヒットしてしまう。。。VM Engine として hyperkit, Hyper-V, Virtual…

使ったのは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手間かかるわぁ。

タイトルとURLをコピーしました