Kubeflow
介紹
Kubeflow是一個開源軟體,致力於提供使用者於Kubernetes上快速便捷的部署與管理ML Workflow。從最開始可以整合Jupyterhub
做單機訓練、或是利用tf-operator
管理分散式訓練,到最近加入Pipeline
功能來整合前面資料處理與後續的模型服務,功能性與規模可以說在這一兩年快速成長,版本也從2018年5月發行的0.1版推進到2019年11月的0.7版,並且預計於明年1月正式推出1.0版。
而在0.7版最重要的功能即是搭配Istio
加入的使用者認證與權限管理。此功能讓一個Kubeflow的可以讓多人使用,並透過Group的概念在多個使用者間共享資源與權限,旨在成為一個通用全方位的AI平台。
使用者認證與權限管理由Arrikto團隊實現與維護。
部署教學
環境準備
此部署可以在雲端環境抑或是裸機環境,並沒有限制。請確保部署前Kubernetes集群正常運作。
下載安裝檔案
Kubeflow目前透過子專案kfctl
來發布與安裝Kubeflow
- 下載 kfctl v0.7.0 發布版本 Kubeflow releases page
解壓縮
tar -xvf kfctl_<release tag>_<platform>.tar.gz
設定環境變數,方便後續部署。
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 以利後需使用kfctl指令
export PATH=$PATH:"<path-to-kfctl>"
# 部署將會使用這個設定檔
export CONFIG_URI="https://raw.githubusercontent.com/kubeflow/manifests/dc04ff600cee722d93cf80d413aa73ddd8387f1f/kfdef/kfctl_existing_arrikto.0.7.0.yaml"
# Kubeflow安裝過程生成的設定檔存放的資料夾名,可以設定成`my-kubeflow`或是`kf-test`
export KF_NAME=<your choice of name for the Kubeflow deployment>
# 放置Kubeflow專案的資料夾路徑
export BASE_DIR=<path to a base directory>
# 此次部署Kubeflow的的完整路徑
export KF_DIR=${BASE_DIR}/${KF_NAME}
安裝 Kubeflow
使用官方的kfctl即可方便的一個指令部署。
1 | # 來到Kubeflow專案底下 |
等候大約幾分鐘後,即會看到以下部署成功的字樣
1 | INFO[0154] Applied the configuration Successfully! filename="cmd/apply.go:72" |
可以檢查所有kubeflow namespace底下的pod來確認是否部署成功。
1 | $ kubectl get po -n kubeflow |
因為v0.7.0版會同時部署istio,因此也可以檢查istio相關資源是否成功部署。
1 | $ kubectl get po -n istio-system |
使用Kubeflow
使用預設帳號密碼登入
首先透過port-forward來使用Kubeflow服務
1 | # 透過localhost:8080連上 |
接著會出現以下畫面
使用帳號密碼 `admin@kubeflow.org:12341234`即可登入。
接著會出現下面兩個對話筐,都直接確認即可。第一次登入即會幫該使用者也就是 `admin@kubeflow.org創建他專屬的namespace
admin`
至此Kubeflow即部署完成,可以從Dashboard
使用各種服務包含Jupyter Notebook
與Pipeline
。
多使用者情境
首先直接看Kubeflow官方的多使用者情境示意圖。
如同剛剛提到的,在第一次登入後即會創建該使用者的namespace。接著使用者的所有操作皆會被限制在該namespace中,包含創建的notebook
與pipeline
都會在該namespace底下,與其他使用者隔離。
底下我們透過新增一個使用者來探索多使用者情境。
增加一個新使用者
1 | # 取得目前dex使用的設定檔 |
多使用者隔離
kubernetes 資源隔離
開啟兩個視窗一個使用admin
登入,另一個使用demo
登入。首先在左上角可以選擇namespace,目前只能選擇自己的namespace。
- admin 開啟一個 notebook
- demo 開啟一個 notebook
可以發現兩個人只可以看到自己的notebook。
此時當demo這個帳號的視窗,
嘗試直接使用admin的url http://localhost:8080/_/jupyter/?ns=admin
查看admin的notebook會出現如下錯誤。
因為demo這個帳號並沒有存取admin資源的權限,也就是無法存取查看admin namespace底下的所有kubernetes資源。
kubernetes服務隔離
那如果demo這個帳號打算直接透過url連結admin剛剛創建的notebook?
會出現如上的示意圖顯示RBAC Denied,也就是說demo也不能連線使用admin namespace底下的服務。
共享資源
那如果我們希望像上面多使用者情境的示意圖中,有一個共享的資源該如何實作呢?
- 回到admin這個帳號的主頁
- 選擇左邊欄的
Manage Contributors
- 新增 Contributor
demo@kubeflow.org
此時demo這個帳號可以共享與使用admin的資源與服務了。
- demo帳號左上角可以選擇admin namespace,且可以查看admin的notebook了。
- 另外我們在測試使用url使用admin notebook。
小結
以上就是 Kubeflow v0.7.0 多使用者情境,這個可以算是邁向v1.0前最重要的新加入功能,已經可以說是production ready了。本篇的部署方式是使用Dex與靜態檔案,而你也可以替換Dex的Backend串接第三方的認證管理,例如Google或是Github。
作為Kubeflow Member,也聊一下關於Kubeflow的未來規劃。目前基本的功能都可以說穩定且完整了,未來將朝向critical user journeys的完善,例如如何讓notebook開發模型到送上pipeline進行訓練的流程更為簡單。相關影片可以參考: https://www.youtube.com/watch?v=C9rJzTzVzvQ
另外,本人此次參與2019 KubeConNA也發現導入Kubeflow的公司越來越多了,除了直接使用外,也有許多團隊嘗試將Kubeflow結合內部的系統已滿組內部使用需求,例如: Uber、Spotify與Lyft等都有相關的演講可以參考。
因為Kubeflow實作使用者認證的方式是搭配Istio
實作,算是一個通用且蠻有參考價值的做法,接下來兩篇將會詳解整個實作,提供大家一個在Kubernetes上實作多使用者隔離的方法。
連結
Kubeflow如何搭配Istio實作Multi-user認證與權限管理(上)
Kubeflow如何搭配Istio實作Multi-user認證與權限管理(下)