minikube を MacOSへインストールしてみた


MacOSに minikubeをインストールして、使えていたが、バージョンを上げたら動かなくなった（汗）, まぁ、とっても良くある話だけど、目的が達成できなくイライラとストレスになる。 そうは言っても、仕方が無いので、解決のために、最初のステップから再実行した記録です。


## minikube インストール
minikubeは、VirtualBoxの仮想サーバー上で動作するので、まずは、VirtualBoxインストールする。もし既にvagrantなどを利用していて、VirtualBoxを利用していれば、このステップは不要です。

### VirtualBox のインストール

[Download VirtutalBox](https://www.virtualbox.org/wiki/Downloads)のウェブページを参照してインストールする。　インストーラーの指示に従ってインストールすれば、完了です。 

### HomeBrewのインストール

minikubeやkubectlは、HomeBrewパッケージマネージャーでインストールできるので、brewコマンドが利用できる様に、[HomeBrew macOS 用パッケージマネージャー](https://brew.sh/index_ja)をウェブページの指示に従ってインストールする。

### minikubeのインストール

`brew cask install minikube` コマンドで、最新版のminikube (0.26 2018/4/30現在) をインストールできます。

### kubectlのインストール

`brew install kubectl`でインストールします。 それから、cask は無用です。


## kubectlコマンドでの操作

minikubeをインストールすると、自動的に minikubeのコンテキストがセットアップされるので、そのまま利用する。

~~~
imac:~ maho$ kubectl config get-contexts
CURRENT   NAME         CLUSTER      AUTHINFO            NAMESPACE
*         minikube     minikube     minikube          
~~~



## minikube起動

minikubeを開始するには、`minikube start` で実行すれば良い.

~~~
imac:~ maho$ minikube start
Starting local Kubernetes v1.10.0 cluster...
Starting VM...
Getting VM IP address...
Moving files into cluster...
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 status` が利用できる。

~~~
imac:~ maho$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100
~~~


起動後の確認として、クラスタにアクセスするには `kubectl get node` を実行する。

~~~
imac:~ maho$ kubectl get node
NAME       STATUS    ROLES     AGE       VERSION
minikube   Ready     master    14m       v1.10.0
~~~


## minikube停止

minikubeクラスタを停止して、仮想サーバーが占有する資源を解放するには、`minikube stop` とする。 サブコマンド `status`で状態を確認できる。

~~~
imac:~ maho$ minikube stop
Stopping local Kubernetes cluster...
Machine stopped.

imac:~ maho$ minikube status
minikube: Stopped
cluster: 
kubectl: 
~~~


## k8sクラスタの削除

k8sクラスタは、`minikube start`を実行した際に、最新バージョンのkubelet, kubeadm がダウンロードされてセットアップされる。 バージョンを最新化したい場合など、一旦削除して、スタートさせると最新化する事ができる。 この場合、作成していたAPIオブジェクトなども削除されることも忘れてはいけない。

~~~
imac:~ maho$ minikube delete
Deleting local Kubernetes cluster...
Machine deleted.

imac:~ maho$ minikube status
minikube: 
cluster: 
kubectl: 
~~~


## ダッシュボードの利用

`minikube dashboard`を実行すると、ウェブ・ブラウザが起動して、ダッシュボードが表示される。 認証に設定も必要ないので簡単です。

~~~
imac:~ maho$ minikube dashboard
Opening kubernetes dashboard in default browser...
~~~

![スクリーンショット 2018-04-30 12.39.18.png](https://qiita-image-store.s3.amazonaws.com/0/42829/0785aed8-d19e-1ca3-cd99-959a037f677a.png "スクリーンショット 2018-04-30 12.39.18.png")


## ネットワーク

VirtualBoxのアイコンから、VirtualBoxマネージャーを起動して、ネットワークを確認してみます。 k8sダッシュボードのアドレスは、vboxnet4のアドレスレンジになっている事がわかります。

![スクリーンショット 2018-04-30 12.47.40.png](https://qiita-image-store.s3.amazonaws.com/0/42829/cba6bc4d-7acd-a590-1436-822f2977c154.png "スクリーンショット 2018-04-30 12.47.40.png")

~~~
imac:~ maho$ ifconfig vboxnet4
vboxnet4: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
	ether 0a:00:27:00:00:04 
	inet 192.168.99.1 netmask 0xffffff00 broadcast 192.168.99.255
~~~


VirtualBoxマネージャーのネットワークをクリックして、ネットワークの詳細を表示すると、ホストオンリーアダプターに割り当てられています。

![スクリーンショット 2018-04-30 12.50.27.png](https://qiita-image-store.s3.amazonaws.com/0/42829/957ca363-ee72-353e-1b50-75d3957ea34b.png "スクリーンショット 2018-04-30 12.50.27.png")


## アプリへのアクセス

VirtualBoxのホストオンリーアダプター上に開くサービスのポートを、MacOSからcurlコマンドでアクセスして、応答を得るまでを確認する。


模擬的なアプリケーションとしてnginxのコンテナをデプロイするために、 次のYAMLファイルを `kubectl apply -f nginx.yml` で適用する。

~~~nginx.yml 
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - name: http
          containerPort: 80

---
apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  ports:
  - name: http
    port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: nginx
  type: NodePort
~~~

その結果、minikubeのIPアドレスで 30017で、サービスのポートが開かれる。

~~~
imac:yaml maho$ kubectl get svc -o wide
NAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE       SELECTOR
kubernetes   ClusterIP   10.96.0.1        <none>        443/TCP        1h        <none>
nginx        NodePort    10.104.223.190   <none>        80:30017/TCP   59m       app=nginx
~~~

`minikube status` で 仮想マシンのIPアドレスを確認して、NodePortのTCPポート番号でアクセスすることで、nginxの応答を得ることができる。

~~~
imac:yaml maho$ minikube status
minikube: Running
cluster: Running
kubectl: Correctly Configured: pointing to minikube-vm at 192.168.99.100

imac:yaml maho$ curl http://192.168.99.100:30017/
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
~~~




## 参考資料

1. Install Minikube, https://kubernetes.io/docs/tasks/tools/install-minikube/, 2018/4/30
2. Download VirtutalBox, https://www.virtualbox.org/wiki/Downloads, 2018/4/30
3. Install and Set Up kubectl, https://kubernetes.io/docs/tasks/tools/install-kubectl/, 2018/4/30
4. HomeBrew macOS 用パッケージマネージャー, https://brew.sh/index_ja, 2018/4/30
5. Homebrew cask, https://caskroom.github.io/, 2018/4/30