部署「Kubeflow」在Local Ubuntu流程紀錄及注意事項

Kubeflow是Google的服務之一,主要致力於在Kubernetes上部署機器學習的工作流程變得簡單、可移植、容易擴展及視覺化追蹤,總而言之就是把自己造過的輪子更易於在不同主機上重複使用以及更容易增加新的功能,增加工作的效率。
一開始以為Kubeflow官方都已經把軟體包的很好了,部署應該是幾行指令就可以完成,沒想到找了兩個以下最「官方」的指令都無法佈署成功,在這邊紀錄一下最後佈署成功的方法,及該注意的事項。
Installation Failure Experience
Install from Ubuntu document(Failure)
Deploy Kubeflow on Ubuntu, Windows and MacOS | Ubuntu
microk8s.enable kubeflow
'''
Couldn't contact api.jujucharms.com
Please check your network connectivity before enabling Kubeflow.
'''
Install from Kubeflow document(Failure)
- update:2022/3/1
- 官方更新document後可正常安裝
Quick start guide to Kubeflow | Documentation | Charmed Kubeflow
照著Kubeflow的官網則是安裝過程沒有問題,在啟動之後無法Active service,後來才發現有人提issue是剛好在2.9.25版本的juju會阻擋外面的連線。
Installation Success Method
End-to-end Kubeflow installation on your personal computer with Kind
後來看到這篇的安裝過程式用Kind去安裝,Kind是一個使用Docker container nodes去運行local Kubernetes clusters的套件,kind主要目的是在測試Kubernetes本身而設計的,但也可以用在local端的開發。
以下的安裝過程與上面的連結大同小異,但有增加了一點個人的經驗與想法。
事前準備
-
Host-name改成由小寫的英文字母組成,可以降低程式中錯誤的發生機率。
sudo hostnamectl set-hostname "your_host_name"
-
注意硬碟空間不要小於20GB
-
16GB以上的free Memory
安裝GO語言
-
把舊的go語言移除乾淨且下載
$ sudo rm -rf /usr/local/go
-
下載Go語言並解壓縮至/usr/local內
$ sudo tar -C /usr/local -xzf go1.17.7.linux-amd64.tar.gz
-
將環境變數加入
$ export PATH=$PATH:/usr/local/go/bin
-
驗證是否安裝成功
$ go version
安裝Docker
Install Docker Engine on Ubuntu
-
把舊的go語言移除乾淨且下載
$ sudo apt-get remove docker docker-engine docker.io containerd runc
-
安裝相關套件
$ sudo apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
$ sudo tar -C /usr/local -xzf go1.17.7.linux-amd64.tar.gz
-
加入官方的GPG key
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
-
設定穩定版的docker repository
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
-
開始安裝Docker
$ sudo apt-get update $ sudo apt-get install docker-ce docker-ce-cli containerd.io
-
驗證是否安裝成功
$ sudo docker run hello-world
安裝Kubectl
Kubectl是Kubernetes的命令列指令集。
-
下載最新版
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
-
安裝
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
-
驗證是否安裝成功
$ kubectl version --client
安裝Kind
-
下載
$ curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.11.1/kind-linux-amd64
-
修改權限並移至指定資料夾
$ chmod +x ./kind $ mv ./kind /some-dir-in-your-PATH/kind
-
別忘了加入環境變數
export PATH=$PATH:/some-dir-in-your-PATH/
安裝Kubeflow
-
至kubeflow Releases下載指定版本的kfctl
這裡我載的是**kfctl_v1.2.0-0-gbc038f9_linux.tar.gz**,下面的指令都用這個為版本當作範例。
-
移動指定資料夾、解壓最後加入環境變數
$ mv kfctl_v1.2.0-0-gbc038f9_linux.tar.gz ~/your-path $ tar kfctl_v1.2.0-0-gbc038f9_linux.tar.gz $ export PATH=$PATH:~/your-path
佈署Kubeflow
-
創建一個資料夾並把相關設定放在裡面
$ mkdir -p /your-path/kf_dir $ cd /your-path/kf_dir
-
使用官方的佈署設定檔案開始佈署(執行時間約20-30分鐘)
$ kfctl apply -V -f https://raw.githubusercontent.com/kubeflow/manifests/v1.0-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml
-
最後可以把pipeline的port轉出來,可以在瀏覽器中使用Kubeflow
kubectl port-forward -n kubeflow svc/ml-pipeline-ui 8080:80
最後就可以在http://localhost:8080/看到佈署完成的Kubeflow。
Reference
- Ubuntu-deploy-kubeflow
- charmed-kubeflow-Quick start guide to Kubeflow
- medium-jcrsch-End-to-end Kubeflow installation on your personal computer with Kind
- Go-Download and install
- docker-Install Docker Engine on Ubuntu
- Kubernetes-Install and Set Up kubectl on Linux
- github-kubeflow-kfctl-releases
- juju-bugs-CRD creation fails in pod spec charms on juju 2.9.25