初めてのGKE~jupyter notebookサーバーを立てる~
GKEのクイックスタートをやってみた記録と、派生してjupyter notebookのイメージを立てた記録。
これからはkubernetesの時代だ!と思ってはや数か月...。ぜんぜん自分で手を動かす気配がないので、一念発起して立ててみた。
GKEのクイックスタート
今回はGCPのGKEを使ってやってみる。
クイックスタートを参考にした。
cloud.google.com
クイックスタートはアクセスするとHello Worldと表示するイメージをk8sクラスタに立てるもの。
これはいろんなところでよく取りあげられているやつ。
helloサーバーの作成
これは先のクイックスタートと同じだが、オプションを立てないと失敗してしまう箇所があったため、記録しておく。
helloサーバーはアクセスするとあいさつをしてくれるアプリケーション。
▼こんなかんじ
前準備
まずGCPにログインする。
プロジェクトを作成し、Kubernetes Engine APIを有効にしておく。
ここまで出来たら(別にできてなくてもいいが、)cloud shellを起動する。
デフォルトのプロジェクトを指定する。
#[PROJECT_ID]は先ほど作成したプロジェクトのID gcloud config set project [PROJECT_ID]
続いて、リージョンを指定する。
#特にこだわりもないので東京リージョンで。 gcloud config set compute/zone asia-northeast1
クラスターのデプロイ
# [CLUSTER_NAME]は適当なクラスター名。hello-clusterとかでよい。 #--num-nodesはクラスター数。--zoneはAZ。 #この二つを付けないとなんか怒られた。 gcloud container clusters create [CLUSTER_NAME] --num-nodes=3 --zone=asia-northeast1-a
デプロイ出来たら、クラスターの認証情報を取得する。
kubectlがマスターノードと通信するためには認証情報が必要なため、これを取得する。
gcloud container clusters get-credentials hello-cluster --zone=asia-northeast1-a
アプリケーションのデプロイ
gcpに登録されているので、クイックスタート通りにデプロイしてみる。
kubectl run hello-server --image gcr.io/google-samples/hello-app:1.0 --port 8080
デプロイ出来たら公開する。
kubectl expose deployment hello-server --type "LoadBalancer"
なお、LoadBalancerは別途料金がかかる。
アクセスしてみる。
kubectl getで外部IPを調べる。これはEXTERNAL IP 列に表示される。
kubectl get service hello-server
後はブラウザを立ちあげて、httpでアクセスする。
jupyter notebookサーバーの作成
続いて、違うDocker Imageをデプロイしてみる。
今回は以前から興味があったjupyter-notebookのImageを使う。
jupyter-notebookは言わずと知れたデータ解析の必須アイテム。
学生時代に流行っていて、自分の身の回りだとanacondaをインストールし、各自が環境を持っている感じだったが、
誰しもがanacondaをガンガン入れてガンガン回せる高スペックのPCを持っていなかったのと、人によって環境が異なるのが気になっていた。
共用のクラスタ上にデプロイして、使いたいときにアクセスできると嬉しい。
クラスターのデプロイ
先ほどと同様にkubernetesクラスターを作成する。
今回は jupyter-clusterという名前にする。
gcloud container clusters create jupyter-cluster --num-nodes=3 --zone=asia-northeast1-a
デプロイ出来たら、クラスターの認証情報を取得する。
gcloud container clusters get-credentials hello-cluster --zone=asia-northeast1-a
アプリケーションのデプロイ
今回はjupyter-notebookのイメージをデプロイする。
jupyterサーバーなのでデフォルトの8888ポートを指定する。
#portは8888でないとアクセスできない。 kubectl run jupyter-server --image jupyter/datascience-notebook --port 8888 #デプロイする。 kubectl expose deployment jupyter-server --type "LoadBalancer"
アクセスしてみる
kubectl getコマンドで外部IPを取得し、8888番ポートにアクセスする。
▼こんなかんじ
ばっちりデプロイできた!
感想
kubernetetes自体はとても簡単に扱うことができた。kubernetesを使ってマイクロサービスを構築するときに、どうすれば複数機能を共存させられるかに興味があるので、引き続き勉強していきたい。