Homebrewを使用してMacOSにMinikubeの環境構築

基本はこちらの公式ドキュメント通り進めればOK。
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/

# 環境

OS

```bash
$ sw_vers
ProductName:	macOS
ProductVersion:	11.6
BuildVersion:	20G165
$
```

Homebrewのバージョン

```bash
$ brew --version
Homebrew 3.2.17
Homebrew/homebrew-core (git revision 0e79905a9e5; last commit 2021-10-20)
$
```


# Minikube のインストール

インストール方法には２種類(バイナリファイルをダウンロードする方法と、Homebrewを利用する方法)あるが、今回はHomebrewを使用したインストールを実施。

```bash
$ brew install minikube
```

![スクリーンショット 2021-10-21 11.01.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883649/61467f04-8789-5475-7506-e2dd241c4277.png)


インストール後、`minikube`コマンドを入力して下記が表示されればインストール完了。

```bash
$ minikube version
minikube version: v1.23.2
commit: 0a0ad764652082477c00d51d2475284b5d39ceed
$
```

# クイックスタート

ここからは下記のクイックスタートに沿って進める。
https://kubernetes.io/ja/docs/setup/learning-environment/minikube/#%E3%82%AF%E3%82%A4%E3%83%83%E3%82%AF%E3%82%B9%E3%82%BF%E3%83%BC%E3%83%88

まずはMinikubeを起動し、クラスターを作成。

```bash
$ minikube start
😄  Darwin 11.6 上の minikube v1.23.2
✨  dockerドライバーが自動的に選択されました。他の選択肢:  hyperkit, ssh
👍  コントロールプレーンのノード minikube を minikube 上で起動しています
🚜  イメージを Pull しています...
💾  Kubernetes v1.22.2 のダウンロードの準備をしています
    > preloaded-images-k8s-v13-v1...: 511.69 MiB / 511.69 MiB  100.00% 7.50 MiB
    > gcr.io/k8s-minikube/kicbase: 355.40 MiB / 355.40 MiB  100.00% 4.27 MiB p/
🔥  docker container (CPUs=2, Memory=1990MB) を作成しています...
🐳  Docker 20.10.8 で Kubernetes v1.22.2 を準備しています...
    ▪ 証明書と鍵を作成しています...
    ▪ Control Plane を起動しています...
    ▪ RBAC のルールを設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ イメージ gcr.io/k8s-minikube/storage-provisioner:v5 を使用しています
🌟  有効なアドオン: storage-provisioner, default-storageclass

❗  /usr/local/bin/kubectl is version 1.19.7, which may have incompatibilites with Kubernetes 1.22.2.
    ▪ Want kubectl v1.22.2? Try 'minikube kubectl -- get pods -A'
🏄  完了しました！ kubectl が「"minikube"」クラスタと「"default"」ネームスペースを使用するよう構成されました
$
```

単純なHTTPサーバーである`echoserver`という既存のイメージを使用して、Kubernetes Deploymentを作成する。
`--port`を使用して8080番ポートで公開している。

```bash
$ kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.10
deployment.apps/hello-minikube created
$
$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed
$
```

下記のように`Running`になっていれば起動完了。

```bash
$ kubectl get pod
NAME                              READY   STATUS    RESTARTS   AGE
hello-minikube-5d9b964bfb-965js   1/1     Running   0          5m7s
$
```

Serviceの詳細を確認するため、公開したServiceのURLを取得。

```bash
$ minikube service hello-minikube --url
🏃  Starting tunnel for service hello-minikube.
|-----------|----------------|-------------|------------------------|
| NAMESPACE |      NAME      | TARGET PORT |          URL           |
|-----------|----------------|-------------|------------------------|
| default   | hello-minikube |             | http://127.0.0.1:50975 |
|-----------|----------------|-------------|------------------------|
http://127.0.0.1:50975
❗  Dockerドライバーをdarwin上で動かしているため、実行するにはターミナルを開く必要があります。
```

表示されたURLをブラウザで表示するとServiceの詳細が表示される。
![スクリーンショット 2021-10-21 11.44.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883649/18abab85-2f36-3102-203a-00f015bda5d3.png)


# ダッシュボード

Kubernetes Dashboardでクラスタの確認。
https://kubernetes.io/ja/docs/tasks/access-application-cluster/web-ui-dashboard/

```bash
$ minikube dashboard --url=true                         
🤔  ダッシュボードの状態を確認しています...
🚀  プロキシを起動しています...
🤔  プロキシの状態を確認しています...
http://127.0.0.1:51022/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/
$
```

表示されたURLをブラウザに入力するとダッシュボードが表示される。
http://127.0.0.1:51022/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/

![スクリーンショット 2021-10-21 11.46.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/883649/db5ce486-ec4d-d1b6-3f43-d820800d59ce.png)


# クラスタの停止

サービスの削除。

```bash
$ kubectl delete services hello-minikube
service "hello-minikube" deleted
$
```

デプロイの削除。

```bash
$ kubectl delete deployment hello-minikube
deployment.apps "hello-minikube" deleted
$
```

クラスタの停止。

```bash
$ minikube stop
✋  ノード "minikube" を停止しています...
🛑  SSH 経由で「minikube」の電源をオフにしています...
🛑  1台のノードが停止しました。
$
```

クラスタの削除。

```bash
$ minikube delete
🔥  docker の「minikube」を削除しています...
🔥  コンテナ "minikube" を削除しています...
🔥  /Users/h2-iwashita/.minikube/machines/minikube を削除しています...
💀  クラスタ "minikube" の全てのトレースを削除しました。
$
```