ローカルの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を選択
Configurationのとこでさっき作成した
PodDefaultが選択肢として選べるようになってるので
そいつを選択してLaunch!
BigQueryに接続するためのパッケージインストール
terminalからpip installで必要なライブラリをインストール
$ 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のデータセット一覧取得してみると取得できた!!
一応環境変数確認するとちゃんと設定もされてる!!
まとめ
これでローカル環境で無邪気にGCP操作できる!
次はPipelineに挑戦じゃ!!