Google Container Engine(GKE)で単一コンテナのアプリケーションを動かす

(2016-08-21)

Kubernetes - Hello World Walkthrough

CloudSDKとkubectlのインストール

Cloud SDKをインストールしてgloudコマンドを使えるようにする。

$ gcloud --version
Google Cloud SDK 122.0.0
$ gcloud components install kubectl

Google Container RegistryにPush

$ export PROJECT_ID="******"
$ docker build -t gcr.io/$PROJECT_ID/test:v1 .
$ gcloud docker push gcr.io/$PROJECT_ID/test:v1

プロジェクトの課金を有効にしていないとこんなエラーメッセージが出る。

denied: Unable to create the repository, please check that you have access to do so.

Clusterの作成

$ gcloud config set core/project $PROJECT_ID
$ gcloud config set compute/zone asia-east1-b
$ gcloud container clusters create test-cluster
$ gcloud config set container/cluster test-cluster

Container Engine APIが有効になっていない場合はこうなる。 一度コンソールからContainer Engineを選ぶと、サービスの準備が始まって有効になる。

ERROR: (gcloud.container.clusters.create) ResponseError: code=503, message=Project **** is not fully initialized with the default service accounts. Please try again later.

Pod(とそのDeployment)の作成

$ kubectl run test-node --image=gcr.io/$PROJECT_ID/test:v1 --port=8080
$ kubectl get deployments
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
test-node   1         1         1            0           12s

$ kubectl get pods
NAME                         READY     STATUS              RESTARTS   AGE
test-node-1016577872-h7yiz   0/1       ContainerCreating   0          18s

Serviceを作成してクラスタの外からアクセスできるようにする

デフォルトではクラスタ内からしかアクセスできない。 --type="LoadBalancer"のServiceを作成するとEXTERNAL_IPが割り当てられ、外からアクセスできるようになる。

$ kubectl expose deployment test-node --type="LoadBalancer"
$ kubectl get services test-node
NAME        CLUSTER-IP     EXTERNAL-IP       PORT(S)    AGE
test-node   10.43.247.66   104.199.158.131   8080/TCP   1m

スケーリング

$ kubectl scale deployment test-node --replicas=4
$ kubectl get deployment
NAME        DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
test-node   4         4         4            2           11m

$ kubectl get pods
NAME                         READY     STATUS              RESTARTS   AGE
test-node-1016577872-fso09   0/1       ContainerCreating   0          12s
test-node-1016577872-h7yiz   1/1       Running             0          11m
test-node-1016577872-sbdvl   1/1       Running             0          12s
test-node-1016577872-z9ji3   0/1       ContainerCreating   0          12s

更新

$ docker build -t gcr.io/$PROJECT_ID/test:v2 .
$ gcloud docker push gcr.io/$PROJECT_ID/test:v2
$ kubectl set image deployment/test-node test-node=gcr.io/$PROJECT_ID/test:v2

削除

$ kubectl delete service,deployment test-node
$ gcloud container clusters delete test-cluster
$ gcloud config unset container/cluster