CodeReady Containers で Kubeflow

 CodeReady Containers (以下 CRC)で Kubeflow を走らせた時のメモ.

詰まったところ

1. kfctl コマンドどこで実行するか
2. metadata-db が Error→CrashLoopBackOff を繰り返し,起動しない

前提となる CRC 構成は,以下の通り(以前の記事).

Kubeflow の公式ページに,OpenShift で Kubeflow をインストールするやり方が掲載されている.(バージョンは古いけれど)

詰まってしまったのは,kfctl コマンドのバイナリが,macOS 用と Linux 用しか提供されていないので,Hyper-V の Windows ホストでは実行できないこと.

そこで,以前の記事で,CRC Node の隣に構築した NFS サーバー(Linux)に kfctl を導入してインストールを行った.

kfctl のインストール

上記 GitHub リポジトリから,kfctl_v1.1.0-0-g9a3621e_linux.tar.gz をコピー

$ wget https://github.com/kubeflow/kfctl/releases/download/v1.1.0/kfctl_v1.1.0-0-g9a3621e_linux.tar.gz
$ zcat kfctl_v1.1.0-0-g9a3621e_linux.tar.gz | tar xpvf -

kfctl バイナリを PATH の通ったディレクトリにコピーする.

oc コマンドのインストール

oc コマンドで Pod の状態など確認するので同じくインストールしておく.

に従って,openshift-client-linux.tar.gz をダウンロード,展開し,同じく PATH の通ったディレクトリにコピーする.

kubeconfig ファイルの導入

oc コマンドも kfctl コマンドも,稼働している CRC 用に,~/.kube/config ファイルを用意しておかないと,動作しない.

Hyper-V ホストで,C:\User\<ユーザー名>\.crc\machines\crc フォルダに kubeconfig というファイルがあるので,これを NFS サーバーの ~/.kube/config にコピーする.

画像1

また,この環境特有の事情だが,CRC Node の IP アドレスは NFS サーバー上で稼働する dhcpd によって付与されており,これが今回 192.168.255.9 だったので,NFS サーバー上の /etc/hosts に以下のエントリを追記する

192.168.255.9 api.crc.testing

以上を実施して,oc コマンドが稼働することをチェックしておく.

$ oc status
In project default on server https://api.crc.testing:6443
svc/openshift - kubernetes.default.svc.cluster.local
svc/kubernetes - 172.25.0.1:443 -> 6443
View details with 'oc describe <resource>/<name>' or list everything with 'oc get all'.

インストール

あとは件の手順通り,

$ git clone https://github.com/opendatahub-io/manifests.git
Cloning into 'manifests'...
remote: Enumerating objects: 9521, done.
remote: Total 9521 (delta 0), reused 0 (delta 0), pack-reused 9521
Receiving objects: 100% (9521/9521), 37.45 MiB | 4.53 MiB/s, done.
Resolving deltas: 100% (5973/5973), done.
$ cd manifests
$ sed -i 's#uri: .*#uri: '$PWD'#' ./kfdef/kfctl_openshift.yaml
$ export KF_DIR=~/kubeflow
$ mkdir -p ${KF_DIR}
$ cp ./kfdef/kfctl_openshift.yaml ${KF_DIR}
$ cd ${KF_DIR}
$ kfctl build --file=kfctl_openshift.yaml
$ kfctl apply --file=kfctl_openshift.yaml
securitycontextconstraints.security.openshift.io/kubeflow-anyuid-istio created
securitycontextconstraints.security.openshift.io/kubeflow-anyuid-kubeflow created
customresourcedefinition.apiextensions.k8s.io/adapters.config.istio.io created
(中略)
certificate.cert-manager.io/seldon-serving-cert created
issuer.cert-manager.io/seldon-selfsigned-issuer created
validatingwebhookconfiguration.admissionregistration.k8s.io/seldon-validating-webhook-configuration-kubeflow created
$

最後のコマンドは,何回か途中で

WARN[0042] Encountered error applying application cert-manager:  (kubeflow.error): Code 500 with message: Apply.Run : error when creating "/tmp/kout700586586": Internal error occurred: failed calling webhook "webhook.cert-manager.io": the server is currently unable to handle the request  filename="kustomize/kustomize.go:266"
WARN[0042] Will retry in 3 seconds.                      filename="kustomize/kustomize.go:267"

