microk8sを利用6-x86のubuntu24でノード作成してkubernetesクラスタ

新しいめのmacminiでM4とはいえ、x86エミュレートさせるとめっちゃ処理重くて使い物にならんかった

後でチューニングできる箇所見つけられるかもしれんけど、すぐにツボは発見できず。

x86エミュレートでkubernetesを維持するには苦しいので、x86のwindows側で動くlinuxホストと同列でkubernetes用のlinuxホストを作る。

爆速期待。

macminiの中は、arm64でdjango/httpsとmariadbのみのkubernetesクラスタを別で目指す。

作成イメージ

x86ホストを用意して⭐️印箇所を作ってく。

<----------- M4 mac ----------->     <--------------------- Windows11 pro VMware --------------------->    <-------- Google cloud -------->

+-macmini sequoia--------------+     +-local ubuntu24 linux ⭐️----+    +-local ubuntu24 linux--------+    +-GCE ubuntu24 linux----------+
| +-utm----------------------+ |     | +-microk8s-------+ +-vmdk-+ |    | +-docker---------+ +-vmdk-+ |    | +-docker---------+ +--pv--+ |
| |  +-sequoia-------------+ | |     | |  +-Pod-------+ | | data | |    | |  +-container-+ | | data | |    | |  +-container-+ | | data | |
| |  |  vscode/cyberduck   | | |     | |  | Django    | | |  d1  | |    | |  | Django    | | |  d1  | |    | |  | Django    | | |  d1  | |
| |  |  office/brew/rdp    | | |     | |  +-----------+ | +------+ |    | |  +-----------+ | +------+ |    | |  +-----------+ | +------+ |
| |  +---------------------+ | |     | |  +-Pod-------+ | |      | |    | |  +-container-+ | |      | |    | |  +-container-+ | |      | |
| |  +-ubuntu24 x86️------+ | | |     | |  | mariadb   | | |  d2  | |    | |  | mariadb   | | |  d2  | |    | |  | mariadb   | | |  d2  | |
| |  | ctr microk8s        | | |     | |  +-----------+ | +------+ |    | |  +-----------+ | +------+ |    | |  +-----------+ | +------+ |
| |  |+-container-+        | | |     | |  +-Pod-------+ | |      | |    | |  +-container-+ | |      | |    | |  +-container-+ | |      | |
| |  ||kubernetes |        | | | <-  | |  | xrdp-ubu24| | |  d3  | | <- | |  | xrdp-ubu24| | |  d3  | | <- | |  | xrdp-ubu24| | |  d3  | |
| |  |+-----------+        | | | <-  | |  +-----------+ | +------+ | <- | |  +-----------+ | +------+ | <- | |  +-----------+ | +------+ |
| |  |+-container-+ +/data+| | | <-  | |                |          | <- | |                |          | <- | |  +-container-+ |          |
| |  ||Django     | | d1  || | |     | |                |          |    | |                |          |    | |  | gitlab    | |          |
| |  |+-----------+ +-----+| | |     | |                |          |    | |                |          |    | |  +-----------+ |          |
| |  |+-container-+ |     || | |     | |  +-Pod-------+ | +------+ |    | |  +-container-+ | +------+ |    | |  +-container-+ | +------+ |
| |  ||mariadb    | | d2  || | |     | |  | https     | | |  d4  | |    | |  | https     | | |  d4  | |    | |  | https     | | |  d4  | |
| |  |+-----------+ +-----+| | |     | |  +-----------+ | +------+ |    | |  +-----------+ | +------+ |    | |  +-----------+ | +------+ |
| |  |+-container-+ |     || | |     | +----------------+          |    | +----------------+          |    | +----------------+          |
| |  ||xrdp-ubu24 | | d3  || | |     +-----------------------------+    +-----------------------------+    +-----------------------------+
| |  |+-----------+ +-----+| | |                                        
| |  |+-container-+ +-----+| | |     +--smb share ⭐️---------------+
| |  ||https      | | d4  || | |     |  windows smb share          |
| |  |+-----------+ +-----+| | |     +-----------------------------+
| |  +---------------------+ | |
| +--------------------------+ |
|                              |
| +-music----------+           |
| | 8400(37GB)     |           |
| +----------------+           |
+------------------------------+

vmwareで普通にノード足す

