Azure の AKS (Azure Kubernetes Service) で Kubeflow をデプロイするメモです。AKSは、Kubeflowのマニュフェストそのまま動きますので、メモを残すほどでもないのかもしれませんが、何かの役に立つかもしれないので残しておきます。
Kubeflowデプロイのためのコマンドを準備
Kubeflowデプロイに使用するコマンドは以下の3つです。
- az
- Azureをコントロールするためのコマンドです。今回はkubectlがAKSに接続するためのクレデンシャル取得などに使用しています。
- kubectl
- Kubernetesをコントロールするためのコマンドです。AKSによって取得した~/.kube/configを使ってAKSにアクセスします。
- kfctl
- Kubeflowをコントロールするためのコマンドです。
Azure Cloud Shell には、az, kubectl コマンドはインストール済ですので、kfctl だけ以下のページから取得してインストールします。
https://github.com/kubeflow/kfctl/releases/
$ mkdir -p ~/bundle/bin
$ curl -OL https://github.com/kubeflow/kfctl/releases/download/v1.1.0/kfctl_v1.1.0-0-g9a3621e_linux.tar.gz
$ tar xvfz kfctl_v1.1.0-0-g9a3621e_linux.tar.gz
$ mv kfctl ~/bundle/bin/
AKSを作成する
ポータルから作成してみます。今回はノードに Standard_D4S_v3 を2台としました。(Standard_DS2_v2 を3台でもデプロイでできましたが、実験フェーズでは、まとったメモリやストレージを使いたいこともあると思うので、大きめのノードを選んだ方が良いかもしれません)
AKSが作成されたら、作成したAKSのクレデンシャルを取得します。
$ az aks get-credentials -n kentacl -g kentakf-rg
これで kubectl からコントロールできるようになりましたので、ノードを確認してみます。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
aks-agentpool-22403156-vmss000000 Ready agent 11m v1.16.13
aks-agentpool-22403156-vmss000001 Ready agent 11m v1.16.13
Kubeflowのデプロイ
Kubeflowのデプロイに入ります。まずは、作業用のディレクトリを作成します。
$ mkdir kf11
kfctlでGithubに置いてあるKubeflow 1.1のマニフェストをApplyすることによりデプロイを実行します。
作業用のディレクトリ移動して、
$ cd kf11
$ pwd
/home/kenta/kf11
kfctlでデプロイします。
$ kfctl apply -V -f "https://raw.githubusercontent.com/kubeflow/manifests/v1.1-branch/kfdef/kfctl_k8s_istio.v1.0.2.yaml"
デプロイが完了したら以下のようになりPodが立ち上がります。
$ kubectl get pods --all-namespaces -o wide
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
cert-manager cert-manager-cainjector-c578b68fc-blclk 1/1 Running 0 174m 10.244.1.13 aks-agentpool-22403156-vmss000001 <none> <none>
cert-manager cert-manager-fcc6cd946-9tf9s 1/1 Running 0 174m 10.244.0.18 aks-agentpool-22403156-vmss000000 <none> <none>
cert-manager cert-manager-webhook-657b94c676-n4xrb 1/1 Running 1 174m 10.244.1.14 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system cluster-local-gateway-78f6cbff8d-8p78r 1/1 Running 0 175m 10.244.0.13 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system grafana-68bcfd88b6-lmfv6 1/1 Running 0 175m 10.244.1.5 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-citadel-7dd6877d4d-fj4nk 1/1 Running 0 175m 10.244.1.6 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-cleanup-secrets-1.1.6-74hfs 0/1 Completed 0 175m 10.244.1.12 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-egressgateway-7c888bd9b9-fvrbh 1/1 Running 0 175m 10.244.1.7 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-egressgateway-7c888bd9b9-mm28x 1/1 Running 0 172m 10.244.0.33 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system istio-galley-5bc58d7c89-gqkj7 1/1 Running 0 175m 10.244.0.19 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system istio-grafana-post-install-1.1.6-dk4zh 0/1 Completed 0 175m 10.244.1.11 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-ingressgateway-866fb99878-qv2x5 1/1 Running 0 175m 10.244.0.9 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system istio-pilot-67f9bd57b-7x7kp 2/2 Running 0 175m 10.244.0.10 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system istio-policy-749ff546dd-vt6r6 2/2 Running 3 175m 10.244.0.11 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system istio-security-post-install-1.1.6-56x76 0/1 Completed 0 175m 10.244.1.10 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-sidecar-injector-cc5ddbc7-75vbp 1/1 Running 0 175m 10.244.0.17 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system istio-telemetry-6f6d8db656-frz7b 2/2 Running 2 175m 10.244.1.8 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system istio-tracing-84cbc6bc8-qp8hp 1/1 Running 0 175m 10.244.0.12 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system kfserving-ingressgateway-6b469d64d-7lptq 1/1 Running 0 175m 10.244.0.14 aks-agentpool-22403156-vmss000000 <none> <none>
istio-system kfserving-ingressgateway-6b469d64d-qcl4p 1/1 Running 0 172m 10.244.1.40 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system kiali-7879b57b46-pcdpx 1/1 Running 0 175m 10.244.1.9 aks-agentpool-22403156-vmss000001 <none> <none>
istio-system prometheus-744f885d74-2gm9x 1/1 Running 0 175m 10.244.0.16 aks-agentpool-22403156-vmss000000 <none> <none>
knative-serving activator-58595c998d-mb77d 2/2 Running 0 173m 10.244.1.24 aks-agentpool-22403156-vmss000001 <none> <none>
knative-serving autoscaler-7ffb4cf7d7-7w7sw 2/2 Running 2 173m 10.244.0.28 aks-agentpool-22403156-vmss000000 <none> <none>
knative-serving autoscaler-hpa-686b99f459-tnggg 1/1 Running 0 173m 10.244.0.27 aks-agentpool-22403156-vmss000000 <none> <none>
knative-serving controller-c6d7f946-drxwf 1/1 Running 0 173m 10.244.0.26 aks-agentpool-22403156-vmss000000 <none> <none>
knative-serving networking-istio-ff8674ddf-brkgd 1/1 Running 0 173m 10.244.1.25 aks-agentpool-22403156-vmss000001 <none> <none>
knative-serving webhook-6d99c5dbbf-x9zgd 1/1 Running 0 173m 10.244.0.29 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system coredns-869cb84759-c67ht 1/1 Running 0 3h11m 10.244.1.3 aks-agentpool-22403156-vmss000001 <none> <none>
kube-system coredns-869cb84759-jvjzm 1/1 Running 0 3h13m 10.244.0.2 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system coredns-autoscaler-5b867494f-tv8bw 1/1 Running 0 3h13m 10.244.0.6 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system dashboard-metrics-scraper-566c858889-2pwjb 1/1 Running 0 3h13m 10.244.0.7 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system kube-proxy-m7dwp 1/1 Running 0 3h11m 10.240.0.5 aks-agentpool-22403156-vmss000001 <none> <none>
kube-system kube-proxy-nnclh 1/1 Running 0 3h11m 10.240.0.4 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system kubernetes-dashboard-7f7d6bbd7f-ld9vj 1/1 Running 0 3h13m 10.244.0.4 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system metrics-server-6cd7558856-zbczc 1/1 Running 0 3h13m 10.244.0.3 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system omsagent-jbczq 1/1 Running 1 3h11m 10.244.1.2 aks-agentpool-22403156-vmss000001 <none> <none>
kube-system omsagent-rcjwq 1/1 Running 1 3h11m 10.244.0.5 aks-agentpool-22403156-vmss000000 <none> <none>
kube-system omsagent-rs-7fd48788c5-247pw 1/1 Running 1 3h13m 10.244.1.4 aks-agentpool-22403156-vmss000001 <none> <none>
kube-system tunnelfront-748b54cdb-qnkcc 2/2 Running 0 3h13m 10.244.0.8 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow admission-webhook-bootstrap-stateful-set-0 1/1 Running 0 174m 10.244.1.17 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow admission-webhook-deployment-59bc556b94-5w2vx 1/1 Running 0 173m 10.244.0.24 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow application-controller-stateful-set-0 1/1 Running 0 175m 10.244.0.15 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow argo-ui-5f845464d7-2zgsv 1/1 Running 0 174m 10.244.1.15 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow centraldashboard-d5c6d6bf-tqqtk 1/1 Running 0 174m 10.244.1.18 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow jupyter-web-app-deployment-544b7d5684-mmtbd 1/1 Running 0 173m 10.244.1.19 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow katib-controller-6b87947df8-njhx6 1/1 Running 1 172m 10.244.1.28 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow katib-db-manager-54b64f99b-5bbdw 1/1 Running 0 172m 10.244.1.29 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow katib-mysql-74747879d7-n68p5 1/1 Running 0 172m 10.244.0.35 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow katib-ui-76f84754b6-qcnsb 1/1 Running 0 172m 10.244.1.30 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow kfserving-controller-manager-0 2/2 Running 1 173m 10.244.1.27 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow metacontroller-0 1/1 Running 0 174m 10.244.0.20 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow metadata-db-79d6cf9d94-slc4l 1/1 Running 0 173m 10.244.0.34 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow metadata-deployment-5dd4c9d4cf-mqkp9 1/1 Running 0 173m 10.244.1.22 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow metadata-envoy-deployment-5b9f9466d9-p6j4w 1/1 Running 0 173m 10.244.1.21 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow metadata-grpc-deployment-74f69954dc-vls7q 1/1 Running 5 173m 10.244.0.22 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow metadata-ui-8968fc7d9-dqj4x 1/1 Running 0 173m 10.244.0.23 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow minio-6b88d6499f-f5d49 1/1 Running 0 172m 10.244.1.43 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow ml-pipeline-698bcdd747-x67mq 1/1 Running 0 172m 10.244.1.31 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow ml-pipeline-ml-pipeline-visualizationserver-675656df79-tgjwm 1/1 Running 0 172m 10.244.1.35 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow ml-pipeline-persistenceagent-7785884886-gqwwm 1/1 Running 1 172m 10.244.1.32 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow ml-pipeline-scheduledworkflow-7b4cb5d959-cxtlp 1/1 Running 0 172m 10.244.0.32 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow ml-pipeline-ui-5fbd94b9fb-rrfgn 1/1 Running 0 172m 10.244.1.33 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow ml-pipeline-viewer-controller-deployment-69fccfff8c-f86bc 1/1 Running 0 172m 10.244.1.34 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow mysql-7994454666-z6c6c 1/1 Running 0 172m 10.244.1.44 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow notebook-controller-deployment-576589db9d-77ftt 1/1 Running 0 173m 10.244.0.25 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow profiles-deployment-874649f89-mzjjs 2/2 Running 0 172m 10.244.1.36 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow pytorch-operator-666dd4cd49-psfxz 1/1 Running 0 173m 10.244.1.23 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow seldon-controller-manager-5d96986d47-w69c9 1/1 Running 0 172m 10.244.1.38 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow spark-operatorcrd-cleanup-db5nj 0/2 Completed 0 173m 10.244.1.20 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow spark-operatorsparkoperator-7c484c6859-qv8lz 1/1 Running 0 173m 10.244.0.21 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow spartakus-volunteer-7465bcbdc-94tmr 1/1 Running 0 173m 10.244.0.30 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow tensorboard-6549cd78c9-xkbdr 1/1 Running 0 173m 10.244.0.31 aks-agentpool-22403156-vmss000000 <none> <none>
kubeflow tf-job-operator-7574b968b5-6pgml 1/1 Running 0 173m 10.244.1.26 aks-agentpool-22403156-vmss000001 <none> <none>
kubeflow workflow-controller-6db95548dd-lcjjs 1/1 Running 0 174m 10.244.1.16 aks-agentpool-22403156-vmss000001 <none> <none>
Kubeflowにアクセスする
Webブラウザが使えるローカルコンピュータからkubectlのポートフォワードを使ってKubeflowにアクセスしてみます。まずは、AKSのクレデンシャルを取得するためにも、以下のURLを参考にAzure CLIをインストールします。
次にkubectlをインストールします。以下のコマンドにより、Azure CLIからkubectlをインストールすることもできます。
az aks install-cli
kubectlのポートフォワードを実行します。これにより、ローカルコンピュータの8080ポートからKubeflowにアクセスできます。
$ kubectl port-forward svc/istio-ingressgateway -n istio-system 8080:80
Webブラウザを立ち上げて以下のURLにアクセスします。
名前空間を設定します。この名前空間は、Kubernetesの名前空間にもなります。
こでで Kubeflow のデプロイは完了です。次は Kubeflow の Notebook Server を作成してみます。
Notebook Server を作成する
Notebookを作成してみます。左上のメニューからNotebook Serversを選択します。
NEW SERVERからNotebookのサーバを作成します。
Nameは、KubernetesのPodの名前にもなります。ここでは、Tensorflow 2.1 CPUのイメージを使用しています。
作成されました。(表示されるのに時間がかかります)
kubectlのコマンドでもNotebookが立ち上がっている事を確認できます。
$ kubectl get pods -n kubeflow-kenta -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
kenta-notebook-0 2/2 Running 0 30m 10.244.0.38 aks-agentpool-22403156-vmss000000 <none> <none>
Pythonで実験フェーズのコードを書く事ができます。
Kubeflowのアンインストール
KubeflowをアンインストールするにはAzure Cloud Shellで作成した作業ディレクトリで、以下のコマンドを使用します。
作業用ディレクトリに移動して、
$ cd kf11/
$ pwd
/home/kenta/kf11
kfctlでアンインストールします。
$ kfctl delete -f kfctl_k8s_istio.v1.0.2.yaml
アンインストールの経過は、別のターミナルやコマンドウインドウで、以下のコマンドから確認する事ができます。
$ kubectl get pods --all-namespaces -o wide -w
最後に
これでメモは終了です。
今回は、以下のドキュメントを参考にしました。
ではまたー。