DRYな備忘録

Don't Repeat Yourself.

【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と接続するためには、紐付けが完了していなければならない。

解決

なので、このリンクに従って、以下をやる

% 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