ローカルのKubeflowからGCPに接続

前回Kubeflow触ってからしばらく時間が経ったが
仕事もドタバタしてなかなか触れなかった・・・
今回は前回作ったMiniKF上のKubeflow(Jupyter Notebook)からGCPのBigQueryに接続してみるの巻

GCPサービスアカウントの作成&鍵のダウンロード

GCPコンソールかコマンドライン から
「BigQuery 管理者」役割を付与したサービスアカウント を作成し、json形式の鍵をダウンロードする

サービスアカウントの鍵情報を保持したSecretの作成

以下コマンドでサービスアカウント 情報を格納したSecret作成

$ # ダウンロードしたサービスアカウントのjson鍵ファイルをvagrantにupload
$ # gcp_credential.jsonは適宜ダウンロードしたファイル名に変更してください
$ vagrant upload gcp_credential.json /tmp/gcp_credential.json
$
$ # vagrantにssh接続
$ vagrant ssh
$
vagrant@minikf:~$ # kubeflow-user namespaceにsecret
vagrant@minikf:~$ kubectl create secret generic user-gcp-sa -n kubeflow-user --from-file=user-gcp-sa.json=/tmp/gcp_credential.json

Secretを利用してPodDefaultの作成

PodDefaultは全てのpodで利用したい設定を定義できるみたい
これを定義しておくとKubeflowでJupyter Notebook作成する時に
Configurationから選択してGCPへ接続するためのGOOGLE_APPLICATION_CREDENTIALS環境変数を設定できる

まぁやってみる

「add-gcp-secret.yaml」っていう以下ファイルを作成

apiVersion: "kubeflow.org/v1alpha1"
kind: PodDefault
metadata:
 name: add-gcp-secret
spec:
selector:
 matchLabels:
   addgcpsecret: "true"
desc: "add gcp credential"
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
  value: /secret/gcp/user-gcp-sa.json
volumeMounts:
- name: secret-volume
  mountPath: /secret/gcp
volumes:
- name: secret-volume
  secret:
   secretName: user-gcp-sa

vagrantにssh接続した状態で上のマニュフェストからpodDefault作成

$ # マニュフェストファイルをvagrantにupload
$ vagrant upload add-gcp-secret.yaml /tmp/add-gcp-secret.yaml
$
$ # vagrantにssh接続
$ vagrant ssh
$
vagrant@minikf:~$ # podDefaultの作成
vagrant@minikf:~$ kubectl apply -f /tmp/add-gcp-secret.yaml -n kubeflow-user
vagrant@minikf:~$ # podDefaultの確認
vagrant@minikf:~$ kubectl get podDefault --namespace=kubeflow-user
NAME             AGE
add-gcp-secret   78m

PodDefaultを指定してJupyter Notebook作成

サイドメニューのNotebook Servers画面からNew Serverを選択

画像1

Configurationのとこでさっき作成した
PodDefaultが選択肢として選べるようになってるので
そいつを選択してLaunch!

画像2

BigQueryに接続するためのパッケージインストール

terminalからpip installで必要なライブラリをインストール

画像3

$ pip install --upgrade google-cloud-bigquery
...
ERROR: kfp 0.1.22 has requirement kubernetes<=9.0.0,>=8.0.0, but you'll have kubernetes 10.0.1 which is incompatible.
ERROR: google-cloud-storage 1.20.0 has requirement google-resumable-media!=0.4.0,<0.5dev,>=0.3.1, but you'll have google-resumable-media 0.5.0 which is incompatible.
Installing collected packages: six, google-auth, google-api-core, google-resumable-media, google-cloud-core, google-cloud-bigquery
 Found existing installation: six 1.11.0
   Uninstalling six-1.11.0:
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/lib/python3/dist-packages/__pycache__/six.cpython-36.pyc'
Consider using the `--user` option or check the permissions.

なんかエラー出た
とりあえず--userオプションつけて再度実行

$ pip install --upgrade google-cloud-bigquery --user
...

ERROR: kfp 0.1.22 has requirement kubernetes<=9.0.0,>=8.0.0, but you'll have kubernetes 10.0.1 which is incompatible.
ERROR: google-cloud-storage 1.20.0 has requirement google-resumable-media!=0.4.0,<0.5dev,>=0.3.1, but you'll have google-resumable-media 0.5.0 which is incompatible.

まだエラー出てるけど、この状態で
Jupyter Notebook作成してBQのデータセット一覧取得してみると取得できた!!
一応環境変数確認するとちゃんと設定もされてる!!

画像4

まとめ

これでローカル環境で無邪気にGCP操作できる!
次はPipelineに挑戦じゃ!!

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