Kubeflow on NKE の手順に沿って構築した Kubeflow 環境では、Kubeflow UI を利用するユーザの Profile を手動で作成する必要があります。
今回は、Kubeflow UI にユーザがログインした際に、Profile が自動作成されるように設定を変更してみます。
今回の前提
NKE による Kubernetes クラスタには、下記のように kubeflow で接続できるようにしておきます。
Kubeflow を、NKE による Kubernetes クラスタにインストールしてあります。
Kubeflow の認証を受け持つ Dex に、demo-02@example.com ユーザを作成してあります。
demo-02@example.com ユーザの Profile は未作成です。
$ kubectl get profiles.kubeflow.org NAME AGE demo-01 19h kubeflow-user-example-com 19h nutanix 19h
centraldashboard Deployment の設定変更
デフォルトでは、centraldashboard コンテナに設定される環境変数「REGISTRATION_FLOW」が false になっています。
$ kubectl get deployment centraldashboard -n kubeflow -o=jsonpath='{.spec.template.spec.containers[?(@.name=="centraldashboard")].env[?(@.name=="REGISTRATION_FLOW")].value}' | more false
centraldashboard Deployment の YAML を保存します。
$ kubectl get deployment centraldashboard -n kubeflow -o yaml > kf_centraldashboard.yml
保存した YAML の、centraldashboard コンテナの環境変数(env)を編集します。
$ vi kf_centraldashboard.yml
REGISTRATION_FLOW の値を false → true に変更します。
spec: containers: - env: - name: USERID_HEADER value: kubeflow-userid - name: USERID_PREFIX - name: PROFILES_KFAM_SERVICE_HOST value: profiles-kfam.kubeflow - name: REGISTRATION_FLOW value: "true" ★false→true - name: DASHBOARD_LINKS_CONFIGMAP value: centraldashboard-config - name: LOGOUT_URL value: /authservice/logout - name: POD_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace
YAML を適用して、Deployment の設定を変更します。
$ kubectl apply -f kf_centraldashboard.yml deployment.apps/centraldashboard configured
このとき、centraldashboard の Pod が自動的に再作成されるので、YAML 適用後に Running になっていること(例では 11秒前)を確認します。
$ kubectl -n kubeflow get pod -l app=centraldashboard NAME READY STATUS RESTARTS AGE centraldashboard-57cf6cf6cd-dxwtg 2/2 Running 0 11s
Kubeflow UI へのログイン → Profile 自動作成
kubeflow UI に Profile 未作成のユーザ(demo-02@example.com)ログインします。
Welcome 画面が表示されるので、「Start Setup」をクリックします。
Namespace Name の入力内容(デフォルトではユーザ名)を確認して、「Finish」をクリックします。
これで、Profile が自動作成されます。
kubectl でも、Profile が作成されています。
$ kubectl get profiles.kubeflow.org NAME AGE demo-01 19h demo-02 10s kubeflow-user-example-com 19h nutanix 19h
Profile の Namespace と、その配下のリソース オブジェクトも自動作成されます。
$ kubectl -n demo-02 get all NAME READY STATUS RESTARTS AGE pod/ml-pipeline-ui-artifact-5c4b49cff9-2gk62 2/2 Running 0 18s pod/ml-pipeline-visualizationserver-77f48b88c7-64kvl 2/2 Running 0 18s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/ml-pipeline-ui-artifact ClusterIP 172.19.108.12180/TCP 23s service/ml-pipeline-visualizationserver ClusterIP 172.19.12.155 8888/TCP 23s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/ml-pipeline-ui-artifact 1/1 1 1 23s deployment.apps/ml-pipeline-visualizationserver 1/1 1 1 23s NAME DESIRED CURRENT READY AGE replicaset.apps/ml-pipeline-ui-artifact-5c4b49cff9 1 1 1 23s replicaset.apps/ml-pipeline-visualizationserver-77f48b88c7 1 1 1 23s
Profile の削除
Profile を削除すると、あらためてログインによる自動作成を実施できます。
$ kubectl delete profiles.kubeflow.org demo-02 profile.kubeflow.org "demo-02" deleted
Profile を削除すると、紐づけられていた Namespace も同時に削除されます。
$ kubectl -n demo-02 get all No resources found in demo-02 namespace.
以上。