【Kubernetes】Minikubeインストール手順

# minikubeとは
ローカル環境でKubernetesを簡単に実行するためのツールです。
Kubernetesを触ってみたい！という方のために、PC上のVM内でシングルノードのKubernetesクラスターを実行することができます。
参考：[minikube - 公式ドキュメント](https://minikube.sigs.k8s.io/docs/)

# インストール手順
## システムの更新
システムを最新バージョンに更新します。
```
$ sudo apt update -y
$ sudo apt upgrade -y
```

## minikubeのインストール
[公式サイト](https://minikube.sigs.k8s.io/docs/start/)からMinikubeのバイナリファイルをダウンロードします。
```
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
% Total    % Received % Xferd  Average Speed   Time    Time     Time     Current
                               Dload  Upload   Total   Spent    Left     Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
:
100 89.3M  100 89.3M    0     0  3985k      0  0:00:22  0:00:22 --:--:-- 3844k
```

ダウンロードしたバイナリファイルをインストールします。
```
$ sudo install minikube-linux-amd64 /usr/local/bin/minikube
```

確認のため、バージョンを確認してみましょう。以下のように出力されればインストール完了です。
```
$ minikube version
minikube version: v1.32.0
commit: adfjoefhir774wfiuieuwhr4rgdslvsxljxpuw9u
```



# 動作確認
## minikubeの起動
`minikube start`で開始できます。
```
$ minikube start
* minikube v1.32.0 on Ubuntu 22.04 (kvm/amd64)
* Using the docker driver based on existing profile
* Starting control plane node minikube in cluster minikube
* Pulling base image ...

:

* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
```

minikubeが正しく起動できていると、`minikube status`を実行した際以下のように出力されます。
```
$ minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
```


**エラーが発生した場合**
環境変数にプロキシが設定されていない場合は、`minikube start`実行時に以下のようなエラーが出力されます。
```
$ minikube start
* minikube v1.32.0 on Ubuntu 22.04 (kvm/amd64)
* Automatically selected the docker driver. Other choices: none, ssh
* Using Docker driver with root privileges
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
! The image 'registry.k8s.io/kube-scheduler:v1.28.3' was not found; unable to add it to cache.
! The image 'registry.k8s.io/kube-controller-manager:v1.28.3' was not found; unable to add it to cache.
! The image 'registry.k8s.io/kube-apiserver:v1.28.3' was not found; unable to add it to cache.
! The image 'gcr.io/k8s-minikube/storage-provisioner:v5' was not found; unable to add it to cache.
! The image 'registry.k8s.io/kube-proxy:v1.28.3' was not found; unable to add it to cache.
! The image 'registry.k8s.io/pause:3.9' was not found; unable to add it to cache.
! The image 'registry.k8s.io/coredns/coredns:v1.10.1' was not found; unable to add it to cache.
! The image 'registry.k8s.io/etcd:3.5.9-0' was not found; unable to add it to cache.
E0221 11:54:20.746072  155171 cache.go:189] Error downloading kic artifacts:  failed to download kic base image or any fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
! This container is having trouble accessing https://registry.k8s.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* Preparing Kubernetes v1.28.3 on Docker 24.0.7 ...
X Unable to load cached images: loading cached images: stat /home/.minikube/cache/images/amd64/registry.k8s.io/coredns/coredns_v1.10.1: no such file or directory

X Exiting due to INET_LOOKUP_HOST: updating control plane: downloading binaries: downloading kubectl: download failed: https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl?checksum=file:https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl.sha256: getter: &{Ctx:context.Background Src:https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl?checksum=file:https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl.sha256 Dst:/home/.minikube/cache/linux/amd64/v1.28.3/kubectl.download Pwd: Mode:2 Umask:---------- Detectors:[0x46177c0 0x46177c0 0x46177c0 0x46177c0 0x46177c0 0x46177c0 0x46177c0] Decompressors:map[bz2:0xc00059e5e0 gz:0xc00059e5e8 tar:0xc00059e590 tar.bz2:0xc00059e5a0 tar.gz:0xc00059e5b0 tar.xz:0xc00059e5c0 tar.zst:0xc00059e5d0 tbz2:0xc00059e5a0 tgz:0xc00059e5b0 txz:0xc00059e5c0 tzst:0xc00059e5d0 xz:0xc00059e5f0 zip:0xc00059e600 zst:0xc00059e5f8] Getters:map[file:0xc002cb5950 http:0xc000659180 https:0xc0006591d0] Dir:false ProgressListener:0x45d7ae0 Insecure:false DisableSymlinks:false Options:[0x120d740]}: invalid checksum: Error downloading checksum file: Get "https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl.sha256": dial tcp: lookup dl.k8s.io on 127.0.0.53:53: no such host
* Suggestion: Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.
* Documentation: https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/
```

> * Suggestion: Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.
> （提案：HTTP_PROXY および HTTPS_PROXY 環境変数が正しく設定されていることを確認してください。）

提案通り、プロキシを設定しましょう。
```
$ export HTTP_PROXY=http://proxy.co.jp:xxxx
$ export HTTP_PROXY=http://proxy.co.jp:xxxx
```
```
# 設定の確認
$ printenv HTTP_PROXY
http://proxy.co.jp:xxxx
$ printenv HTTPS_PROXY
http://proxy.co.jp:xxxx
```



## minikubeの停止
`minikube stop`で停止できます。
```
$ minikube stop
* Stopping node "minikube"  ...
* Powering off "minikube" via SSH ...
* 1 node stopped.
```


## minikubeの削除
不要になったminikubeクラスタは、`minikube delete`で削除できます。
```
$ minikube delete
* Deleting "minikube" in docker ...
* Deleting container "minikube" ...
* Removing /home/.minikube/machines/minikube ...
* Removed all traces of the "minikube" cluster.
```


---
参考：
- [minikube使ってみて、Kubernetesに入門してみた気分になる #Docker - Qiita](https://qiita.com/ishibashi-futoshi/items/8fbe1da7ab703f891db3)
- [Ubuntu18にMinikubeをインストールする - かべぎわブログ](https://www.kabegiwablog.com/entry/2020/02/16/165320)
















<!--
#### エラー1
Dockerはデフォルトでrootの実行権限が必要ですが、Kubernetesはデフォルトでrootの
ユーザがdockerグループに追加されていない場合は、以下のようなエラーが出力されます。
[dockerコマンドをsudo無しで実行する簡単設定(Linux) #Docker - Qiita](https://qiita.com/ryoishizawa/items/1a459516b770548299fd)

```
* minikube v1.32.0 on Ubuntu 22.04 (kvm/amd64)
* Unable to pick a default driver. Here is what was considered, in preference order:
  - docker: Not healthy: "docker version --format {{.Server.Os}}-{{.Server.Version}}:{{.Server.Platform.Name}}" exit status 1: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/version": dial unix /var/run/docker.sock: connect: permission denied
  - docker: Suggestion: Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker' <https://docs.docker.com/engine/install/linux-postinstall/>
* Alternatively you could install one of these drivers:
  - kvm2: Not installed: exec: "virsh": executable file not found in $PATH
  - qemu2: Not installed: exec: "qemu-system-x86_64": executable file not found in $PATH
  - podman: Not installed: exec: "podman": executable file not found in $PATH
  - virtualbox: Not installed: unable to find VBoxManage in $PATH

X Exiting due to DRV_NOT_HEALTHY: Found driver(s) but none were healthy. See above for suggestions how to fix installed drivers.
```


以下のコマンドを実行して、現在のユーザを`docker`グループに追加することで解決します。
```
$ sudo usermod -aG docker $USER
```

変更を反映します。
```
$ newgrp docker
```


#### エラー2
環境変数にプロキシが設定されていない場合は、以下のようなエラーが出力されます。
参考：[Linux post-installation steps for Docker Engine | Docker Docs](https://docs.docker.com/engine/install/linux-postinstall/)
```
* minikube v1.32.0 on Ubuntu 22.04 (kvm/amd64)
* Automatically selected the docker driver. Other choices: none, ssh
* Using Docker driver with root privileges
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
! The image 'registry.k8s.io/kube-scheduler:v1.28.3' was not found; unable to add it to cache.
! The image 'registry.k8s.io/kube-controller-manager:v1.28.3' was not found; unable to add it to cache.
! The image 'registry.k8s.io/kube-apiserver:v1.28.3' was not found; unable to add it to cache.
! The image 'gcr.io/k8s-minikube/storage-provisioner:v5' was not found; unable to add it to cache.
! The image 'registry.k8s.io/kube-proxy:v1.28.3' was not found; unable to add it to cache.
! The image 'registry.k8s.io/pause:3.9' was not found; unable to add it to cache.
! The image 'registry.k8s.io/coredns/coredns:v1.10.1' was not found; unable to add it to cache.
! The image 'registry.k8s.io/etcd:3.5.9-0' was not found; unable to add it to cache.
E0221 11:54:20.746072  155171 cache.go:189] Error downloading kic artifacts:  failed to download kic base image or any fallback image
* Creating docker container (CPUs=2, Memory=2200MB) ...
! This container is having trouble accessing https://registry.k8s.io
* To pull new external images, you may need to configure a proxy: https://minikube.sigs.k8s.io/docs/reference/networking/proxy/
* Preparing Kubernetes v1.28.3 on Docker 24.0.7 ...
X Unable to load cached images: loading cached images: stat /home/wataner/.minikube/cache/images/amd64/registry.k8s.io/coredns/coredns_v1.10.1: no such file or directory

X Exiting due to INET_LOOKUP_HOST: updating control plane: downloading binaries: downloading kubectl: download failed: https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl?checksum=file:https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl.sha256: getter: &{Ctx:context.Background Src:https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl?checksum=file:https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl.sha256 Dst:/home/wataner/.minikube/cache/linux/amd64/v1.28.3/kubectl.download Pwd: Mode:2 Umask:---------- Detectors:[0x46177c0 0x46177c0 0x46177c0 0x46177c0 0x46177c0 0x46177c0 0x46177c0] Decompressors:map[bz2:0xc00059e5e0 gz:0xc00059e5e8 tar:0xc00059e590 tar.bz2:0xc00059e5a0 tar.gz:0xc00059e5b0 tar.xz:0xc00059e5c0 tar.zst:0xc00059e5d0 tbz2:0xc00059e5a0 tgz:0xc00059e5b0 txz:0xc00059e5c0 tzst:0xc00059e5d0 xz:0xc00059e5f0 zip:0xc00059e600 zst:0xc00059e5f8] Getters:map[file:0xc002cb5950 http:0xc000659180 https:0xc0006591d0] Dir:false ProgressListener:0x45d7ae0 Insecure:false DisableSymlinks:false Options:[0x120d740]}: invalid checksum: Error downloading checksum file: Get "https://dl.k8s.io/release/v1.28.3/bin/linux/amd64/kubectl.sha256": dial tcp: lookup dl.k8s.io on 127.0.0.53:53: no such host
* Suggestion: Verify that your HTTP_PROXY and HTTPS_PROXY environment variables are set correctly.
* Documentation: https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/
```


プロキシを設定することで解決します。
参考：[minikube startのプロキシ越え - n-agetsumaの日記](https://n-agetsuma.hatenablog.com/entry/2018/04/27/163553)
```
$ export HTTP_PROXY=http://proxy.co.jp:xxxx
$ export HTTP_PROXY=http://proxy.co.jp:xxxx

# 設定の確認
$ printenv HTTP_PROXY
http://proxy.co.jp:xxxx
$ printenv HTTPS_PROXY
http://proxy.co.jp:xxxx
```








---

%% [Overview | Kubernetes](https://kubernetes.io/docs/concepts/overview/)

昔
物理サーバ上でアプリケーションの実行をしていた
物理サーバではアプリケーションのリソース境界を定義する方法がなかったため、様々な問題が発生した
例えば、複数のアプリケーションを物理サーバ上で実行していた場合、1つのアプリケーションがリソースの大部分を占有し、その結果他のアプリケーションのパフォーマンスが低下するなど。
この問題を解決するには、各アプリケーションを異なる物理サーバ上で実行すること
しかし、組織が多数の物理サーバを維持するには費用がかかるため難しかった


仮想化導入
単一の物理サーバのCPU上で複数の仮想マシン（VM）を実行できる
仮想化によりアプリケーションをVM間で分離できるようになった
これによりアプリケーションの情報に別のアプリケーションが自由にアクセスできないため、一定レベルのセキュリティが保たれるようになった
 %%
-->