minikube@WindowsをWSLから操作する(confをsymlink編)
はじめに
最近PCをMacからWindowsに買い換えました. Windows用にk8sの環境を整えたので,その内容をまとめておきます.
minikubeの設定ファイルをsymlinkでWSLから参照するために, minikubeのオプションを利用しその中身を確認するところがハイライトです.
[toc]
以下のような環境を目指します.
- minikubeの構築はWIndowsのVIrtualBox上でよい
- オペレーション (
kubectl
を使う)する環境はLinuxがいい - Linuxは起動が軽いほうが良いので,VirtualBoxではなくWSLを使う
※kube-prompt
は下記のGIFを見てもわかる通りめっちゃ便利!!!
手順
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関係なく読み込めるというわけですね.