WindowsでminikubeをインストールしてWSLからkubectlできるようになるまで
前座
minikubeはローカルでシングルノードのKubernetesを一発で起動することができるツールで、主に開発・検証で使うことになるかと思います。これはWindowsにも対応しておりコマンドラインから制御することができますがクラスターの制御コマンドであるkubectlはやはりWSLから動かすのが便利でしょう。
通常minikubeは起動時にkubectlを検出して自動設定を行ってくれますが、流石にWSLまでは気を使ってくれず少し設定を行う必要がありますので本記事ではこの流れについて記すことでWindowsユーザーがminikubeを扱う際の一助になれればと思います。
前提条件
手順
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
などと表示されてしまいニッチもサッチもいかない事態に陥りますが、VirtualBoxのVMを削除した上で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'.