を繰り返し吐き出すが,完了.あとは,oc get pods -n kubeflow を実行して,状況を観察する.

$ oc get pods -n kubeflow
NAME                                                           READY   STATUS              RESTARTS   AGE
argo-ui-644f649c9-d7xxd                                        1/1     Running             0          5m3s
centraldashboard-558c95597c-t2hb5                              1/1     Running             0          5m2s
jupyter-web-app-deployment-7b49bddb86-s9rsx                    0/1     ContainerCreating   0          3m14s
katib-controller-9cd8f9954-6grb4                               0/1     ContainerCreating   0          3m9s
katib-db-manager-686dc45fc4-b9zsp                              0/1     Running             0          3m9s
katib-mysql-5c7dcc6786-rqzmn                                   0/1     ContainerCreating   0          3m9s
katib-ui-6b755b9b64-zqxjg                                      0/1     ImagePullBackOff    0          3m9s
metadata-db-5f47dddd-js72v                                     0/1     ContainerCreating   0          3m13s
metadata-deployment-6fc8c96c97-bwq92                           0/1     ContainerCreating   0          3m13s
metadata-envoy-deployment-867944c487-fdh5p                     0/1     ContainerCreating   0          3m13s
metadata-grpc-deployment-b77d5cbfc-rfp78                       0/1     ContainerCreating   0          3m13s
metadata-ui-68559cb5-z2srg                                     0/1     ContainerCreating   0          3m13s
minio-69fdb867f6-2bzwx                                         1/1     Running             0          3m8s
ml-pipeline-7bcb855d98-8rztx                                   0/1     ContainerCreating   0          3m8s
ml-pipeline-ml-pipeline-visualizationserver-795c698fbc-tp697   0/1     ContainerCreating   0          3m6s
ml-pipeline-persistenceagent-7b6d46c56d-d59dn                  1/1     Running             0          3m8s
ml-pipeline-scheduledworkflow-dccddd78b-ttbhz                  1/1     Running             0          3m6s
ml-pipeline-ui-68b8dc5cc7-xjtnm                                0/1     ContainerCreating   0          3m7s
ml-pipeline-viewer-controller-deployment-746fccc648-x542z      0/1     ContainerCreating   0          3m7s
mysql-84598487dc-cwg7t                                         0/1     ContainerCreating   0          3m8s
notebook-controller-deployment-66657bd44f-k9fwk                0/1     ImagePullBackOff    0          3m12s
profiles-deployment-7b8d9f6d55-wf4mv                           1/2     ErrImagePull        0          3m5s
pytorch-operator-db6f8889c-wpfrq                               0/1     ContainerCreating   0          3m11s
seldon-controller-manager-fdcb95c69-l7rn9                      1/1     Running             0          3m3s
tensorboard-9b4c44f45-l8xnx                                    0/1     ImagePullBackOff    0          3m11s
tf-job-operator-5bd67976d5-9w8dt                               0/1     ContainerCreating   0          3m10s
workflow-controller-8495bc6f5b-x7p48                           1/1     Running             0          5m3s

このまま放置すると kubeflow namespace の Pod は全て Running 状態になるはずだが,metadata-db だけはどうしても上がらない.当該 Pod のログを確認してみると,

$ oc logs metadata-db-5f47dddd-js72v -n kubeflow
mkdir: cannot create directory '/var/lib/mysql': Permission denied

とのこと.oc describe pods metadata-db -n kubeflow で確認してみると,

    Mounts:
     /var/lib/mysql from metadata-mysql (rw)
     /var/run/secrets/kubernetes.io/serviceaccount from metadatadb-token-44lw4 (ro)

metadata-mysql PVC を使用している模様.

$ oc get pvc -n kubeflow
NAME             STATUS   VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
katib-mysql      Bound    pv0019   100Gi      RWO,ROX,RWX                   26m
metadata-mysql   Bound    pv0004   100Gi      RWO,ROX,RWX                   26m
minio-pv-claim   Bound    pv0006   100Gi      RWO,ROX,RWX                   26m
mysql-pv-claim   Bound    pv0025   100Gi      RWO,ROX,RWX                   26m

現在,pv0004 にバインドされているようだ.

metadata-db 問題 - CRC Node 操作で対処

