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 環境が作れたここまで