konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

NKE で Kubeflow してみる

こちらの記事は、Nutanix Advent Calendar 2022 3日目の記事です


NKEに再入門中ですので、なんか作ってみようと、MLOps入門として、KubeflowをとりあえずNKE上に構築してみようと思います
Kubeflowまだ何よくわかってないですが

Kubeflowとは
Kubeflowは、Kubernetesクラスター上で機械学習(ML)ワークフローを構築、実行、管理するためのオープンソースプラットフォームです。Kubeflowは、Kubernetesに特化したMLフレームワークとして構築されており、Kubernetesを使用したアプリケーションと同様に、スケーラブルで拡張可能なMLワークフローを作成することができます。Kubeflowを使用することで、データサイエンティストやMLエンジニアは、MLモデルのトレーニングやデプロイ、監視、更新を行うことができます。また、Kubeflowは、様々な環境やクラウドプロバイダーで利用できるため、場所に縛られないMLワークフローの構築が可能です。

って、はやりのchatGPT さんが教えてくれました

1.NKE で Kubernetesクラスタの作成

まずは、NKEでKubernetesクラスタを作ります
クラスタ名を「kon-nke」にして、あとはひたすらデフォルトの設定で進めてみます
 
 
 

2.Kubernetesクラスタssh接続する

Kubeflow をデプロイするためにまずデプロイする

ssh接続用の設定ファイルをダウンロード

kubernetesクラスタの画面より、接続用の設定ファイルをダウンロード

クラスタ名-access.sh になります
例)kon-nke-ssh-access.sh

設定ファイルを使って ssh接続

シェルが使える環境で(Windows だと WSL とか)

sh kon-nke-ssh-access.sh 

(実行例)

% sh kon-nke-ssh-access.sh 
Enter KARBON VM IP: 10.38.55.10
================== 10.38.55.10 ==================
The authenticity of host '10.38.55.10 (10.38.55.10)' can't be established.
RSA key fingerprint is SHA256:HR+kRDk4b/4bUANtEMs4wnSKoqLMSrbCi/3iW1Hdi2I.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.38.55.10' (RSA) to the list of known hosts.

[nutanix@kon-nke-5b294f-master-0 ~]$ 


3.Kubeflowデプロイの下準備

基本的には、Kubeflowのサイトに書かれている方法に沿ってすすめていくのですが、
Kubeflow on Nutanix Karbon | Kubeflow

書かれているままの方法でいくと、いくつか躓くところがあったので事前に準備必要です

Terraformインストール
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
sudo yum -y install unzip

kustomizeインストール
cd /tmp
wget https://github.com/kubernetes-sigs/kustomize/releases/download/v3.2.0/kustomize_3.2.0_linux_amd64
chmod +x kustomize_3.2.0_linux_amd64
sudo mv kustomize_3.2.0_linux_amd64 /usr/local/bin/kustomize
cd

gitインストール
sudo yum -y install git
git clone https://github.com/nutanix/karbon-platform-services.git
cd karbon-platform-services/automation/infrastructure/terraform/kcs/install_kubeflow

env.tfvarsの作成
vi env.tfvars
prism_central_username = "admin"
prism_central_password = "password"  # PCのパスワード 
prism_central_endpoint = "xxx.xxx.xxx.xxx"  # クラスタのエンドポイントIP
karbon_cluster_name    = "kon-nke"  # クラスタ名に置き換える
kubeconfig_filename    = "config"
kubeflow_version       = "1.6.0"

Kubeflow のデプロイ
terraform init
terraform plan --var-file=env.tfvars
terraform apply --var-file=env.tfvars

Kubeflow のデプロイ状態の確認

kubeflowの namespaceがあることを確認

$ kubectl get namespaces 
NAME               STATUS   AGE
auth               Active   93s
cert-manager       Active   93s
default            Active   100m
istio-system       Active   93s
knative-eventing   Active   93s
knative-serving    Active   93s
kube-node-lease    Active   100m
kube-public        Active   100m
kube-system        Active   100m
kubeflow           Active   93s
ntnx-system        Active   96m

すべてが Running になるのを待つ

$ kubectl -n kubeflow get pods
NAME                                                     READY   STATUS              RESTARTS      AGE
admission-webhook-deployment-7978f87497-9jjzp            1/1     Running             0             86s
cache-server-7df4ccc756-z6dg4                            2/2     Running             0             86s
centraldashboard-78dc66bf79-gxkm2                        0/2     PodInitializing     0             84s
jupyter-web-app-deployment-54f5ff876-grkqt               1/1     Running             0             86s
katib-controller-6478fbd64c-x4pwc                        1/1     Running             0             85s
katib-db-manager-78fc8b7895-jqwr9                        1/1     Running             0             85s
katib-mysql-6975d6c6c4-tcppj                             1/1     Running             0             85s
katib-ui-5cb6cc4d97-qr4tz                                1/1     Running             0             84s
kserve-controller-manager-0                              0/2     ContainerCreating   0             77s
kserve-models-web-app-5454bfdb86-v78nk                   2/2     Running             0             86s
kubeflow-pipelines-profile-controller-5b8474b7bc-fdlbr   1/1     Running             0             86s
metacontroller-0                                         1/1     Running             0             77s
metadata-envoy-deployment-f4c868c97-bxfk4                1/1     Running             0             86s
metadata-grpc-deployment-679b49cc95-skwbd                0/2     PodInitializing     0             85s
metadata-writer-7459bcd96b-vtbkw                         2/2     Running             0             85s
minio-7955cfc9fc-qp7r9                                   0/2     PodInitializing     0             84s
ml-pipeline-799556bd9f-k4bsm                             1/2     Running             0             87s
ml-pipeline-persistenceagent-848b7bbc88-9dggl            2/2     Running             0             87s
ml-pipeline-scheduledworkflow-546fc65b4c-zglls           2/2     Running             0             86s
ml-pipeline-ui-555c4f4f5d-4r2vk                          2/2     Running             0             86s
ml-pipeline-viewer-crd-5c79ccf5b6-4sljj                  2/2     Running             1 (36s ago)   85s
ml-pipeline-visualizationserver-8666b88867-rmj58         0/2     PodInitializing     0             85s
mysql-75f4964b48-6thjv                                   2/2     Running             0             85s
notebook-controller-deployment-6f645f457b-nlt65          1/2     Running             1 (19s ago)   84s
profiles-deployment-678fbc8b55-wwcqf                     0/3     PodInitializing     0             84s
tensorboard-controller-deployment-f4bfb987b-bhshx        2/3     Running             1 (9s ago)    83s
tensorboards-web-app-deployment-65b8646ff6-bw55b         1/1     Running             0             83s
training-operator-5cc8cdfdd6-6dsfq                       1/1     Running             0             83s
volumes-web-app-deployment-c49cd595f-scblx               1/1     Running             0             87s
workflow-controller-555f64865-qzkx9                      2/2     Running             1 (46s ago)   86s

すべてがRunningになったら完了


NKE の管理画面で、Persistent Volumeを確認すると Namespace 「kubeflow」、「istio-system」が増えてますね

4.KubeflowにWeb GUIにログイン

まずはポートフォワードして

kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80 --address 0.0.0.0


ブラウザで「http://master-node:8080」へアクセスしてみます

サンプルユーザーが用意されていますので、これでログインしてみます
Email Address:user@example.com
Password:12341234


ログインできたーーー



今回はとりあえず Kubeflow 環境が作れたここまで