CRC Node(CoreOS)に SSH ログインできる.Hyper-V ホストで,C:\User\<ユーザー名>\.crc\machines\crc フォルダに id_rsa ファイルがあるので,これを NFS サーバーにコピーし,当該ファイルを SSH 秘密鍵に指定して CRC Node の IP に core ユーザーでアクセス

$ ssh -i <鍵フォルダ>/id_rsa core@192.168.255.9

core ユーザーは,パスワードなしで sudo 可能.以下,PVC 周りを調査すると,

[core@crc-nsk8x-master-0 ~]$ sudo -s
[root@crc-nsk8x-master-0 core]# ls -l /var/mnt/pv-data/
total 4
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0001
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0002
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0003
drwxrwx---. 3 root root   21 Aug  4 00:39 pv0004
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0005
drwxrwx---. 3 root root   19 Aug  4 00:36 pv0006
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0007
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0008
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0009
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0010
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0011
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0012
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0013
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0014
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0015
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0016
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0017
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0018
drwxrwx---. 7 root root 4096 Aug  4 00:41 pv0019
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0020
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0021
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0022
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0023
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0024
drwxrwx---. 5 root root  132 Aug  4 00:42 pv0025
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0026
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0027
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0028
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0029
drwxrwx---. 2 root root    6 Jul 12 05:55 pv0030
[root@crc-nsk8x-master-0 core]# 

となっているので,あまりよくわからないまま,

# chmod o+rwx /var/mnt/pv-data/pv0004

としてみると,Running になった!

$ oc get pods -n kubeflow
NAME                                                           READY   STATUS    RESTARTS   AGE
argo-ui-644f649c9-d7xxd                                        1/1     Running   0          49m
centraldashboard-558c95597c-t2hb5                              1/1     Running   0          49m
jupyter-web-app-deployment-7b49bddb86-s9rsx                    1/1     Running   0          47m
katib-controller-9cd8f9954-6grb4                               1/1     Running   1          47m
katib-db-manager-686dc45fc4-b9zsp                              1/1     Running   3          47m
katib-mysql-5c7dcc6786-rqzmn                                   1/1     Running   0          47m
katib-ui-6b755b9b64-zqxjg                                      1/1     Running   0          47m
metadata-db-5f47dddd-js72v                                     1/1     Running   13         47m
metadata-deployment-6fc8c96c97-bwq92                           0/1     Running   0          47m
metadata-envoy-deployment-867944c487-fdh5p                     1/1     Running   0          47m
metadata-grpc-deployment-b77d5cbfc-rfp78                       1/1     Running   9          47m
metadata-ui-68559cb5-z2srg                                     1/1     Running   0          47m
minio-69fdb867f6-2bzwx                                         1/1     Running   0          47m
ml-pipeline-7bcb855d98-8rztx                                   1/1     Running   0          47m
ml-pipeline-ml-pipeline-visualizationserver-795c698fbc-tp697   1/1     Running   0          47m
ml-pipeline-persistenceagent-7b6d46c56d-d59dn                  1/1     Running   2          47m
ml-pipeline-scheduledworkflow-dccddd78b-ttbhz                  1/1     Running   0          47m
ml-pipeline-ui-68b8dc5cc7-xjtnm                                1/1     Running   0          47m
ml-pipeline-viewer-controller-deployment-746fccc648-x542z      1/1     Running   0          47m
mysql-84598487dc-cwg7t                                         1/1     Running   0          47m
notebook-controller-deployment-66657bd44f-k9fwk                1/1     Running   0          47m
profiles-deployment-7b8d9f6d55-wf4mv                           2/2     Running   0          47m
pytorch-operator-db6f8889c-wpfrq                               1/1     Running   0          47m
seldon-controller-manager-fdcb95c69-l7rn9                      1/1     Running   0          47m
tensorboard-9b4c44f45-l8xnx                                    1/1     Running   0          47m
tf-job-operator-5bd67976d5-9w8dt                               1/1     Running   0          47m
workflow-controller-8495bc6f5b-x7p48                           1/1     Running   0          49m

Kubeflow GUI へのアクセス

$ oc get routes -n istio-system istio-ingressgateway -o jsonpath='http://{.spec.host}/'

を実行して,

http://istio-ingressgateway-istio-system.apps-crc.testing/

を得たので,Hyper-V ホスト上の Edge ブラウザでこれにアクセスしたところ,イけた.

画像2


この記事が気に入ったらサポートをしてみませんか?