インストール10分以内で終わる。UTMで設定したリソースと同じCPU/メモリ/ディスク/IPアドレスを割り当てて、Ubuntu24serverをサービス一切選択せずすっぴん状態でインストールして用意しとく。

x86-microk8s-kubelinux

mac内で使ってたkubernetesのために使う領域をwindowsホストの中にコピーしといて、共有領域使ってマウントさせる。

x86-microk8s-kubelinux

仮想マシンの設定

このへんの設定をやってく。

microk8sではkubectlはrootユーザで使うときの文字列が長いからエイリアス作っとく。

alias kubectl='microk8s kubectl'

IPを引き継がせたら宅内DNSの効き目のおかげでmacから即接続できる。

共有フォルダ使う

windowsホスト母艦にしてて、その中にkubernetesの領域用意しとく。

vmwareの共有機能でもええかなと思ったけど、ちゃんと動かん箇所あったからsmb共有をマウント利用した。

x86-microk8s-kubelinux

vmwareのフォルダ共有ではアカン

UTMでフォルダの共有はfstabに書いて使った。vmwareやとちょっと違う。

長いことvmware使ってるけど、親ホストとの共有機能って一回もやったことなかったな。やってみよか。

linuxでsamba動かしてるから、そこばっかり使ってたしな。

mountするにはどうしたらええか探してみた。
実施されてる方がおられた。作者さんありがとう。

VMwareで設定した共有フォルダのマウント方法 - Qiita
経緯VMware WorkstationにおいてホストOSとゲストOS間で共有フォルダを設定しているが、ゲストOS再起動後は共有フォルダへのリンクが切れてしまう。VMware Workstati…

コマンドラインでやるってことは、fstab使わんのやね。代わりにfuse使うみたい。

OS起動したときにマウントするにはどないしたらええんやろ。

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

VMwareのLinuxゲストOSで共有フォルダを自動マウントする方法
はじめにこんにちは。今回は、VMwareを使用している方で、LinuxゲストOSとホストOS間でフォルダを共有したい方に向けて、共有フォルダを起動時に自動的にマウントする方法をご紹介します。VMwareは、仮想化ソフトウェアの一つで、複数の

自分用にアレンジして自動マウントやってみた。

root@kubelinux:~# cat /etc/systemd/system/vmware-shared-folders.service
[Unit]
Description=VMware Shared Folders Mount

[Service]
Type=forking
ExecStart=/usr/bin/vmhgfs-fuse .host:/ /microk8s/ -o allow_other,uid=1000 ⭐️ルートのmicrok8sフォルダにマウントするコマンドライン

[Install]
WantedBy=multi-user.target
root@kubelinux:~# 
root@kubelinux:~# mkdir /microk8s ⭐️マウントポイントね
root@kubelinux:~# /usr/bin/vmhgfs-fuse .host:/ /microk8s/ -o allow_other,uid=1000 ⭐️マウントするコマンドラインのテスト
root@kubelinux:~# df -h | grep microk8
vmhgfs-fuse                        466G  237G  229G  51% /microk8s ⭐️つながる
root@kubelinux:~# echo aaa >>  /microk8s/kubernetes/foo.txt  ⭐️書き込みテストしてみる
root@kubelinux:~# cat /microk8s/kubernetes/foo.txt  ⭐️読み込みテストできてるやん
aaa
root@kubelinux:~# ls -l /microk8s/kubernetes/
total 1
-rwxrwxrwx 1 nari root 5 Dec 21 23:26 foo.txt ⭐️マウントするコマンドラインがきいてて、uid=1000=nariの所有権になってる
root@kubelinux:~# 
root@kubelinux:~# systemctl daemon-reload ⭐️サービス定義をデーモンとして認識させる
root@kubelinux:~# systemctl enable vmware-shared-folders.service ⭐️サービス有効化
Created symlink /etc/systemd/system/multi-user.target.wants/vmware-shared-folders.service → /etc/systemd/system/vmware-shared-folders.service.
root@kubelinux:~# systemctl status vmware-shared-folders.service ⭐️presetがenableになってる確認
○ vmware-shared-folders.service - VMware Shared Folders Mount
     Loaded: loaded (/etc/systemd/system/vmware-shared-folders.service; enabled; preset: enabled)
     Active: inactive (dead)
root@kubelinux:~# 

なるほど。これでOS再起動したら自動マウントできてた。

