SlackのBotをGKEを使ってデプロイする
先日、Rubotyをk8sで動かす所までやりました。次のステップとしてGoogle Kubernetes Engine(GKE)を使ってクラスタを構築し、ボットをデプロイします。 Google Cloud SDKの使用は初めてでしたのでセットアップから始めました。
ダッシュボートからk8sクラスタをGUIで作成します。クラスタ作成には設定値がたくさんありましたが、今回は特にいじらず作成しました。
クラスタをshellからいじるために、接続します。
$ gcloud container clusters get-credentials bot --zone asia-northeast1-a --project your-cluster-name
試しに、podsを表示させようとしますが、まだ何もしてないので表示されません。
$ kubectl get pods No resources found.
今回、デプロイするのは前回記事で構築したRubotyボットです。前回はDocker hubにimageを置きましたが、今回はGoogle Container Registryへimageをpushし直しました。
KubernetesでRubotyを動かして自動復旧を味わう - keisuke-tの日記
$ gcloud docker -- push asia.gcr.io/your-cluster-name/ruboty:latest
同時に、k8sマニフェストファイルも書き換えています。今回は、Deploymentを定義しています。 Deploymentはアプリケーションデプロイの基本単位となるリソースで、ResplicaSetは同じ仕様のPodのレプリカ数を管理、制御するリソースでしたがDeployementはReplicaSetを管理、制御するリソースです。
apiVersion: apps/v1 kind: Deployment metadata: name: ruboty labels: app: ruboty spec: replicas: 1 selector: matchLabels: app: ruboty template: metadata: labels: app: ruboty spec: containers: - name: ruboty image: asia.gcr.io/kube-test-224908/ruboty:latest imagePullPolicy: IfNotPresent
準備はできたので、podsを立ち上げます。
$ kubectl apply -f bot_deploy.yaml
kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ruboty 1 1 1 1 7h
kubectl get pods --watch NAME READY STATUS RESTARTS AGE ruboty-586bd8888-lg7fg 1/1 Running 0 7h
大成功です。 botも生きてますね。
podsを削除しようとしても、自動復旧で再起動するので落とす時はDeployementごと落としましょう。
$ kubectl delete -f bot_deploy.yml
最後に
デプロイまでのフローがこんなにシンプルだとは思いませんでした。GCPのダッシュボードから確認できるノードやポッドの状態もとても分かりやすいですし、この記事では書いてませんが、ポッドのスケーリングやデプロイ時のローリングアップデートも魅力的なので次回は、ウェブサービスのデプロイ、運用に使ってみたいと思いました。