【初心者】Kubernetes学習のためにUbuntu24.04にminikubeをインストール

# はじめに
Kubenetesの学習のために、minikube（ローカルのクラスターを作成するツール）の環境構築を行う。

# 実行環境
- Microsoft Azure 仮想マシン
    - OS: Ubuntu 24.04 LTS
- Docker v27.4.1
- kubectl v1.32.0
- minikube v1.34.0

# インストール
## 事前準備
- 作成した仮想マシンにSSH接続でログイン

## Docker
[公式ドキュメント](https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository)に従ってDocker Engineをインストール

- `apt`リポジトリのセットアップ
```
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
```

- Dockerパッケージ（最新バージョン）のインストール
```
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

- `hello-world`イメージを実行して、Dockerが正しくインストールされたことを確認
```
$ sudo docker run hello-world
```

以下のメッセージが表示されDockerが正常に実行されたことが確認できた。
```
Hello from Docker!
This message shows that your installation appears to be working correctly.
```

- Dockerバージョンの確認
```
$ docker --version
Docker version 27.4.1, build b9d17ea
```

## kubectl
[公式ドキュメント](https://kubernetes.io/ja/docs/tasks/tools/install-kubectl-linux/#install-using-native-package-management)に従ってKubectlをインストール（Debianベースのディストリビューションが対象）

- K8sの`apt`リポジトリに必要なパッケージのインストール
```
sudo apt-get update
# apt-transport-httpsはダミーパッケージの可能性があります。その場合、そのパッケージはスキップできます
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg
```

- K8sパッケージリポジトリの公開署名キーのダウンロード
```
# `/etc/apt/keyrings`フォルダーが存在しない場合は、curlコマンドの前に作成する必要があります。下記の備考を参照してください。
# sudo mkdir -p -m 755 /etc/apt/keyrings
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.32/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
sudo chmod 644 /etc/apt/keyrings/kubernetes-apt-keyring.gpg # 特権のないAPTプログラムがこのkeyringを読めるようにします
```

- K8sリポジトリの追加
```
# これにより、/etc/apt/sources.list.d/kubernetes.listにある既存の設定が上書きされます
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.32/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo chmod 644 /etc/apt/sources.list.d/kubernetes.list   # command-not-foundのようなツールが正しく動作するようにします
```

- kubectlのインストール
```
sudo apt-get update
sudo apt-get install -y kubectl
```

- kubectlバージョンの確認
```
$ kubectl version
Client Version: v1.32.0
Kustomize Version: v5.5.0
The connection to the server localhost:8080 was refused - did you specify the right host or port?
```

## minikube
[公式ドキュメント](https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download)に従ってminikubeをインストール

- minikubeのインストール
```
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
```

- minikubeバージョンの確認
```
$ minikube version
minikube version: v1.34.0
commit: 210b148df93a80eb872ecbeb7e35281b3c582c61
```

# 実行
minikubeは仮想環境上で動作するため、動作させる環境（ドライバ）を指定する必要がある。
今回はDockerをドライバとして使用する。
[Dockerをドライバとする際のドキュメント](https://minikube.sigs.k8s.io/docs/drivers/docker/#Standard%20Docker)

- 実行
```
$ minikube start --driver=docker
😄  minikube v1.34.0 on Ubuntu 24.04
✨  Using the docker driver based on user configuration

💣  Exiting due to PROVIDER_DOCKER_NEWGRP: "docker version --format <no value>-<no value>:<no value>" 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.47/version": dial unix /var/run/docker.sock: connect: permission denied
💡  Suggestion: Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker'
📘  Documentation: https://docs.docker.com/engine/install/linux-postinstall/
```

権限エラーができるのでサジェストされた以下のコマンドを実行
```
sudo usermod -aG docker $USER && newgrp docker
```

- 再実行
```
$ minikube start --driver=docker
😄  minikube v1.34.0 on Ubuntu 24.04
✨  Using the docker driver based on user configuration
📌  Using Docker driver with root privileges
👍  Starting "minikube" primary control-plane node in "minikube" cluster
🚜  Pulling base image v0.0.45 ...
💾  Downloading Kubernetes v1.31.0 preload ...
    > gcr.io/k8s-minikube/kicbase...:  487.90 MiB / 487.90 MiB  100.00% 84.98 M
    > preloaded-images-k8s-v18-v1...:  326.69 MiB / 326.69 MiB  100.00% 38.10 M
🔥  Creating docker container (CPUs=2, Memory=3900MB) ...
🐳  Preparing Kubernetes v1.31.0 on Docker 27.2.0 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: default-storageclass, storage-provisioner
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
```
いろいろ書かれていてよく分からないが、動いたっぽい！

# おわりに
実際に何が起こっているのかはよく理解していないので今後勉強する必要があるが、とりあえずK8sを勉強するための環境構築は完了した。
ドライバにDockerを使用する手順を記載したが、途中までminikubeにはVirtualboxが必須だと勘違いしていてインストールに苦戦した。
ドライバは選択肢が複数あることに気づいたので、Virtualboxのインストールは今回は諦め（本質ではないので）、Dockerに切り替えた。