microk8sのデータをwindows側でコピーしたら、マウントしたフォルダで見えるようになった。

root@kubelinux:~# ls -l /microk8s/kubernetes/
total 27
-rwxrwxrwx 1 nari root  809 Dec 22 08:38 cl-ubun-pod.yaml
-rwxrwxrwx 1 nari root 1393 Dec 22 08:38 gvis-PersistentVol-mariadbconf.yaml
-rwxrwxrwx 1 nari root 1361 Dec 22 08:38 gvis-PersistentVol-mariadb.yaml
-rwxrwxrwx 1 nari root 1405 Dec 22 08:38 gvis-PersistentVol-sv_django-ssl_certs.yaml
-rwxrwxrwx 1 nari root 1414 Dec 22 08:38 gvis-PersistentVol-sv_django-uwsgi-nginx.yaml
-rwxrwxrwx 1 nari root 1352 Dec 22 08:38 gvis-PersistentVol-ubun.yaml
-rwxrwxrwx 1 nari root   12 Dec 22 08:38 kubernetes.txt
drwxrwxrwx 1 nari root 4096 Dec 22 08:38 log
-rwxrwxrwx 1 nari root  280 Dec 22 08:38 mariadb-txt-configmap.yaml
drwxrwxrwx 1 nari root 4096 Dec 22 08:41 nariDockerDat
drwxrwxrwx 1 nari root 4096 Dec 22 08:38 script
-rwxrwxrwx 1 nari root  839 Dec 22 08:38 sv-django-pod.yaml
-rwxrwxrwx 1 nari root  211 Dec 22 08:38 sv-django-service.yaml
-rwxrwxrwx 1 nari root 1003 Dec 22 08:38 sv-https-portal-pod.yaml
-rwxrwxrwx 1 nari root  287 Dec 22 08:38 sv-https-portal-service.yaml
-rwxrwxrwx 1 nari root 1899 Dec 22 08:38 sv-mariadb-pod.yaml
-rwxrwxrwx 1 nari root  214 Dec 22 08:38 sv-mariadb-service.yaml
root@kubelinux:~# 

scriptのフォルダあるから、クラスタ操作する運用スクリプトが使える。

logのフォルダもあるんやけど、tailしたらわけわかめなエラー出るやんけ!!

tail: cannot determine location of 'kube.log'. reverting to polling: Input/output error

ログちゃんと見せられへんのか。ちゃんと表示できんのは困る。

アカン、この方法やめ。

smb共有をマウントする

vmwareの共有機能使うのやめて、smbマウント使う。

昔にcentos使ってたときwindowsのフォルダを共有させてマウント利用させることがあったなぁ。

なんかのモジュール入れてmount使ったらええはず。

ubuntuでどうやるんやろか。説明されてる方がおられた。

作者さんありがとう。

Ubuntu から Windows の共有フォルダをマウントして利用する - Qiita
HOWTOWindows 側共有フォルダの準備Linux からアクセスしたいフォルダを共有フォルダにしてください。Linux 側必要なパッケージcifs-utils が入っていなければ入…

cifs-utilsをaptしてから、マウントしたらええらしい。

root@kubelinux:~# mount -t cifs -o username=nari,password=XXXXXXXX //192.168.1.40/kubernetes /microk8s
root@kubelinux:~# ls
snap
root@kubelinux:~# dff 
Filesystem                         Size  Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv   57G  8.2G   46G  16% /
/dev/sda2                          2.0G   72M  1.8G   4% /boot
//192.168.1.40/kubernetes          466G  250G  217G  54% /microk8s ⭐️smbマウントして見えとる
root@kubelinux:~# 

いけそうやね。

さっきvmwareの共有マウントで使ったvmware-shared-folders.serviceって定義を名前変更して使えば、OS起動したときにマウントしてくれる。

root@kubelinux:/microk8s/script# mv /etc/systemd/system/vmware-shared-folders.service /etc/systemd/system/gvis-smb-folders.service ⭐️名前変える
root@kubelinux:/microk8s/script# vi /etc/systemd/system/gvis-smb-folders.service ⭐️定義変える
root@kubelinux:/microk8s/script# cat /etc/systemd/system/gvis-smb-folders.service
[Unit]
Description=gvis Shared Folders Mount

[Service]
Type=forking
ExecStart=mount -t cifs -o username=nari,password=xxxx //192.168.1.40/kubernetes /microk8s ⭐️認証とマウントポイント書いとく

