ギャバンITサービス
お菓子の家が作れるシステムエンジニアです

microk8sを利用7-macmini M4でarm64のkubernetesクラスタ

作成イメージ arm64のホストをutmの中に作って⭐️印の箇所を作ってく。 だんだんデカなってきたな。頭の体操にはええか。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 <----------- M4 mac -------dev-> <--------------------- VMware on Windows11 pro -------------stg--> <-------- Google cloud ---prd--> +-M4 macmini sequoia-----------+ +-kubelinux(ubuntu24) --------+ +-local ubuntu24 linux--------+ +-GCE ubuntu24 linux----------+ | +-utm ---------------------+ | | +-microk8s-------+ +-vmdk-+ | | +-docker---------+ +-vmdk-+ | | +-docker---------+ +--pv--+ | | | +-sequoia arm64-------+ | | | | +-Pod-------+ | | data | | | | +-container-+ | | data | | | | +-container-+ | | data | | | | | vscode/cyberduck | | | | | | Django | | | d1 | | | | | Django | | | d1 | | | | | Django | | | d1 | | | | | office/brew/rdp | | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | +---------------------+ | | | | +-Pod-------+ | | | | | | +-container-+ | | | | | | +-container-+ | | | | | | +-kubearm(ubu24) ⭐️--+ | | | | | 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 | ||| | | |+-----------+ +-----+| | | +-----------------------------+ ||| | | +---------------------+ | | ||| | +--------------------------+ | ||| | ^ ^ | ||| | | | +---------------+ | ||| | | | |Django & xrdp | | ||| | | | |docker image to| | ||| | | | |ctr registry | | ||| | | | +---------------+ | ||| | | | | ||| | +-rancher desktop----------+ | ||| | | docker on lima | | ||| +---------------------------------+ | | +-container-+ +------+ | | ||| | d1/d2/d3 text or binary data | | | | Django | | d1 | | | ||| | d4 tls data that make each host | | | +-----------+ +------+ | | ||| +---------------------------------+ | | +-container-+ | | | | <-----------------------------------------------+|| | | | mariadb | | d2 | | | <------------------------------------------------+| | | +-----------+ +------+ | | <-------------------------------------------------+ | | +-container-+ | | | | | | | xrdp-ubu24| | d3 | | | | | +-----------+ +------+ | | | | +-container-+ +------+ | | | | | https | | d4 | | | | | +-----------+ +------+ | | | +--------------------------+ | | | | +-music----------+ | | | 8400(37GB) | | | +----------------+ | +------------------------------+ 結論 microk8sでサラっと動かすつもりやったんやけど、multipassがうまいこと行かんかったからUTM使うことにした。 ...

macでmicrok8sを利用4-macmini M4でx86のkubernetesを利用

