Kubernetes学習のためにminikube環境を作る

# minikubeとは
kubernetesのお試しに使える。Kubernetes構築は大変そうなので、勉強用に使える環境は嬉しい。
普通、kubernetesは複数ノードで動かすものだが、1つのノードで動かすことができるらしい。

# 必要スペックを確認
minikubeスタートガイドより

https://minikube.sigs.k8s.io/docs/start/

| 項目 | 必要スペック |
|:-:|:-:|
| CPU  | 2CPU |
| MEM  | 2GB  |
| DISK | 20GB |

おうちクラウドに上記スペックのAlmaLinux8.6を立てて動かす。
おうちクラウド立ててると、ほしいときにVM立てられるのがいい。

# minikube環境構築

Dockerをインストールしておく。
Dockerのインストールはこちらの記事を参照。
Docker composeまでは入れなくてもいいのかな？

https://qiita.com/Nats72/items/660798a9146baf68e376

minikubeをダウンロード＆実行ファイルをパスに追加
```console:minikubeを動かしたいサーバー
# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# install minikube-linux-amd64 /usr/local/bin/minikube
```

# minikubeを実行
root権限で実行する場合は`--force`オプションをつける。
```console:minikubeを動かしてるサーバー
# minikube start --force
```
```console:実行中のメッセージ
😄  Almalinux 8.6 上の minikube v1.28.0
❗  minikube は --force が付与された場合、様々な検証をスキップします (これは予期せぬ挙動を引き起こすかも知れません)
✨  docker ドライバーが自動的に選択されました。他の選択肢: ssh, none
🛑  「docker」ドライバーは root 権限で使用すべきではありません。root での継続を希望する場合、--force を使用してください。
💡  VM 内で minikube を実行している場合、--driver=none の使用を検討してください:
📘    https://minikube.sigs.k8s.io/docs/reference/drivers/none/

⛔  要求されたメモリー割り当て (1811MB) が推奨の最小値 1900MB 未満です。デプロイは失敗するかもしれません。


🧯  要求された 1811MiB のメモリー割当は、システムのオーバーヘッド (合計システムメモリー: 1811MiB) に十分な空きを残しません。安定性の問題に直面するかも知れません。
💡  提案: Start minikube with less memory allocated: 'minikube start --memory=1811mb'

📌  root 権限を持つ Docker ドライバーを使用
👍  minikube クラスター中のコントロールプレーンの minikube ノードを起動しています
🚜  ベースイメージを取得しています...
💾  ロード済み Kubernetes v1.25.3 をダウンロードしています...
    > preloaded-images-k8s-v18-v1...:  385.44 MiB / 385.44 MiB  100.00% 97.26 M
    > gcr.io/k8s-minikube/kicbase:  386.27 MiB / 386.27 MiB  100.00% 14.26 MiB 
    > gcr.io/k8s-minikube/kicbase:  0 B [________________________] ?% ? p/s 13s
🔥  docker container (CPUs=2, Memory=1811MB) を作成しています...
🐳  Docker 20.10.20 で Kubernetes v1.25.3 を準備しています...
    ▪ 証明書と鍵を作成しています...
    ▪ コントロールプレーンを起動しています...
    ▪ RBAC のルールを設定中です...
🔎  Kubernetes コンポーネントを検証しています...
    ▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています
🌟  有効なアドオン: default-storageclass, storage-provisioner
💡  kubectl が見つかりません。kubectl が必要な場合、'minikube kubectl -- get pods -A' を試してください
🏄  終了しました！kubectl がデフォルトで「minikube」クラスターと「default」ネームスペースを使用するよう設定されました
```
終了した旨のメッセージが表示されたら完了。
インストール中にメモリが足りないっぽいメッセージが出てたけど、swapを使ってなんとかインストールしてくれたのかな？
メッセージを見ると、Dockerを使って構築してくれてることがわかる。

# コンテナ起動状態を確認
Dockerを使ってkubernetesクラスタが動いていることがわかる。
```console:minikubeを動かしてるサーバー
# docker ps
CONTAINER ID   IMAGE                                 COMMAND                  CREATED         STATUS         PORTS                                                                                                                                  NAMES
eecfd2f5c752   gcr.io/k8s-minikube/kicbase:v0.0.36   "/usr/local/bin/entr…"   6 minutes ago   Up 6 minutes   127.0.0.1:32772->22/tcp, 127.0.0.1:32771->2376/tcp, 127.0.0.1:32770->5000/tcp, 127.0.0.1:32769->8443/tcp, 127.0.0.1:32768->32443/tcp   minikube
```

