Multipass MicroK8sでMacにKubeflow環境構築
概要
家で桃鉄しながら気付きましたが
せっかくAI関係の会社に入ったのに、ここ1年ひたすらアプリ開発しかしてなくて
AI的な知見全然高まってない😫
ので、年末年始は好きなこと勉強することにした
GDBTやDeep Learning周りで遊んでみたいので
とりあえず、昔ちょこっと触ったKubeflowでローカル環境を作り直す
ローカル環境構築
なんか昔V1.0くらい触ってみたときは
MiniKFとかいうVagrantmとVirtualBox使った重めの物しかなかったですが
なんか久しぶりにドキュメント(v1.2)みたら選択肢めっちゃ増えとる👶
とりあえずMinikubeでいっとくか・・・
となりそうですが、いつもk8s周りで強い記事書かれてるこの方が
multipassに乗り換え記事書いてたんで自分も試しにこっちでいってみる
MacOS用のmultipassをインストールする
ここでダウンロードしてクリック&インストール
ubuntu作成でけた
$ multipass launch --name ubuntu-lts
$
$ multipass exec ubuntu-lts -- lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.1 LTS
Release: 20.04
Codename: focal
$
$ multipass list
Name State IPv4 Image
ubuntu-lts Running 192.168.64.9 Ubuntu 20.04 LTS
とりあえず作った物消しちゃう
$ multipass stop ubuntu-lts
$ multipass delete ubuntu-lts
$ multipass purge
Kubernetes環境の作成
multipassで作成したubuntuにmicrok8sをインストールして
kubernetes環境を作成
$ multipass launch --name kubeflow --mem 16G --disk 50G --cpus 4
$ multipass shell kubeflow
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ sudo snap install microk8s --classic
sudo snap install microk8s --classic --channel=latest/edge
microk8s (1.20/stable) v1.20.0 from Canonical✓ installed
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ sudo microk8s status --wait-ready
microk8s is running
high-availability: no
datastore master nodes: 127.0.0.1:19001
datastore standby nodes: none
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ sudo usermod -a -G microk8s $USER
ubuntu@kubeflow:~$ sudo chown -f -R $USER ~/.kube
Kubeflow環境を作成
上のステップで作成したユーザー・グループを有効にするために
ubuntuのinstanceから一旦抜けて再度入り直して以下実施
$ multipass shell kubeflow
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ microk8s.enable dns dashboard storage
...
Storage will be available soon
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ microk8s.enable kubeflow
Password [XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX]:
...
Waited 405s for operator pods to come up, 1 remaining.
Operator pods ready.
Waiting for service pods to become ready.
Congratulations, Kubeflow is now available.
The dashboard is available at http://10.64.140.43.xip.io
...
Congratulations, Kubeflow is now available.
microk8sのkubeflow有効にするあたりがめちゃ時間かかりましたが
上のコメントが出たのでとりあえず成功みたい
Kubeflow Dashboardアクセスのための下準備
hostsに追加設定し
macからどのポートでアクセスしても行けるようにiptable設定
(この辺ドキュメントに載ってないこといくつかあるので詰まる人多いんじゃなかろうか
$ multipass shell kubeflow
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ sudo -- sh -c "echo '10.64.140.43\t10.64.140.43.xip.io' >> /etc/hosts"
ubuntu@kubeflow:~$
ubuntu@kubeflow:~$ sudo iptables -P FORWARD ACCEPT
公式によると、こんな感じでmacのネットワーク設定からSOCKS Proxyしろとあるが
システム環境設定->ネットワーク->詳細->プロキシ->SOCKSプロキシ(チェック)->SOCKSプロキシサーバ(127.0.0.1:9999)
これセットするとChromeで普通のネット検索ができない場面があったりで辛かったので
Firefoxブラウザでのみセットする
そして、Proxy sessionを作る
$ multipass list
Name State IPv4 Image
kubeflow Running 192.168.64.10 Ubuntu 20.04 LTS
$
$ sudo ssh -i /var/root/Library/Application\ Support/multipassd/ssh-keys/id_rsa -D9999 ubuntu@192.168.64.10
Last login: Thu Dec 31 14:43:41 2020 from 192.168.64.1
ubuntu@kubeflow:~$
KubeflowのDashboardにアクセスしてみる
あとはFirefoxで以下の通りアクセスするとログイン画面が見れるはず
http://10.64.140.43.xip.io
microk8s.enable kubeflow
完了後に表示されたUsername, Passwordを入力するとDashboard画面が見えるはず!!
問題
うまくいったはずがNotebook Serversが表示されない😫
こいつがあるとJupyter notebook作成したりできるんですが・・・
あと、Artifact Storeでsorry hogehoge とか出てる・・・
半日以上悩んでいろいろ試みたけどわからん。
のでとりあえずissueに放り投げておいた
まとめ
AIで遊びたいのにまた関係ないところで長いことつまずいたw
もうローカル環境の遊び場こねくり回すのはいったんやめて
GCPにKubeflow環境作ることにした🌝
issueのお返事がきたらローカル構築再開してみよう👶
Discussion
This is a great post :) I think you describe well the main troubles with microk8s on multipass...
I think Multipass is a great and easy tool.
microk8s is also.
However using microk8s on multipass is surprisingly difficult to setup :(
I also was able to setup Kubeflow (deploy) but in my case I was able to access Jupyter notebook (unlike your case.) Maybe it is because I used a later version of Kubeflow/microk8s?
But even so, I found it not a good solution, because cannot connect without using the SOCKS proxy...
WHen I turn on the SOCKS proxy, it makes me unable to access internet from my browser.
I think it's really inconvenient compared to other method's like minikube.
However recently minikube does not seem officially supported by the latest version of Kubeflow :(
I guess the search for the best method continues...
(On Windows, I found WSL2+microk8s is nice, but still wonder about macOS)
Thank you for reading my post and giving me a good information!
That sounds tough...
Year.. I think so too.
If I find something good way to establish local Kubeflow environment, I'll post new article!