Edited at

minikubeで始めるカンタンKubernetes(Windows 10用)

More than 1 year has passed since last update.

初心者がKubernetesを触ってみたいと思ったのでインストールしてみました。

会社ではレガシーシステムが横行しているので、なかなかこういうの触れないので、補足あればコメントください。

DockerがKubernetesの統合を決めたそうでして、今更minikubeを使うのもどうかなって思うのですが、コンテナエンジンはDockerだけではありません。rktやCRI-Oのように取って代わる可能性があるものがあるなら、ロックインしない方法が必要と思ってまとめておきました。

(2018/04/18追記)

Docker for DesktopのKubernetesが出た日から今まで両方とも使ってきましたが、minikubeを使う利点が2点あることに気付きました。


  1. Kubernetesバージョンの追従が早い

  2. OSSのLocal環境構成に都合が良いことが多い

例えば、Docker for Desktopと比べて、新バージョンへの追従が1ヶ月ほど早い実感がありますし、Jenkins XなどのOSSも、localで試す=minikubeという数式が出来上がっている気がしており、つまりminikubeと一緒にOSSを導入するスクリプトが公開されていることを良く見ます。これらが覆るまでは、自分もminikubeを使っていこうと思っています。


TL;DR


  • Windows 10, Hyper-Vでも出来るKubernetes環境


対象読者


  • Kubernetesが気になってしょうがないけど、ハードル高そうだなと尻込みしている人

  • ちょっと触って感触を知りたいという人

  • とにかく初心者!


前提条件


  • インターネットに繋がること

  • Intel VTが有効なPCであること

  • Windows 10 Proであること(本記事ではHyper-Vを扱いますが、その条件がProです)


1. 事前準備


1.1. Docker for Windowsのインストール

DockerをWindowsで動作させるというよりかは、dockerの関連コマンドを入手するのに一番手っ取り早いため、Docker for Windowsをインストールする。

Windows Containers on Windows 10より、「Download Docker for Windows」というリンクをクリック。

msiインストーラーをダウンロード、実行する。

2017-04-09.png

Dockerインストールにあたって引っかかるポイントは無く、Nextをクリックしていけば完了する。


1.2. Hyper-V


1.2.1. Hyper-Vの有効化

minikubeをWindows 10で動作させる場合、Hyper-Vにminikube VMを作成することも可能。他にはVirtual boxとかも対応しているのだと思うけど、筆者的にはHyper-Vで問題なさそうだったし好きなのでHyper-Vにした。

CPUがIntel VTに対応していないとダメです。

左下のWindowsキーを右クリック

→コントロールパネル

→プログラムと機能

→Windowsの機能の有効化または無効化

→Hyper-Vのチェックボックスにチェック!

→再起動

これだけでHyper-Vの有効化は完了です。


1.2.2. Hyper-Vに仮想スイッチを作成する

PCの再起動後、Hyper-Vマネージャーを開き、「仮想スイッチ マネージャー」を開く。

Inkedキャプチャ_LI.jpg

※すでにminikube VMがいるのは写真撮り忘れて後で撮ったからです汗

次に、minikube VMがWAN通信するための外部用スイッチを作成する。

この操作によって、物理インタフェースに対してブリッジインタフェースが作成され、minikube VMがPCと同じネットワークにアサインされてWANと通信できるようになります。

※ あとで使うので、ここで指定したvSwitch名はメモっておいてください

Inkedキャプチャ2_LI.jpg

仮想スイッチの名前は適当で大丈夫です。

「外部ネットワーク」であることが確認できればOKを押してください。

Inkedキャプチャ3_LI.jpg


1.3. kubectlのインストール

kubectlは、名の通りKubernetesを操作・管理するためのコマンドです。

このコマンドを通して、KubernetesのPod, Serviceなどを操作してくことになります。

さてこのkubectlですが、主に2通りのインストール方法があります。


  1. バイナリそのまま取得

    kubectlは単体でも動作するので、それ単体だけダウンロードしPATHを通しても良いです。

  2. Google Cloud SDKより取得

    Google Cloud PlatformにはGoogle Container Engine(GKE)というKubernetesのマネージドサービスが提供されています。それを操作するのもkubectlなので、Google Cloud SDKより取得するのも可能です。

筆者の個人的な見解ですがGoogle Cloud SDKよりインストールするのをオススメします。

Kubernetesはコンテナをサービス運用するためには非常に強力なツールです。

ですが、これをオンプレで安定運用するためにはそれなりの技術者の確保が必要になります。

対してKubernetesのSaaSであるGKEではランニングコストこそかかりますが、Kubernetesがボタンひとつでデプロイでき、ある程度の安定運用がそれだけで手に入るため、かなりハードルが下がるのでサービスを展開するのに十分選択肢に入ってくるため、インストールも楽ですし将来的な利用を見据えてオススメです。


1.3.1. kubectlバイナリ単体を取得