先月M4のmacminiに切り替えた。intelやなくてM4になって爆速を期待して買った。 macの仮想化のベースをvmwareからUTMに切り替えて、sequoiaはめっちゃ速くなった。 次はx86のubuntu24の中で維持してるdockerのxrdp/django/mariadbのコンテナをM4のmacminiで動かしたい。 自分の勘違いもあって時間はかかったけど、実現はできたのでそのメモ。 ただし、あまりにも性能出ないので、arm64の中でx86のubuntu24のホストを動かすのは3日でやめた。 結論 右から順に、GCEってあるgoogle cloudに本番データ置いてる。 GCE(google cloud)で稼働させてるdockerコンテナのデータをlocal ubuntu24でも利用しつつ、sequoiaに持ってくる。 macminiはフロントとして使う環境やから、utmで仮想化したsequoia動かしてて、今回はubuntu追加した。 x86エミュレートさせたubuntu24の中で、ctrで動くmicrok8s使ってkubernetes環境を作る。 ⭐️印が今回作った箇所。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 +-macmini sequoia--------------+ +-local ubuntu24 linux--------+ +-GCE ubuntu24 linux----------+ | +-utm----------------------+ | | +-docker---------+ +-vmdk-+ | | +-docker---------+ +--pv--+ | | | +-sequoia-------------+ | | | | +-container-+ | | data | | | | +-container-+ | | data | | | | | vscode/cyberduck | | | | | | Django | | | d1 | | | | | Django | | | d1 | | | | | office/brew/rdp | | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | +---------------------+ | | | | +-container-+ | | | | | | +-container-+ | | | | | | +-ubuntu24 x86⭐️------+ | | | | | mariadb | | | d2 | | | | | mariadb | | | d2 | | | | | ctr microk8s | | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | |+-container-+ | | | | | +-container-+ | | | | | | +-container-+ | | | | | | ||kubernetes | | | | <- | | | xrdp-ubu24| | | d3 | | <- | | | xrdp-ubu24| | | d3 | | | | |+-----------+ | | | <- | | +-----------+ | +------+ | <- | | +-----------+ | +------+ | | | |+-container-+ +/data+| | | <- | | | | <- | | +-container-+ | | | | ||Django | | d1 || | | | | | | | | | gitlab | | | | | |+-----------+ +-----+| | | | | | | | | +-----------+ | | | | |+-container-+ | || | | | | +-container-+ | +------+ | | | +-container-+ | +------+ | | | ||mariadb | | d2 || | | | | | https | | | d4 | | | | | https | | | d4 | | | | |+-----------+ +-----+| | | | | +-----------+ | +------+ | | | +-----------+ | +------+ | | | |+-container-+ | || | | | +----------------+ | | +----------------+ | | | ||xrdp-ubu24 | | d3 || | | +-----------------------------+ +-----------------------------+ | | |+-----------+ +-----+| | | | | |+-container-+ +-----+| | | | | ||https | | d4 || | | | | |+-----------+ +-----+| | | | | +---------------------+ | | | +--------------------------+ | | | | +-music----------+ | | | 8400(37GB) | | | +----------------+ | +------------------------------+ M4にx86をエミュレートさせて動かしたとき、local ubuntu24の中で動くxrdpコンテナに比べたら、114Mbpsって見えるからインターネット利用は8分の1程度の速度、ブラウザ利用の速度はintel版のminikube/microk8sと同じかそれ以下のもっさりした動きになった。 ...

 ⭐️

minikubeを利用9-minikubeでqemu使う

