windows上で、ubuntuの仮想マシンを作成し、minikubeを起動まで

# 動機

なぜ、こんなことをしようかというと、Dockerのことなんかを踏まえ、開発はUbunutuでやりたいけど、Windows PCしかない。
けど、開発用クラウドは借りたくないな～って人向けです。
やっぱり、開発はあくまでローカルでというのが、私の考えです。
ローカルで開発用クラウド作ってるようで面白かったです。

# 構築

## 仮想マシンの作成

仮想マシンの構築は、vagrantを使用します。
OSは、「Ubuntu 18.04 LTS」にしました。
適当なフォルダを作り、下記のvagrantfileを作成・配置し、その場所で`vagrant up`します。

```ruby:vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "bento/ubuntu-18.04"
end
```

`vagrant ssh`で、ログインしましょう。

## minikubeのインストール

後述しますが、仮想マシンだと仮想化がサポートされていない為、仮想化ドライバーが動きません。
エラーなども含め記載しておきます。

さて、こちらにVMサポートがされていないLinuxでの手順があります。
[minikube - Linux Continuous Integration without VM Support](https://github.com/kubernetes/minikube#linux-continuous-integration-without-vm-support)

Dockerが必要になるので、インストールします。
[Docker - Get Docker CE for Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/#install-using-the-repository)

Dockerのインストールが終わったら、下記のコマンドを実行します。

minikubeのインストール

```bash
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo cp minikube /usr/local/bin/ && rm minikube
```

kubectlのインストール

```bash
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && chmod +x kubectl && sudo cp kubectl /usr/local/bin/ && rm kubectl
```

各種環境変数の設定です。

```bash
export MINIKUBE_WANTUPDATENOTIFICATION=false
```

```bash
export MINIKUBE_WANTREPORTERRORPROMPT=false
```

```bash
export MINIKUBE_HOME=$HOME
```

```bash
export CHANGE_MINIKUBE_NONE_USER=true
```

設定ファイルが要るようです。

```bash
mkdir -p $HOME/.kube
```

```bash
touch $HOME/.kube/config
```

```bash
export KUBECONFIG=$HOME/.kube/config
```

minikubeを起動します。

```bash
sudo minikube start --vm-driver=none
```

これで、minikubeの起動までができました。
そのうち続きとして、今回作ったminikubeでアプリをWebアプリを、デプロイし、ホストOS（Windows10）からブラウザで閲覧してみたいと思います。
乞うご期待（笑

## 番外編

### KVMを入れて、動かそうとしたら出たエラー

ドキュメントによると、linux上でのminikubeの稼働条件として、KVMが必要になります。
KVM2というのが推奨されるようなので、そちらをインストールしました。
[minikube - Driver plugin installation](https://github.com/kubernetes/minikube/blob/master/docs/drivers.md#kvm-driver)

```bash
sudo apt install libvirt-clients libvirt-daemon-system qemu-kvm
```

```bash
sudo usermod -a -G libvirt $(whoami)
```

```bash
newgrp libvirt
```

```bash
curl -Lo docker-machine-driver-kvm2 https://storage.googleapis.com/minikube/releases/latest/docker-machine-driver-kvm2 \
&& chmod +x docker-machine-driver-kvm2 \
&& sudo cp docker-machine-driver-kvm2 /usr/local/bin/ \
&& rm docker-machine-driver-kvm2
```

次に、minikubeをインストールします。

```bash
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 \
&& chmod +x minikube \
&& sudo cp minikube /usr/local/bin/ \
&& rm minikube
```

kubectlが必要とのことなので、kubectlをインストールします。

```bash
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.10.0/bin/linux/amd64/kubectl \
&& chmod +x kubectl \
&& sudo mv kubectl /usr/local/bin/
```

minikubeを起動します。

```bash
sudo minikube start --vm-driver kvm2
```

ここで、エラーが発生しました。

```bash
E0826 15:02:44.776053   15701 start.go:174] Error starting host: Error getting state for host: getting connection: looking up domain: virError(Code=42, Domain=10, Message='Domain not found: no domain with matching name 'minikube'').
```

この問題については、よくわからなかったのですが、`ls -la ~`と打つと、「.minikube」というフォルダが存在し、そちらを削除して再実行したところまたエラー。

```bash
E0826 15:45:18.378000   22956 start.go:180] Error starting host:  Error creating host: Error creating machine: Error in driver during machine creation: creating domain: Error defining domain xml:
<domain type='kvm'>
  <name>minikube</name>
  <memory unit='MB'>2048</memory>
...この後も続く
```

どうやら原因は、仮想化サポートが有効化されていないことが原因のようですが、そもそも仮想VMなのでそんなことできません。
（Nested Virtualizationなる仮想マシン上で、さらに仮想化じゃ～みたいなものがあるらしいですが、サポートもされておらず、手を出せそうにありませんでした。）
この手順は、Linuxを直接インストールしたPCで使えそうですね。
今度やってみます。

以上、番外編でした。