体はドクペで出来ている

インフラ、Goの割合が多い技術ブログ

WindowsでminikubeをインストールしてWSLからkubectlできるようになるまで

前座

minikubeはローカルでシングルノードのKubernetesを一発で起動することができるツールで、主に開発・検証で使うことになるかと思います。これはWindowsにも対応しておりコマンドラインから制御することができますがクラスターの制御コマンドであるkubectlはやはりWSLから動かすのが便利でしょう。

通常minikubeは起動時にkubectlを検出して自動設定を行ってくれますが、流石にWSLまでは気を使ってくれず少し設定を行う必要がありますので本記事ではこの流れについて記すことでWindowsユーザーがminikubeを扱う際の一助になれればと思います。

前提条件

  • WSL(Ubuntu)がインストール済みであること
  • Windowsでのパスの通し方を知っていること

手順

VirtualBoxをインストール

公式ダウンロードページからWindows版をインストールします。
特に難しいことは無く、設定は全てデフォルトでOKです。

minikubeをダウンロードしパスを通す

minikubeはGitHubのreleaseページからダウンロードすることができます。インストーラー版と実行ファイル単体がありますがお好みでどちらでもOKです。私は単体でダウンロードしC:\Program Files\minikubeに配置しパスを通しました。

実行ファイル単品をダウンロードするとminikube-windows-amd64というファイルができますがこれをminikube.exeとリネームする必要がありますのでご注意下さい。コマンドプロンプトで下記のようにバージョン番号が表示されればOKです。

>minikube version
minikube version: v0.25.2

minikubeを起動する

コマンドプロンプトからminikube startを実行するとVMイメージの自動構築が開始されます。Windows側からkubectlが見付からないので警告が出ていますが今回はWSL側で用意するので無視してOKです。

>minikube start
========================================
kubectl could not be found on your path. kubectl is a requirement for using minikube
To install kubectl, please do the following:

download kubectl from:
https://storage.googleapis.com/kubernetes-release/release/v1.9.4/bin/windows/amd64/kubectl.exe
Add kubectl to your system PATH

To disable this message, run the following:

minikube config set WantKubectlDownloadMsg false
========================================
Starting local Kubernetes v1.9.4 cluster...
Starting VM...
Downloading Minikube ISO
 142.22 MB / 142.22 MB [============================================] 100.00% 0s
Getting VM IP address...
Moving files into cluster...
Downloading localkube binary
 163.02 MB / 163.02 MB [============================================] 100.00% 0s
 65 B / 65 B [======================================================] 100.00% 0s
Setting up certs...
Connecting to cluster...
Setting up kubeconfig...
Starting cluster components...
Kubectl is now configured to use the cluster.
Loading cached images from config file.

中断時のリカバリ

何らかの理由でminikube startを中断してしまうと以後コマンドを叩いてもE0407 23:41:44.363332 5620 status.go:71] Error getting machine status: Error getting host state: machine does not existなどと表示されてしまいニッチもサッチもいかない事態に陥りますが、VirtualBoxVMを削除した上でC:\Users\<username>\.minikube以下を全て削除すれば最初からやり直すことができます。

WSLにkubectlをインストールする

kubectlはWebのダウンロードページといったものはないようなのでファイル置き場から直接持ってこなければなりません。ダウンロードが終わったら実行権限を付けて適当にパスの通った場所に置きます。私の環境で試した流れは以下の通りです。

$ curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
$ chmod 755 kubectl
$ sudo mv kubectl /usr/local/bin
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:55:54Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}
The connection to the server localhost:8080 was refused - did you specify the right host or port?

kubectlの設定

credentials, cluster, contextについて

credentialsとはKubernetesクラスターにアクセスする際のユーザーIDやクライアント証明書の設定のことです。clusterとはKubernetesクラスターのエンドポイントURLやサーバー証明書の設定のことです。contextとはcredentialsとclusterをセットにしたプロファイルのようなもので、これを変更することでkubectlの制御対象を切り替えることができます。

エンドポイント情報の取得

認証に必要な各種ファイルはminikube startが完了するとC:\Users\<username>\.minikube内に自動で生成されます。まずはMasterのIPアドレスを調べましょう。下記例では192.168.99.100となっており、これにデフォルトのポート番号である8443を加えたものがエンドポイントとなります。

>minikube status
========================================
kubectl could not be found on your path. kubectl is a requirement for using minikube
To install kubectl, please do the following:

download kubectl from:
https://storage.googleapis.com/kubernetes-release/release/v1.9.4/bin/windows/amd64/kubectl.exe
Add kubectl to your system PATH

To disable this message, run the following:

minikube config set WantKubectlDownloadMsg false
========================================
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100

認証情報の設定

次に下記のようにコマンドを叩きcredentials, cluster, contextの設定を行って下さい。正しく設定ができていればkubectl cluster-infoクラスターの状態が取得できるはずです。ここまでできればminikubeは無事にインストールできていますので、末永く楽しいKubenetesライフを送れます。

$ kubectl config set-credentials minikube --client-certificate=/mnt/c/Users/<username>/.minikube/client.crt --client-key=/mnt/c/Users/<username>/.minikube/client.key
User "minikube" set.
$ kubectl config set-cluster minikube --server=https://192.168.99.100:8443 --certificate-authority=/mnt/c/Users/<username>/.minikube/<username>.crt
Cluster "minikube" set.
$ kubectl config set-context minikube --user=minikube --cluster=minikube
Context "minikube" created.
$ kubectl config use-context minikube
Switched to context "minikube".
$ kubectl cluster-info
Kubernetes master is running at https://192.168.99.100:8443

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

参考資料

Install Minikube

Install and Set Up kubectl