【kubectl】The connection to the server localhost:8080 was refused と叱られる
問題
Google Container Engineをためしてみたくて、Kubernetesを使ってGoogleContainerEngineのクラスター上にdeploymentをつくろうとして、
% kubectl run PROJECT_NAME --image=IMAGE_NAME --port=8080
などとすると、
The connection to the server localhost:8080 was refused - did you specify the right host or port?
などと怒られる。versionの確認のためkubectl version
するのだが、やはり
% kubectl version Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"5cb86ee022267586db386f62781338b0483733b3", GitTreeState:"clean"} Unable to connect to the server: EOF
となる。Serverと接続できてない。
Serverとは?
Kubernetesは、Podと呼ばれる「複数のコンテナが動かせるひとかたまり」をつくるわけだけど、PodはひとつのClusterの上に散在することになる。ClusterはMasterとWorkerからなり、ひとつのAPIプロセスを持っており、これがdocker daemonのようにAPIリクエストを受け付けるっぽい。
したがって、掲題のエラーは、このAPIとの接続ができていないことに起因するのではなかろうか。
原因
チュートリアルKubernetes - Hello World Walkthroughに、はっきりこう書いてありました。
Please ensure that you have configured kubectl to use the cluster you just created.
kubectlは、クラスタ上のAPIからするとclientであり、これがクラスタ上のAPIと接続するためには、紐付けが完了していなければならない。
解決
なので、このリンクに従って、以下をやる
- Getting Started - Container Engine — Google Cloud Platform
- たしかにこの時点ではOptionalだけど、deploy時には必要じゃねえか
% gcloud config set project otiai10-playground % gcloud config set compute/zone us-central1-a % gcloud config set container/cluster test-1 % gcloud container clusters get-credentials test-1 Fetching cluster endpoint and auth data. kubeconfig entry generated for test-1. % gcloud config list Your active configuration is: [default] ...
そうすっと、
% kubectl version Client Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"5cb86ee022267586db386f62781338b0483733b3", GitTreeState:"clean"} Server Version: version.Info{Major:"1", Minor:"2", GitVersion:"v1.2.0", GitCommit:"5cb86ee022267586db386f62781338b0483733b3", GitTreeState:"clean"}
いい感じで、ServerのAPIとつながれた気がする。kubectl version
が動いてはじめて、このコマンドはデプロイされたアプリケーションのバージョンを表示するものだと理解した。
雑感
- 英語を読まないと全く分からんな
- 今まで、ドキュメント見ても英語は気持ち半分で、サンプルコードばっかり見てた
- 今後は、ちゃんと文章も追うようにしたいなと思った
DRY