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

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は売値高いんやけど、メモリ少ないねん。 後でメモリ追加できんらしいし、やっかいやなぁ。 ...

minikubeを利用6-クラスタのバージョンアップ

前回まで でdjangoアプリの色合い変更まで作ったので、その続き。 2023年6月にはkubernetesのバージョンは1.27が出てたけど、minikubeで使えるクラスタは1.26やった。 7月3週目ぐらいにbrewの更新見てたら1.27が使えるようになってた。 kubernetesの親バージョンリリースがあったら、minikubeには1ヶ月後にリリースがあるんかなぁ。 その後、何回かminikubeのバージョン上げた。 2024年5月中にminikube v1.33.1、Docker 26.0.2 で Kubernetes v1.30.0 2024年4月末にminikube v1.33.0、Docker 26.0.1 で Kubernetes v1.30.0 2023年11月にminikube v1.32.0、Docker 24.0.7 で Kubernetes v1.28.3 2023年8月にminikube v1.31.2、Docker 24.0.4 で Kubernetes v1.28.0-rc.1 brewで見てると定期的なアップデートがある minikubeが使えるkubernetesのバージョンはコマンドラインで確認できる。 brewでkubectlやminikubeのバージョンが上がったのを見たので、もしかしてバージョンあげれるかもって使えるバージョンの確認やってみた。 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 nari@gvis-mac script % minikube config defaults kubernetes-version | more * v1.27.3 * v1.27.2 * v1.27.1 * v1.27.0 * v1.27.0-rc.1 * v1.27.0-rc.0 * v1.27.0-beta.0 * v1.27.0-alpha.3 * v1.27.0-alpha.2 * v1.27.0-alpha.1 * v1.26.6 * v1.26.5 * v1.26.4 * v1.26.3 * v1.26.2 * v1.26.1 * v1.26.0 * v1.26.0-rc.1 * v1.26.0-rc.0 * v1.26.0-beta.0 * v1.26.0-alpha.3 * v1.26.0-alpha.2 * v1.26.0-alpha.1 * v1.25.11 :(中略) これ発見したときのkubectlのバージョンはこんな感じ。 ...

 ⭐️

minikubeを利用5-Djangoの見え方変えた

前回まで で運用スクリプトまで作ったので、その続き。 DjangoのPodを動かすために追加した箇所をメモ。 Djangoの画面見え方を変更 GCE ubuntu22 linuxでは青色基調。 local ubuntu22 linuxでは緑色で見せてる。 macの中のminikubeではグレーにした。 他にもDjango特有の更新したのでそのメモ。 DjangoのPod向け定義 データベース接続先がsettings.pyってファイルに書いてある。 docker-composeで起動する直前に、他にもいくつのかのファイルを上書きコピーしてる。 あとは、見た目の色を変えるためにcssの定義を1セット用意してそれぞれをDjangoのPodが動いてるhyperkitの中で上書きコピーする。 settings.pyを追加で用意(settings-gvis-mac.py) cssファイルにグレーの定義を入れたもの(static/admin/CommonSilverフォルダとその中のgvis.css) settings.pyとcssファイルをDjangoのフォルダにコピーするスクリプト(minikubeCopy.sh) settings.pyの新規作成 ホスト名定義はGV_CONST_HOSTってところに書いてるので、DjangoのPod用に作成。 あとはALLOWED_HOSTSもPodのホスト名のsv-djangoを追記。 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 # ローカルデータベース GV_CONST_HOST = 'gvis-mac.intra.gavann-it.com' GV_CONST_HOST_LCL_HTTP = "http://" + GV_CONST_HOST GV_CONST_HOST_LCL_HTTPS = "https://" + GV_CONST_HOST GV_CONST_DOCKER_HTTPS_PORT = "30443" GV_CONST_DOCKER_HTTP_PORT = "38080" GV_CONST_DBENVNAME = "nariDB_1st" GV_CONST_DBUSERNAME = "nari" GV_CONST_DBPASSWD = "XXXXXXXXX" GV_CONST_DBPORT = "13306" ####################################################################### ALLOWED_HOSTS = [GV_CONST_HOST,'localhost','sv-django'] # Database # https://docs.djangoproject.com/en/3.1/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': GV_CONST_DBENVNAME, # 実際に作ってあるDB名を設定する 'USER': GV_CONST_DBUSERNAME, 'PASSWORD': GV_CONST_DBPASSWD, 'HOST': GV_CONST_HOST, 'PORT': GV_CONST_DBPORT, 'OPTIONS': { 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", }, } } cssファイルにグレーの定義 cssにはボタンの基本的な色設定とか入ってる。 ...

 ⭐️