minikube@WindowsをWSLから操作する(confをsymlink編)

はじめに

最近PCをMacからWindowsに買い換えました. Windows用にk8sの環境を整えたので,その内容をまとめておきます.

minikubeの設定ファイルをsymlinkでWSLから参照するために, minikubeのオプションを利用しその中身を確認するところがハイライトです.

[toc]

以下のような環境を目指します.

  • minikubeの構築はWIndowsVIrtualBox上でよい
  • オペレーション (kubectlを使う)する環境はLinuxがいい
    • 特にkube-promptは必ず使いたい
    • kube-promptv1.0.5現在Windowsバイナリは提供されてない
  • Linuxは起動が軽いほうが良いので,VirtualBoxではなくWSLを使う

kube-promptは下記のGIFを見てもわかる通りめっちゃ便利!!!

GitHub - c-bata/kube-prompt: An interactive kubernetes client featuring auto-complete using go-prompt.

手順

minikubeのインストール

GitHub - kubernetes/minikube: Run Kubernetes locally こちらを参考にminikubeをインストールします.

コマンドプロンプトから以下のようにバージョンが確認できれば大丈夫です.

[Windows]
>minikube version
minikube version: v0.32.0

WSLの準備

今回ディストリビューションUbuntu 16.04.5 LTSを使いました.

また,以下を参考にkubectlを使えるようにしておきます. Install and Set Up kubectl - Kubernetes

[WSL]
$ kubectl version
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:39:04Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.4", GitCommit:"f49fa022dbe63faafd0da106ef7e05a29721d3f1", GitTreeState:"clean", BuildDate:"2018-12-14T06:59:37Z", GoVersion:"go1.10.4", Compiler:"gc", Platform:"linux/amd64"

こちらもバージョンが確認できれば大丈夫です.

なお,WSL操作の端末は以下のwslttyを使いました. デフォルトの端末だとkube-promptが使えなかったためです.(TUIが崩れる) GitHub - mintty/wsltty: Mintty as a terminal for Bash on Ubuntu on Windows / WSL

minikubeの設定と起動

今回のミソの部分です,以下のコマンドを実行します. オプションの説明などは後程行います.

[Windows]
#認証認可の証明書をハッシュ化
> minikube config set embed-certs
※何も出力されない

# 確認
>minikube config view

- embed-certs: true
※↑この項目を確認

# 起動
> minikube start

WSLから接続

[WSL]
# minikubeの設定ファイルが参照できるか確認します
$ cd $HOME
$ ls -l /mnt/c/Users/hoge/.kube/config

# 設定ファイルへのsymlinkをHOMEに作成する
$ ln -s  /mnt/c/Users/hoge/.kube/config minikube-config

minikubeの設定ファイル/mnt/c/Users/hoge/.kube/config を参照しやすいようにWSL上にシムリンクを作成します

あとは接続確認するだけ

[WSL]
# 接続確認
$ kubectl get nodes --kubeconfig=minikube-config
NAME       STATUS   ROLES    AGE   VERSION
minikube   Ready    master   13h   v1.12.4

環境変数KUBECONFIGにこれを追加すれば 引数なしでも読み込んでくれる.

[WSL]
export KUBECONFIG=$HOME/minikube-config

この状態で kube-promptを使えば快適!!

オプションminikube config set embed-certs について

今回のキモであるこのオプションについてみてみます

このオプション追加の意図とPRは以下から確認できます. - minikube and WSL | Jason Stangroome - Allow certificates to be optionally embedded in .kube/config by jstangroome · Pull Request #3065 · kubernetes/minikube · GitHub

このオプションのありなしで具体的に何が変わるのか,確認してみます.

オプションがない/falseとき

minikube config set embed-certs: false の場合です.

minikubeの設定ファイルを見るとクラスタやユーザの認証認可のための証明書へのファイルパスがWindows形式で記載されています.

$ cat config.tmp |egrep 'certificate-authority|client-certificate|client-key' | cut -c 1-40

    certificate-authority: C:\Users\hobe\........
    client-certificate: C:\Users\hobe\........
    client-key: C:\Users\hobe\........ 

これをWSLから利用するには,kubecrl config set-*コマンドで設定が必要で,そのためにWindowsとWSLでのパスの読みかえも必要になってきます. また,minikubeのstop/startでIPも変わるため少々面倒です.

オプションがあるとき

minikube config set embed-certs: true の場合です.

$ cat config |egrep 'certificate-authority|client-certificate|client-key' | cut -c 1-40

    certificate-authority-data: LS0tLS1C.......
    client-certificate-data: LS0tLS1CRUd.......
    client-key-data: LS0tLS1CRUdJTiBSU0E.......

3つの証明書の内容がbase64 で暗号化され設定ファイルに埋め込まれています. OS関係なく読み込めるというわけですね.

まとめ

  • minikubeの操作をWSLのkube-promptから行えるようにしました
  • これによりk8sクラスタ(minikubeやAKS,GKE)の操作を,同一のWSL端末から行えるようになりました

参考サイト