[Install]
WantedBy=multi-user.target
root@kubelinux:/microk8s/script# 
root@kubelinux:/microk8s/script# systemctl daemon-reload ⭐️サービス定義をデーモンとして認識させる
root@kubelinux:/microk8s/script# systemctl enable gvis-smb-folders.service ⭐️サービス有効化
Created symlink /etc/systemd/system/multi-user.target.wants/gvis-smb-folders.service → /etc/systemd/system/gvis-smb-folders.service.
root@kubelinux:/microk8s/script# systemctl status gvis-smb-folders.service 
○ gvis-smb-folders.service - gvis Shared Folders Mount
     Loaded: loaded (/etc/systemd/system/gvis-smb-folders.service; enabled; preset: enabled)
     Active: inactive (dead)
root@kubelinux:/microk8s/script# 

マウントできたし、tailできるか確認してみると、変なエラーなくなってた。

root@kubelinux:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
tmpfs                              990M  1.4M  989M   1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv   57G  8.2G   46G  16% /
tmpfs                              4.9G     0  4.9G   0% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
/dev/sda2                          2.0G   72M  1.8G   4% /boot
tmpfs                              990M   12K  990M   1% /run/user/1000
//192.168.1.40/kubernetes          466G  250G  217G  54% /microk8s
root@kubelinux:~# 

システム起動の速度速くなった

UTMのときの起動直後はこんな感じやった。

x86-microk8s-kubelinux

vmwareの中のx86linux起動でかかってる時間は3.8倍速くなった。

前のと比べて、x86ネイティブになったんやから、そら速いわな。

root@kubelinux:~# systemd-analyze
Startup finished in 2.865s (kernel) + 3.071s (userspace) = 5.937s ⭐️UTMで23秒やったのがが5.9秒になって3.8倍速くなった。
graphical.target reached after 3.055s in userspace.
root@kubelinux:~# cat /run/systemd/resolve/resolv.conf | grep name
nameserver 172.16.17.15
nameserver 8.8.8.8
root@kubelinux:~# ip route
default via 192.168.1.1 dev ens32 proto static 
192.168.1.0/24 dev ens32 proto kernel scope link src 192.168.1.119 
root@kubelinux:~# 

クラスタ作成

運用スクリプト作っててよかった。

クラスタ作ったらブラウザでコンソールにトークン入力してログインしてみる。

x86-microk8s-kubelinux

おお、コンフィグマップもpvもちゃんとできとる。

x86-microk8s-kubelinux

標準出力はこうなってた。

root@kubelinux:/microk8s/kubernetes/script# sh ./300_kubeClusterRecreate.sh 
--- kube Data save ready ? ---(y/N):y
--- kube Recreate cluster ready ? ---(y/N):y
/microk8s/kubernetes/log/kube.log
snap "microk8s" is not installed
usermod: group 'snap_microk8s' does not exist
Infer repository core for addon registry
Infer repository core for addon hostpath-storage
Infer repository core for addon hostpath-storage
Infer repository core for addon host-access
persistentvolume/gvis-pv-mariadb created
persistentvolumeclaim/gvis-pv-mariadb-claim created
persistentvolume/gvis-pv-mariadbconf created
persistentvolumeclaim/gvis-pv-mariadbconf-claim created
persistentvolume/gvis-pv-django-sslcerts created
persistentvolumeclaim/gvis-pv-django-sslcerts-claim created
persistentvolume/gvis-pv-django-uwsgi-nginx created
persistentvolumeclaim/gvis-pv-django-uwsgi-nginx-claim created
persistentvolume/gvis-pv-ubun created
persistentvolumeclaim/gvis-pv-ubun-claim created
configmap/sv-mariadb-txt created
service/sv-django created
service/sv-https-portal created
service/sv-mariadb created
NAME        STATUS   ROLES    AGE   VERSION
kubelinux   Ready    <none>   20s   v1.32.0
root@kubelinux:/microk8s/kubernetes/script# Checking if Dashboard is running.
Infer repository core for addon dashboard
Infer repository core for addon metrics-server
Waiting for Dashboard to come up.
Trying to get token from microk8s-dashboard-token
Waiting for secret token (attempt 0)
Dashboard will be available at https://127.0.0.1:10443
Use the following token to login:

