上はこの前京都に行った時の紅葉の写真なんですが、秋はあっという間に終わっちゃいましたね。 めっきり寒くなってきましたが皆さん風邪引いていないですか?
今日はめずらしくマジメに技術敵な事を書きます!
Google Cloud Platform に東京リージョンも出来た事ですし、 Google Container Engine も出来てからそれなりにたった事ですし、いい加減イジイジしてみようかと思いまして。
どうせなら普段使っている Python の Flask を動く環境を作ってみます。
Running the Python Bookshelf on Container Engine | Python | Google Cloud Platform にならって Google Container Engine で Flask を動かしてみる。
所感
やってみた所感としては、 かなり簡単 です!!。
コマンドライン操作が多いとはいえ、簡単なコマンドばかり(指示出す系のものしか無い)。
あとは商用に耐えうるのかどうかは今後また検証していきたいと思います。
以下に手順ごとに記載していきます。
今回実行したソースコード達は GitHub - noblejasper/gke-flask: GoogleContainerEngine で Flask アプリケーション動かす に置いておきました。
gcloud コマンド最新化
curl https://sdk.cloud.google.com | bash # gcloud インストール gcloud components update kubectl # kubectl コマンド入れる gcloud init # gcloud の設定初期化とか
GKE に コンテナーを作る
何回も使うのでプロジェクト名を変数に入れておく
PROJ_NAME=gke-flask
1:クラスター作成
gcloud container clusters create ${PROJ_NAME} --scopes "cloud-platform" --num-nodes 2
これは終わるまで結構時間かかった
2:認証情報をもってくる
gcloud container clusters get-credentials ${PROJ_NAME}
3:クラスターへのアクセス確認
kubectl cluster-info
こんな感じの出力が出れば良さそう
Kubernetes master is running at https://xxx.xxx.xxx.xxx GLBCDefaultBackend is running at https://xxx.xxx.xxx.xxx/api/v1/proxy/namespaces/kube-system/services/default-http-backend Heapster is running at https://xxx.xxx.xxx.xxx/api/v1/proxy/namespaces/kube-system/services/heapster KubeDNS is running at https://xxx.xxx.xxx.xxx/api/v1/proxy/namespaces/kube-system/services/kube-dns kubernetes-dashboard is running at https://xxx.xxx.xxx.xxx/api/v1/proxy/namespaces/kube-system/services/kubernetes-dashboard To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
Google Cloud Storage にバケット作る
1: バケット作成
gsutil mb gs://${PROJ_NAME}
2:バケットを全体がread出来る権限に
gsutil defacl set public-read gs://${PROJ_NAME}
設定ファイルを編集する
1:config.py 開く
2:PROJECT_ID
を変更する(GKEのプロジェクト名)
3:CLOUD_STORAGE_BUCKET
を変更する(さっき作ったバケット名)
アプリケーションをコンテナ化する
1:Dockerfile確認
- 自分はpython2.7にしたりしちゃいました
2:application の Dockerイメージ を作る
project名見えてるけど消しちゃうのでいっかw
docker build -t gcr.io/nobjas-test-project-161209/gke-flask .
初回はベースのイメージとかダウンロードするので重い。(進捗見えるので不安感は少ない)
3:Google Container Registry にさっきのイメージをpush
始めに作ったクラスターはここにpushするとアクセス出来るようになるらしい
gcloud docker push gcr.io/nobjas-test-project-161209/gke-flask
ポッド(pods)を展開
アプリをdeployしてみます。
1:gke-flask-frontend.yaml を必要に応じて修正
- project名は
nobjas-test-project-161209
になってます
2:yamlで設定したリソースをクラスタに展開する
kubectl create -f gke-flask-frontend.yaml
控えめな報告
deployment "gke-flask-frontend" created
3:展開されているリソースの確認
kubectl get deployments
3個動いてるっぽい
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE gke-flask-frontend 3 3 3 0 36s
4:展開すると、pods てのが出来るらしい
確認してみる
kubectl get pods
なんかエラー出てるっぽいけど、、、CrashLoopBackOff
とか不穏なSTATUS
NAME READY STATUS RESTARTS AGE gke-flask-frontend-1842409802-3x0qr 0/1 CrashLoopBackOff 1 12s gke-flask-frontend-1842409802-9wd2j 0/1 CrashLoopBackOff 1 12s gke-flask-frontend-1842409802-oq368 0/1 CrashLoopBackOff 1 12s
(この時はこんなミスにハマってました honcho の Procfile に書く process type は - が使えなくて1時間以上ハマったので見せしめに書いておく。 - Qiita)
こんな感じになると正解です。
NAME READY STATUS RESTARTS AGE gke-flask-frontend-1106178333-4plnm 1/1 Running 0 14s gke-flask-frontend-1106178333-exxq5 1/1 Running 0 14s gke-flask-frontend-1106178333-ui59c 1/1 Running 0 14s
ちなみに止める時は下記方法で。
kubectl delete deployments gke-flask-frontend
ロードバランサーを展開
1:gke-flask-service.yaml を確認
2:起動はさっきと一緒
kubectl create -f gke-flask-service.yaml
3:公開IPを取得する
kubectl describe service gke-flask
こんな感じの出力
Name: gke-flask-frontend Namespace: default Labels: app=gke-flask tier=frontend Selector: app=gke-flask,tier=frontend Type: LoadBalancer IP: xxx.xxx.xxx.xxx LoadBalancer Ingress: xxx.xxx.xxx.xxx Port: <unset> 80/TCP NodePort: <unset> 30924/TCP Endpoints: xxx.xxx.xxx.xxx:8080,xxx.xxx.xxx.xxx:8080,xxx.xxx.xxx.xxx:8080 Session Affinity: None Events: FirstSeen LastSeen Count From SubobjectPath TypeReason Message --------- -------- ----- ---- ------------- -------- ------ ------- 59s 59s 1 {service-controller } Normal CreatingLoadBalancer Creating load balancer 5s 5s 1 {service-controller } Normal CreatedLoadBalancer Created load balancer
アクセスしてみる
IP:
の横にあるアドレスにブラウザからアクセスするとページが表示されました!
参考URL
- Running the Python Bookshelf on Container Engine | Python | Google Cloud Platform
- Google Container Engine で Webサーバ立ててScale、Fail Overさせてみる - Qiita
- マシンタイプ | Compute Engine | Google Cloud Platform
やりたい事
そういえば、Google Container Engine て GKEって略すらしいですよ。 まだまだ奥は深いので試していきますー