読者です 読者をやめる 読者になる 読者になる

takaya030の備忘録

PHP、Laravel、Docker などの話がメインです

Google Container Engine (GKE) に kubectl で Docker コンテナを起動する

Docker

GKE に作成したクラスタに kubectl を使って Docker コンテナを単体起動したときの手順メモ

Docker イメージを Container Registry へ push

今回は nginx の Docker Hub 公式イメージをそのまま使います。

$ docker pull nginx
$ docker tag nginx gcr.io/my_project_id/nginx
$ gcloud docker push gcr.io/my_project_id/nginx

my_project_id にハイフンが含まれている場合、アンダースコアに置き換えて下さい。
push されたイメージは GKE のコンソールで確認できます。
f:id:takaya030:20160604215241p:plain

コンテナクラスタの作成

GKE のコンソールからコンテナクラスタを作成します。
f:id:takaya030:20160604215333p:plain
今回はこのような内容で作成しました。Cluster size がノード数になります。
f:id:takaya030:20160604215344p:plain
作成ボタンを押してから数分後にクラスタが作成されます。
f:id:takaya030:20160604215409p:plain

Container Registry のイメージを使ってコンテナを起動

$ kubectl run hello-nginx --image=gcr.io/my-project-id/nginx:laest --port=80

コンテナのエクスポート

外部からアクセス可能にするため下記コマンドを実行

$ kubectl expose deployment hello-nginx --type="LoadBalancer"

数分待つとコンテナにグローバル IP が割り当てられます。

コンテナのグローバル IP の確認

$ kubectl get service hello-nginx
NAME          CLUSTER-IP     EXTERNAL-IP      PORT(S)   AGE
hello-nginx   10.3.243.148   130.211.xxx.xx   80/TCP    7m

EXTERNAL-IP がコンテナのグローバル IP になります。

動作確認

web ブラウザで http://EXTERNAL-IP を開いて以下の通りに表示されば成功です。
f:id:takaya030:20160604215454p:plain

コンテナの停止

$ kubectl delete service hello-nginx

コンテナクラスタをそのまま放置すると課金されるので、コンソールで削除します。

トラブルシューティング

kubectl run のとき "The connection to the server localhost:8080 was refused" のエラーになる

gcloud の config にクラスタの情報が登録されていないのが原因です。
以下の操作で登録します。

$ gcloud config set project my-project-id
$ gcloud config set compute/zone us-central1-b
$ gcloud config set container/cluster cluster-1
$ gcloud container clusters get-credentials cluster-1
Fetching cluster endpoint and auth data.
kubeconfig entry generated for cluster-1.
$ gcloud config list
Your active configuration is: [default]

[compute]
region = us-central1
zone = us-central1-b
[container]
cluster = cluster-1
...

kubectl version で Server Version が表示されていれば、サーバーと通信できています。

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.4", GitCommit:"3eed1e3be6848b877ff80a93da3785d9034d0a4f", GitTreeState:"clean"}
Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.4", GitCommit:"3eed1e3be6848b877ff80a93da3785d9034d0a4f", GitTreeState:"clean"}