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 のコンソールで確認できます。
コンテナクラスタの作成
GKE のコンソールからコンテナクラスタを作成します。
今回はこのような内容で作成しました。Cluster size がノード数になります。
作成ボタンを押してから数分後にクラスタが作成されます。
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 を開いて以下の通りに表示されば成功です。
トラブルシューティング
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"}
参考サイト
- Quickstart for Google Container Engine | Container Engine | Google Cloud Platform
- GKE(Google Container Engine) のContainer Registryでハマった話 - Qiita
- Google Container Engine (GKE) を触ってみた | Developers.IO
- Google Container Engine の外部IPを指定する | ユニコーンリサーチ株式会社
- 【kubectl】The connection to the server localhost:8080 was refused と叱られる - DRYな備忘録
- 開始方法 | Container Engine | Google Cloud Platform