#19.DockerDesktopを使用しないKurbenetes環境を試してみた（Minikube、Kind)

# はじめに
以前にもKubernetesの記事を投稿してはいたのですが、それらすべてがDockerDesktopを使用して動作していたものなので、
今回はMinikubeとKindを使用してローカルKubernetesの環境を構築していこうと思います。

※#18は修正箇所が多かったので削除しました。


# 構築環境

**OS:**
- Windows 11
  - WSL2 (ubuntu) 
# 事前のWSLの準備
```powershell
# PowerShell
$ wsl --install -d Ubuntu
$ wsl.exe -d Ubuntu
```
ユーザー名とパスワードを入力してユーザーを作成します。


# Minikube実行まで

```
$ sudo vi /etc/resolve.conf

nameserver　8.8.8.8に変更 

```
`ubuntu`だと`snap`が使用できるので以下のコマンドで`kubectl`のインストール
```
$ sudo snap install kubectl --classic
```
リソース不足で起動できないことがあるため、必要に応じて`C:\Users\PC_User\.wslconfig`の設定変更をします。


**公式ドキュメントから抜粋**
>
>What you’ll need
・2 CPUs or more
・2GB of free memory
・20GB of free disk space
・Internet connection
・Container or virtual machine manager, such as: Docker, QEMU, Hyperkit, Hyper-V, KVM, Parallels, Podman, VirtualBox, or VMware Fusion/Workstation
>



私の場合は以下のように設定しました。
```
[wsl2]
memory=4GB      # メモリ使用量を4GBに制限
processors=4    # 使用可能なCPUコアを4に制限
swap=2GB        # スワップ領域を2GBに設定
localhostForwarding=true  # ローカルホストへのフォワーディングを有効化
```

公式ドキュメントはこちら:

https://minikube.sigs.k8s.io/docs/start/?arch=%2Fwindows%2Fx86-64%2Fstable%2F.exe+download

- **Minikubeのインストール**
```
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube_latest_amd64.deb
$ sudo dpkg -i minikube_latest_amd64.deb
```


# **Dockerのインストール**

- **Ðocker関連のパッケージのアンインストール(競合回避）**
```
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
```
- **gpgキーの追加**

```
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
```

- **リポジトリの作成**
```
$ echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```
- **Dockerインストール**

```
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

- **Minikube実行**
※root権限では使用できないので一般ユーザで実行します
```
$ sudo usermod -aG docker $USER && newgrp docker
$ minikube start --driver=docker
```
- **各コンポーネント確認**
```
kubectl get pod -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS      AGE
default       hello-minikube-8696bfd944-djtck    1/1     Running   1 (10h ago)   10h
kube-system   coredns-668d6bf9bc-zc8b5           1/1     Running   1 (10h ago)   10h
kube-system   etcd-minikube                      1/1     Running   1 (10h ago)   10h
kube-system   kube-apiserver-minikube            1/1     Running   1 (10h ago)   10h
kube-system   kube-controller-manager-minikube   1/1     Running   1 (10h ago)   10h
kube-system   kube-proxy-g75zz                   1/1     Running   1 (10h ago)   10h
kube-system   kube-scheduler-minikube            1/1     Running   1 (10h ago)   10h
kube-system   storage-provisioner                1/1     Running   3 (53s ago)   10h
```

- **ノードの確認**
```
kubectl get nodes
NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   10h   v1.32.0
```
# Kind実行まで

- **Kindインストール**
```
$ [ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.27.0/kind-linux-amd64
$ sudo mv ./kind /usr/local/bin/kind
$ kind version
```
- **クラスターの作成**
```
$ kind create cluster --image=kindest/node:v1.32.2@sha256:f226345927d7e348497136874b6d207e0b32cc52154ad8323129352923a3142f 
```
最新のイメージファイルは以下のリンクから

https://github.com/kubernetes-sigs/kind/releases

- **ノードの確認**

```
$ kubectl get nodes
NAME                 STATUS   ROLES           AGE   VERSION
kind-control-plane   Ready    control-plane   49s   v1.32.2
```



- **マルチノードクラスターの作成**
Kindを使用しているのでマルチノードクラスタの作成もしてみます。

```
$ kind delete cluster
```

先ほど作成したクラスターを削除

- **yamlファイルに定義**
```
$ vi Multi-node-clusters.yaml

kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
    image: kindest/node:v1.32.2@sha256:f226345927d7e348497136874b6d207e0b32cc52154ad8323129352923a3142f
  - role: worker
    image: kindest/node:v1.32.2@sha256:f226345927d7e348497136874b6d207e0b32cc52154ad8323129352923a3142f
  - role: worker
    image: kindest/node:v1.31.6@sha256:28b7cbb993dfe093c76641a0c95807637213c9109b761f1d422c2400e22b8e87

```
- **マルチノードクラスターの作成**
```
kind create cluster --config Multi-node-clusters.yaml
```
- **各コンポーネント確認**
```
$ kubectl get pod -A
NAMESPACE            NAME                                         READY   STATUS    RESTARTS   AGE
kube-system          coredns-668d6bf9bc-7l7qm                     1/1     Running   0          26s
kube-system          coredns-668d6bf9bc-lk898                     1/1     Running   0          26s
kube-system          etcd-kind-control-plane                      1/1     Running   0          34s
kube-system          kindnet-bfdn9                                1/1     Running   0          24s
kube-system          kindnet-k6ghx                                1/1     Running   0          23s
kube-system          kindnet-tmz5p                                1/1     Running   0          26s
kube-system          kube-apiserver-kind-control-plane            1/1     Running   0          33s
kube-system          kube-controller-manager-kind-control-plane   1/1     Running   0          33s
kube-system          kube-proxy-cd4tj                             1/1     Running   0          24s
kube-system          kube-proxy-rw2kx                             1/1     Running   0          23s
kube-system          kube-proxy-sjz42                             1/1     Running   0          26s
kube-system          kube-scheduler-kind-control-plane            1/1     Running   0          34s
local-path-storage   local-path-provisioner-7dc846544d-rlm5v      1/1     Running   0          26s
```

- **ノードの確認**
```
$ kubectl get nodes
NAME                 STATUS   ROLES           AGE     VERSION
kind-control-plane   Ready    control-plane   10m     v1.32.2
kind-worker          Ready    <none>          9m55s   v1.32.2
kind-worker2         Ready    <none>          9m54s   v1.31.6
```

# まとめ
感想になるのですがこれらの動作を確認する中で、気になることが次々と増えました。
`WSLはVMの扱いなのか？そもそも`WSLはどのように環境を分離しているのか?`といった疑問が生まれました。
改めて確認して、時間があれば記事にまとめようと思います。
一つのことを調べると芋づる式に疑問が増えていくのは面白いですね。

# 参考リンク

https://kind.sigs.k8s.io/docs/user/quick-start/

https://minikube.sigs.k8s.io/docs/start/?arch=%2Fwindows%2Fx86-64%2Fstable%2F.exe+download

https://docs.docker.com/engine/install/ubuntu/