minikubeを使ってみた

最近業務でKubernetesを使うことが多いので、勉強がてらminikubeを使って遊んでみたいと思います。

minikueとはローカル環境でKubernetesを簡単に始められるツールのことで、シングルノードのKubernetesクラスターをMacとかのローカル環境常に構築することができます。

### 環境

- MaxOS（Apple M2m Ventura）
- Docker version 20.10.24

## minikubeのインストール
minikubeのインストール方法は公式を参考にインストールします。
https://minikube.sigs.k8s.io/docs/start/

上記のリンクからInstallationでご自身の環境に合わせて選択していただき、コマンド等を実行してインストールするだけです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539965/b0e89838-9065-1867-4c32-a3257ad80aff.png)

## minikubeの起動

minikubeを起動するには下記の要件を満たしていないといけないようです。

- 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

ContainerかVirtual machineがないといけないので、いずれかを準備しておいてください。この記事ではDockerを使います。

minikubeをインストールできたら下記のコマンドでminikubeをstartします。（起動に20秒くらいかかりました）

```
$ minikube start
```

起動することができたらkubectlを使って操作することができるようになるようです。kubectlをインストールしていない方は下記などを参考にインストールしておいてください。
https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/

試しにPodのリストを取得してみます。
```
% kubectl get po -A
NAMESPACE     NAME                               READY   STATUS    RESTARTS           AGE
kube-system   coredns-787d4945fb-jk587           1/1     Running   1752 (66m ago)     136d
kube-system   etcd-minikube                      1/1     Running   2 (66m ago)        136d
kube-system   kube-apiserver-minikube            1/1     Running   2 (66m ago)        136d
kube-system   kube-controller-manager-minikube   1/1     Running   2 (66m ago)        136d
kube-system   kube-proxy-l9qd2                   1/1     Running   2 (66m ago)        136d
kube-system   kube-scheduler-minikube            1/1     Running   2 (66m ago)        136d
kube-system   storage-provisioner                1/1     Running   1768 (2m35s ago)   136d
```

:::note
-Aオプションは全てのNamespaceのPodを表示するオプション
:::

### ダッシュボードの表示
下記のコマンドを実行することでローカル環境でKubernetes
ダッシュボードを閲覧することができます。
```
$ minikube dashboard
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539965/7b96da09-a7a5-571f-e04f-bf023fca8aec.png)

## アプリケーションのデプロイ
ローカルに構築したKubernetesクラスターにアプリケーションをデプロイしてみます。

### Service

下記のコマンドでデプロイメントを作成して、ポート8080で公開してみます。
```
# deployment作成
$ kubectl create deployment hello-minikube --image=kicbase/echo-server
deployment.apps/hello-minikube created
# portの公開
$ kubectl expose deployment hello-minikube --type=NodePort --port=8080
service/hello-minikube exposed
```

サービスが作成されているか確認
```
$ kubectl get services
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
hello-minikube   NodePort    10.101.160.112   <none>        8080:31193/TCP   23s
kubernetes       ClusterIP   10.96.0.1        <none>        443/TCP          136d
```

port-forwardしてブラウザからlocalhost:7080にアクセスしてみます。
```
$ kubectl port-forward service/hello-minikube 7080:8080
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539965/9c871ccb-4d83-1db9-984b-6b5d0a2f62f6.png)

## minikubeのクラスター管理

### Kubernetesクラスターの一時停止
```
$ minikube pause
```

### minikubeのクラスター停止
```
$ minikube stop
```

### メモリの設定変更

```
$ minikube config set memory {value}
```