吐かれたログはこんなん。1分かからず作り終わってるんやね。

root@kubelinux:/microk8s/log# tail -f kube.log 
---Recreate start---
-------- 2024-12-24_04:42:30 --------
microk8s removed
-------- 2024-12-24_04:42:56 --------
microk8s (1.32/stable) v1.32.0 from Canonical** installed
Enabling default storage class.
WARNING: Hostpath storage is not suitable for production environments.
         A hostpath volume can grow beyond the size limit set in the volume claim manifest.

deployment.apps/hostpath-provisioner created
storageclass.storage.k8s.io/microk8s-hostpath created
serviceaccount/microk8s-hostpath created
clusterrole.rbac.authorization.k8s.io/microk8s-hostpath created
clusterrolebinding.rbac.authorization.k8s.io/microk8s-hostpath created
Storage will be available soon.
namespace/container-registry created
persistentvolumeclaim/registry-claim created
deployment.apps/registry created
service/registry created
configmap/local-registry-hosting configured
The registry will be created with the size of 30Gi.
Default storage class will be used.
Addon core/hostpath-storage is already enabled
Setting 10.0.1.1 as host-access
Host-access is enabled
-------- kubernetes cluster created --------
-------- 2024-12-24_04:43:34 --------

エイリアス定義もきいとるやん。

root@kubelinux:~# alias | grep kube
alias kubectl='microk8s kubectl'
root@kubelinux:~# kubectl get nodes,services 
NAME             STATUS   ROLES    AGE   VERSION
node/kubelinux   Ready    <none>   15m   v1.32.0

NAME                      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)               AGE
service/kubernetes        ClusterIP   10.152.183.1     <none>        443/TCP               15m
service/sv-django         ClusterIP   10.152.183.88    <none>        38080/TCP             14m
service/sv-https-portal   ClusterIP   10.152.183.41    <none>        30080/TCP,30443/TCP   14m
service/sv-mariadb        ClusterIP   10.152.183.247   <none>        13306/TCP             14m
root@kubelinux:~# 

エイリアスはsshでコマンドライン使ってるときだけ有効やから、運用スクリプトの中はmicrok8s kubectlって書かなアカン。

dockerイメージをインポート

teratermマクロ少し書き換えてdockerイメージの元ファイルをx86のkubernetes環境へscpコピーさせる。

x86-microk8s-kubelinux

コピー終わってgunzipする。

x86-microk8s-kubelinux

UTMの中のubuntuとは違って、共有フォルダ直接読み込めるのでイメージをインポートする。

x86-microk8s-kubelinux

このインポートやってる間はcpuもディスクI/Oもまぁまぁ食う。

x86-microk8s-kubelinux

maridbのデータコピーまで、M4のx86エミュレートに比べて半分ぐらいの10分ぐらいで終わる。

x86-microk8s-kubelinux

コピーしたらPod作らせる。

x86-microk8s-kubelinux

コマンドライン結果は長いけどteratermマクロで動くのは一瞬。楽ですなぁ。

永続化領域のコピー

mariadbのデータから流し込んでった。

永続化領域に定義したmax_allowed_packetが生きててデータ入ってくれてる。

静止画じゃ表現できんけど、応答速度速くなってる。

x86-microk8s-kubelinux

djangoのアプリケーションコンテナもちゃんと流し込む。

x86のホストを作ったけど、macで作ったときのホスト名とIPをそのまま設定したから、settings.pyの定義変更せずにそのまま使った。

x86-microk8s-kubelinux

kubernetesのコンソール見ると、ちゃんとPod動いとる。

x86-microk8s-kubelinux

フォワーディング

mariadbとxrdpとdjangoコンテナをフォワーディングする。

x86-microk8s-kubelinux

windows側からデータベース接続だけ確認してみる。

ちゃんとパラメータ渡ってるし業務データあるやん。

x86-microk8s-kubelinux

djangoアプリからデータベース読めてる。

x86-microk8s-kubelinux

djangoの管理コンソールも認証できてるから、管理データベースもOK。

x86-microk8s-kubelinux

ネットワークの速度もdocker環境とほぼ同じで動いたから、x86のkubernetes環境できたな。

x86-microk8s-kubelinux

mac側はx86エミュレーションのlinuxはこれから捨てる。

GUIのコンテナ環境ないから、rancherのdocker/kubernetes環境でも作ってみよっかな。

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