砂漠のデータ分析

機械学習 / 画像処理 / 自然言語処理

Google Kubernetes Engineをちょっと動かしてみました

はじめに

Google Kubernetes Engineをちょっと動かしてみました。

内容としては@mihiratさんが書いたkubernetes初心者のための入門ハンズオン - Qiita の前半を辿ってみた作業ログです。@mihiratさんありがとうございました。

Google Kubernetes Engineはdockerコンテナをフルマネージドで実行できるサービスです。なんか巨大なデータの分散処理に使えないかなぁと思って調べてみてる所です。

参考にした資料

作業ログ

セットアップ

  • project作成
> gcloud projects create --name try-k8s
No project id provided.

Use [try-k8s-190412] as project id (Y/n)?  y

Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/try-k8s-190412].
Waiting for [operations/pc.6812860857256074521] to finish...done.                                                                          
> gcloud config set project try-k8s-190412
Updated property [core/project].
  • clusters createしてみる➡エラー➡kubectlを入れないとダメ
> gcloud container clusters create k0 --zone asia-northeast1-a
WARNING: Accessing a Kubernetes Engine cluster requires the kubernetes commandline
client [kubectl]. To install, run
  $ gcloud components install kubectl

ERROR: (gcloud.container.clusters.create) ResponseError: code=403, message=The Kubernetes Engine API is not enabled for project try-k8s-190412. Please ensure it is enabled in the Google Cloud Console at https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=try-k8s-190412 and try again.
  • kubectlを入れる
> gcloud components install kubectl
  • もう一度clusters create➡エラー➡consoleでk8sを有効化する必要がある
> gcloud container clusters create k0 --zone asia-northeast1-a
ERROR: (gcloud.container.clusters.create) ResponseError: code=403, message=The Kubernetes Engine API is not enabled for project try-k8s-190412. Please ensure it is enabled in the Google Cloud Console at https://console.cloud.google.com/apis/api/container.googleapis.com/overview?project=try-k8s-190412 and try again.
  • 表示されたURLを開いて[有効化]ボタンを押したが、同じページにリダイレクトされてしまう。

    • 今回、この検証に使っているアカウントは課金を有効化していなかったからかも知れない。(未確認)
    • 課金を有効化して、再び[有効化]ボタンを押した所、webにconsole画面が表示された。上手く行ったらしい。
  • もう一度clusters create➡できた。

    • 数分くらいかかった気がする。
> gcloud container clusters create k0 --zone asia-northeast1-a
Creating cluster k0...done.                                                                                                                
Created [https://container.googleapis.com/v1/projects/try-k8s-190412/zones/asia-northeast1-a/clusters/k0].
kubeconfig entry generated for k0.
NAME  LOCATION           MASTER_VERSION  MASTER_IP      MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
k0    asia-northeast1-a  1.7.8-gke.0     35.200.97.160  n1-standard-1  1.7.8-gke.0   3          RUNNING

動かしてみる

  • nginx起動➡一瞬で起動した…
> kubectl run nginx --image=nginx:1.11.3
deployment "nginx" created
  • get podsでステータス確認。
> kubectl get pods
NAME                     READY     STATUS    RESTARTS   AGE
nginx-1062973755-dcsqc   1/1       Running   0          1m
  • 上記ではポート空いてないらしいので空ける。
    • この1行でport80が空き、ロードバランシングされるらしい。
    • え…簡単。
kubectl expose deployment nginx --port 80 --type LoadBalancer
  • get servicesでステータス確認。
    • serviceというのはpodより大きな粒度の管理単位です。
    • おや? EXTERNAL-IPがになっている。
> kubectl get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.43.240.1    <none>        443/TCP        11m
nginx        LoadBalancer   10.43.251.87   <pending>     80:32240/TCP   42s
  • 数分後に再びget servicesしたらEXTERNAL-IP割り振られていた。
> kubectl get services
NAME         TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
kubernetes   ClusterIP      10.43.240.1    <none>        443/TCP        14m
nginx        LoadBalancer   10.43.251.87   35.200.7.89   80:32240/TCP   2m

アクセスしてみる

EXTERNAL-IPに表示されたIPにブラウザからアクセスしてみる。 ...出来てる。すごい

f:id:sabaku2017:20171228222905p:plain

後片付け

  • 消しておこう
> kubectl delete svc nginx
service "nginx" deleted
> kubectl delete svc kubernetes
service "kubernetes" deleted
  • 消えた
> kubectl get services
No resources found.

今日はここまで