2023年はGKEから派生して、ローカルmacの中で minikube使い始めた。 先月までのminikubeのクラスタは、hyperkitの中で独自のlinuxが動いて、dockerコンテナとしてkubernetesのコントロールプレーンが動いてた。 2024年6月ぐらいからhyperkitが非推奨になったので、脱却して qemuを使い始める 。 今年の下期にm4のmacmini仕入れて使いたいから、qemuで練習始めたる。 minikubeのドライバ指定と、qemu2用のサービス指定 最初にminikubeアンインストールしてhyperkitの入ってた領域も潰した。 もう1回minikubeインストールしてqemuを仮想マシン指定して使い始める。 minikubeのサイトに指定の方法が書いてある。 qemu | minikube minikube.sigs.k8s.io 名前はqemuってあるけど、実際はqemu2をドライバに指定する。 前に一回やってみた けど深くは調べずにあきらめた。 nari@gvis-mac script % minikube config set driver qemu2 よー見たら、socket_vmnetってのを使わなアカンらしい。 え、これrootで動かさなあかんのか。 そういえば、ubuntu24をqemuでbridgeネットワーク使って動かすときには、特権いるみたいなこと書いてるところあったっけ。 ログ捨てたけど、これやっとかんとディスクのマウントがうまくいかんかったし、「トンネリングにいるで」ってある。 とりあえずbrewでインストールやっとく。 1 2 brew install socket_vmnet brew tap homebrew/services せっかくスクリプト化してんのにパスワード打たなアカンのかぁ。 この時点でhyperkitのほうがええなぁ。 クラスタ作り替えのスクリプト 普段はクラスタのバージョンあげるためのスクリプトを作って用意してる。 このへん で手動でやってることをまとめた処理。 それを少しいじって、qemuでのクラスタを用意する。 処理の後半でpv/configmap/serviceの定義もやってる。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 ## ------------------------------------------------------------------------- ## Script Name : 300_minikubeClusterRecreate.sh ## Created by : T.Naritomi ## on : 2023.08.26 ## Updated by : 2024.06.23 ## on : ## Parameters : ## Return Code : 0=Normal End ## Comments : change driver hyperkit -> qemu2 ## ------------------------------------------------------------------------- ## ---define---------------------------------------------------------------- EXEC_HOME=/Users/nari/Documents/personal/script # Execute Home directory MINK_HOME=/Users/nari/Documents/personal/minikube # minikube Home directory LOG_FILE=/Users/nari/Documents/personal/log/300_minikube.log # Log file NEWEST_VER=`minikube config defaults kubernetes-version | head -1 | awk '{ print $2}'` GVIS_CPU=4 GVIS_MEM=6000 GVIS_DSK=90GB ⭐️50GBにしてたのを、qcow2でどうなるかやってみたかったから容量増やした GVIS_DRV=qemu2 ⭐️書き換えた ## ---detail---------------------------------------------------------------- echo '---newest version---' echo ${NEWEST_VER} read -p "--- minikube Data save ready ? ---(y/N):" yn case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac read -p "--- minikube Recreate cluster ready ? ---(y/N):" yn case "$yn" in [yY]*) ;; *) echo "abort." ; exit ;; esac echo '---Recreate start---' rm -f ${LOG_FILE} echo ${LOG_FILE} minikube delete --purge --all ⭐️クラスタ完全削除 ## add socket_vmnet because use qemu2 HOMEBREW=$(which brew) && sudo ${HOMEBREW} services restart socket_vmnet ⭐️sudoせなアカン残念な行、再実行することあるからrestart指定 minikube config set cpus ${GVIS_CPU} minikube config set memory ${GVIS_MEM} minikube config set disk-size ${GVIS_DSK} minikube config set driver ${GVIS_DRV} echo -------- `date +%F_%T` -------- >> ${LOG_FILE} minikube config view >> ${LOG_FILE} minikube delete >> ${LOG_FILE} minikube start --kubernetes-version ${NEWEST_VER} \ --driver=${GVIS_DRV} \ --network socket_vmnet >> ${LOG_FILE} ## --mount --mount-string ${MINK_HOME}/:/minikubeMac >> ${LOG_FILE} ⭐️マウントしたらクラスタ落ちることあるからやめとく cat ${LOG_FILE} sleep 20 ⭐️kubernetesクラスタが安定するまでちょっと一息、こっから下のapplyしてる箇所で永続化領域作ったり他の定義も作ってもらいましょ kubectl config get-contexts kubectl get pod -n kube-system kubectl apply -f ${MINK_HOME}/gvis-PersistentVol-mariadb1011.yaml kubectl apply -f ${MINK_HOME}/gvis-PersistentVol-mariadb1011conf.yaml kubectl apply -f ${MINK_HOME}/gvis-PersistentVol-sv_django-ssl_certs.yaml kubectl apply -f ${MINK_HOME}/gvis-PersistentVol-sv_django-uwsgi-nginx.yaml kubectl apply -f ${MINK_HOME}/gvis-PersistentVol-ubun.yaml kubectl apply -f ${MINK_HOME}/mariadb11-txt-configmap.yaml kubectl apply -f ${MINK_HOME}/sv-django-service.yaml kubectl apply -f ${MINK_HOME}/sv-https-portal-service.yaml kubectl apply -f ${MINK_HOME}/sv-mariadb1011-service.yaml echo -------- `date +%F_%T` -------- >> ${LOG_FILE} minikube dashboard & sleep 300 ⭐️何度かやって必要って思った ls -lh ~/.minikube/machines/minikube ⭐️目で見て確認 ## minikube cp ${MINK_HOME}/nariDockerDat/gvis-pv-ubun.tar.gz /data/ ⭐️ここでコピー処理するとクラスタ停止してまう exit $? qemuでminikube発進 マシンを作ってる途中のファイルを確認してみる。 ...

 ⭐️

minikubeを利用8-dockerとkubernetesの使いこなし

