🧛‍♂️

Multipass MicroK8sでMacにKubeflow環境構築

2020/12/31に公開
2

概要

家で桃鉄しながら気付きましたが
せっかくAI関係の会社に入ったのに、ここ1年ひたすらアプリ開発しかしてなくて
AI的な知見全然高まってない😫
ので、年末年始は好きなこと勉強することにした

GDBTやDeep Learning周りで遊んでみたいので
とりあえず、昔ちょこっと触ったKubeflowでローカル環境を作り直す

ローカル環境構築

なんか昔V1.0くらい触ってみたときは
MiniKFとかいうVagrantmとVirtualBox使った重めの物しかなかったですが
https://note.com/ucwork/n/n296f46a984c9

なんか久しぶりにドキュメント(v1.2)みたら選択肢めっちゃ増えとる👶
https://www.kubeflow.org/docs/started/workstation/getting-started-macos/

とりあえずMinikubeでいっとくか・・・
となりそうですが、いつもk8s周りで強い記事書かれてるこの方が
multipassに乗り換え記事書いてたんで自分も試しにこっちでいってみる
https://qiita.com/mumoshu/items/6ff56badcfabe5ab1f49

MacOS用のmultipassをインストールする

ここでダウンロードしてクリック&インストール
https://multipass.run/#install

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に放り投げておいた
https://github.com/juju-solutions/bundle-kubeflow/issues/282

まとめ

AIで遊びたいのにまた関係ないところで長いことつまずいたw

もうローカル環境の遊び場こねくり回すのはいったんやめて
GCPにKubeflow環境作ることにした🌝

issueのお返事がきたらローカル構築再開してみよう👶

Discussion

aaroncnbaaroncnb

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)

ucworkucwork

Thank you for reading my post and giving me a good information!

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.

That sounds tough...

I guess the search for the best method continues...

Year.. I think so too.
If I find something good way to establish local Kubeflow environment, I'll post new article!