# kubectlを使う
minikubeを実行すると、kubectlもついてくるようである。
`minikube kubectl --`コマンドで実行するようになっているため使い勝手が悪い。
```console:minikubeを動かしてるサーバー
# minikube kubectl -- get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-565d847f94-bdq7s           1/1     Running   0             18m
kube-system   etcd-minikube                      1/1     Running   0             18m
kube-system   kube-apiserver-minikube            1/1     Running   0             18m
kube-system   kube-controller-manager-minikube   1/1     Running   0             18m
kube-system   kube-proxy-jjxnf                   1/1     Running   0             18m
kube-system   kube-scheduler-minikube            1/1     Running   0             18m
kube-system   storage-provisioner                1/1     Running   1 (18m ago)   18m
```
エイリアスを書いてあげることで`kubectl`で実行できるようにする。
```console:minikubeを動かしてるサーバー
# alias kubectl="minikube kubectl --"
```
```console:minikubeを動かしてるサーバー
[root@minikube ~]# kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
kube-system   coredns-565d847f94-bdq7s           1/1     Running   0             22m
kube-system   etcd-minikube                      1/1     Running   0             22m
kube-system   kube-apiserver-minikube            1/1     Running   0             22m
kube-system   kube-controller-manager-minikube   1/1     Running   0             22m
kube-system   kube-proxy-jjxnf                   1/1     Running   0             22m
kube-system   kube-scheduler-minikube            1/1     Running   0             22m
kube-system   storage-provisioner                1/1     Running   1 (21m ago)   22m
```
今回は、エイリアスを書いてminikubeのkubectlを使えるようにしたが、kubectlをインストールしても良さそう。

# クラスタ構成を確認
コントロールプレーン(マスターノード)の起動と、内部DNSのエンドポイントが確認できた。
```console:minikubeを動かしてるサーバー
# kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
```

# ノード状態確認
minikubeは1ノードで動かすものなので1つだけ表示されている。
```console:minikubeを動かしてるサーバー
# kubectl get node
NAME       STATUS   ROLES           AGE    VERSION
minikube   Ready    control-plane   121m   v1.25.3
```

# その他minikubeコマンド
| コマンド | 内容 |
|:-:|:-:|
| minikube start  | 仮想マシンを起動する |
| minikube stop   | 仮想マシンを停止    |
| minikube delete | 仮想マシンを削除    |
| minikube status | 起動状態を確認する  |
| minikube ip     | 仮想マシンのIPアドレスを確認  |
| minikube ssh    | 仮想マシンへSSH接続する     |
| minikube addons list | アドオンリストを表示する  |
| minikube dashboard   | Kubernetesダッシュボードを起動 |


# 外部サーバーなのが問題なのか、以下がうまく動かない・・・（時間見つけて解決方法調べます）
## ダッシュボードを使う
アドオンを追加すると使えるようになる。
```console:minikubeを動かしてるサーバー
# minikube addons enable metrics-server
💡  metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
    ▪ k8s.gcr.io/metrics-server/metrics-server:v0.6.1 イメージを使用しています
🌟  'metrics-server' アドオンが有効です
```
ダッシュボードを起動する。
`--url`オプションを追加してもよい。
```console:minikubeを動かしてるサーバー
# minikube dashboard
```

## Grafanaを使う
```console:minikubeを動かしてるサーバー
# minikube addons enable heapster
⌛  metrics-server アドオンを使用します (heapster は廃止予定です)
💡  metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
    ▪ k8s.gcr.io/metrics-server/metrics-server:v0.6.1 イメージを使用しています
🌟  'metrics-server' アドオンが有効です
```
```console:minikubeを動かしてるサーバー
# kubectl get svc --all-namespaces
NAMESPACE              NAME                        TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                  AGE
default                kubernetes                  ClusterIP   10.96.0.1        <none>        443/TCP                  104m
kube-system            kube-dns                    ClusterIP   10.96.0.10       <none>        53/UDP,53/TCP,9153/TCP   104m
kube-system            metrics-server              ClusterIP   10.108.86.162    <none>        443/TCP                  76m
kubernetes-dashboard   dashboard-metrics-scraper   ClusterIP   10.109.205.197   <none>        8000/TCP                 81m
kubernetes-dashboard   kubernetes-dashboard        ClusterIP   10.105.102.28    <none>        80/TCP                   81m
```

とりあえずminikubeは動いたようなので先に進める。