dockerはもう5年以上、GKEのkubernetesとminikubeは今年の春から使い始めた。 普段使う開発言語はdjango(python)なんやけど、どう扱えば改善・テスト・本番反映・利用がうまくいくかってことを考えてみた。 ちょうどインボイス対応でdjangoの処理書き換えるから、そのための消費税計算機能とかもつけるし。 開発はやっぱりローカルPCでのdocker 自分にはこれが一番しっくりくる。 本番環境のGCPにあるVMもこれと同じ。 フロントエンドマシンはmacやから、ubuntu22でssdドライブに置いたvmdkのデータ領域をsamba共有させてvscodeで編集。 vscodeのremote developmentって方法もあるけど、シンプルやなかったから使ってない。 1 2 3 4 5 6 7 8 9 10 11 12 13 +-local ubuntu22 linux VM-----+ | +-docker---------+ +-vmdk-+ | | | +-container-+ | | data | | | | | Django | | | d1 | | | | +-----------+ | +------+ | | | +-container-+ | | | | | | | mariadb | | | d2 | | | | +-----------+ | +------+ | | | +-container-+ | | | | | | | xrdp-ubu22| | | d3 | | | | +-----------+ | +------+ | | +----------------+ | +-----------------------------+ GKE/EKSのkubernetesで動かすのはどんなとき? s3にデータを溜め込んでるとか、機械学習で大量のデータを作ってpvにcsv置いてるとか、スケーラブルなサーバ運用したいならGKE/EKS使えばええ。 ...

 ⭐️

minikubeを利用7-細かい不具合

朝起動して昼頃まで放置したり、時々xrdpのpodへ繋いでPodのデータベースをdjangoアプリ越しに見つけた細かい不具合がある。 なんでかわからんけどエラーになってたり、こうなったらええなぁってことをメモ。 まだkubernetesの理解は深くないから、何年かしたら自力解決できるかもしれん。 ポートフォワードでエラー出る たまにポートフォワードができてないときある(dbつながらんとか)。 httpsのポートフォワードがたまに勝手にエラーになって止まってる(djangoアプリを拾ってるhttpsのpodにつながらんとか)。 1 2 E0829 07:23:36.624039 3267 portforward.go:409] an error occurred forwarding 30443 -> 443: error forwarding port 443 to pod e3445d2af9dd86a800da92e7608887459fafbd9ccfc13db409acbef081a79769, uid : exit status 1: 2023/08/28 22:23:36 socat[11858] E write(5, 0x1109000, 24): Broken pipe error: lost connection to pod なんでBroken pipeになるんやろな。 いきなり表示されるし、まったく発生せんときもある。 minikube特有のポートフォワード使わずに、ingressってのを学んで使ったらええんかなぁ。 できたらええなと思うこと hyperkitの永続化領域(/data)を直接macで開けんからvscodeでdjangoのソースを修正しながら動作確認できん 👉ローカルlinuxのdocker環境はsambaで共有してて、macからvscodeでいじってる。 hyperkitはubuntuでもredhatでもないし、samba入れる方法がわからん(どっかに書いてるんかなぁ) 👉aptとかdnfあらへんし、gcc入ってたらmakeできるかもっと思ったけど、gccも入ってへん。そもそもkubernetesのバージョン上げるためにクラスタ作り直したらhyperkitも吹っ飛ぶから毎回設定することになる。そんなんやってられへん。 コントロールプレーンをdockerコンテナで動かしてるんやから、hyperkitやなくてノードもコンテナで動かしてくれたらええのに 👉軽いlinuxをコンテナとして動かしたら、kubernetesのワーカーノードにしたとき性能劣化しまくるんかなぁ virtualboxとかvmware fusionとか動きが重たいvm使うのイヤ。 秋から来年にかけて m3のmacmini出てくれるかもしれん って記事があった。 今のintel-macとはオサラバして別のアプローチやってみるかなぁ。 今年にm2出てたのに、もう次の出すんやなぁ。 m2のmac miniは売値高いんやけど、メモリ少ないねん。 後でメモリ追加できんらしいし、やっかいやなぁ。 ...