バイナリ単体をダウンロードしたい方は読んでください。GCP Cloud SDKよりkubectlを取得したい人は次の1.3.2.に進んでください。

配置したいパスに移動し、curlより取得します。

一応、タイトルを無視してWindows以外も記載します。

OS X, Linuxの場合は実行権限を与えること、PATHの通ったディレクトリに移動することを忘れずに行ってください。

# OS X

curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl

# Linux
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl

# Windows
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/windows/amd64/kubectl.exe

WindowsにcURLが入っていないという方は、まずはブラウザで↓にアクセスし、安定版のversionを調べます。

https://storage.googleapis.com/kubernetes-release/release/stable.txt

※ 記載当時は「v1.8.2」でした。

次に、そのバージョンを↓のURLに埋め込んでブラウザよりアクセスします。

※ release と bin の間

※ 例として「v1.8.2」で記載しています。

https://storage.googleapis.com/kubernetes-release/release/v1.8.2/bin/windows/amd64/kubectl.exe

ダウンロードしたkubectl.exeを適当なパスに配置します。

筆者は「C:\Program Files\kubernetes\kubectl.exe」としてみました。

この手順でインストールした場合、環境変数でパスを通すのを忘れないでください。


1.3.2. Google Cloud SDKよりkubectlを取得

先述したとおり、GKEを操作するためのものは一般的なkubectlなので、Google Cloud SDKをインストールし、kubectlを取得しても構いません。

以下URLにアクセスします。

https://cloud.google.com/sdk/

一番上に「インストール」というボタンがあると思うのでクリックし、インストールを進めます。

SDKのインストール自体は単純な操作なので、省略します。

インストール後、Google Cloud SDK Shellより、以下のコマンドを実行してkubectlをインストールします。

gcloud components install kubectl

これで、minikubeの準備は終わりです。


2. minikube

やっとminikubeのインストール~設定に入れます。


2.1. minikubeの取得

minikubeはGitHub上で公開されています。

https://github.com/kubernetes/minikube/releases

Windowsなので「minikube-windows-amd64」をダウンロードして、「minikube.exe」に名前を変更してください。(PATHを通しても"〜.exe"のように拡張子が付いていないといけません)

Inkedキャプチャ4_LI.jpg

配置パスは適当に「C:\Program Files\minikube\minikube.exe」とします。

(手動でC:\Program Files\minikubeフォルダを作成して、exeを配置するだけ)

あとはPATHを通します。

環境変数よりPATHに「C:\Program Files\minikube」を追加します。

※Pathの追加方法

Windowsキーを右クリック

→システム

→システムの詳細設定

→環境変数

→Pathを選択し「編集」をクリック

→新規

→「C:\Program Files\minikube」を追記


2.2. minikube VMのデプロイ

PowerShellを右クリックし「管理者として実行」をクリック。

minikubeを開始するため、以下のコマンドを実行する。

※ 仮想スイッチ名はご自分で指定したものに置き換えてください。

$ minikube start --vm-driver=hyperv --hyperv-virtual-switch="vSwitch0" --show-libmachine-logs --v=3

これによって、Hyper-V上にminikube VMがデプロイされる。コマンドオプションの意味合いは下記の通り


  • --vm-driver=hyperv

    Hyper-V上にminikube VMをデプロイすることを意味する

  • --hyperv-virtual-switch="vSwitch0"

    仮想スイッチ名を「vSwitch0」とすることを意味する(各自置き換えてください)

  • --show-libmachine-logs

    minikube VMデプロイ中のログを表示する

  • --v=3

    ログが詳細に見えるようになる(トラブルシューティングのため)


2.3. minikubeの動作確認

minikubeのステータスを確認します。

$ minikube status

minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.103

また、自動的にminikubeはkubectlの定義ファイルを設定してくれるので、kubectlよりminikubeを確認してみます。(kubectl configは~/.kube/にあります)

$ kubectl get nodes

NAME STATUS AGE VERSION
minikube Ready 6d v1.8.0


minikubeの再作成

ここまで一度できると、次のminikubeバージョンが出てもminikube deleteで削除、minikube start (オプションは前述の通り)をするだけで再作成ができます。

ただし、minikube自体はバイナリを上記手順でダウンロードする必要があります。

# minikubeの削除

$ minikube delete

# minikubeの作成
$ minikube start --vm-driver=hyperv --hyperv-virtual-switch="vSwitch0" --show-libmachine-logs --v=3


minikubeの時刻

タイムゾーンの設定、時刻の修正について記載します。


タイムゾーン設定

JSTにします。

minikube ssh -- sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime


時刻の修正

minikubeがHostと時刻同期されないという方はこれを実行してみてください。

以下のコマンドで時刻を設定することができますが、同期ではなく、あくまでもコマンドを実行した時刻に強制的に合わせるコマンドです。つまりワークアラウンド。

minikube ssh -- docker run -i --rm --privileged --pid=host debian nsenter -t 1 -m -u -n -i date -u $(date -u +%m%d%H%M%Y)