Traffine I/O

日本語

2022-05-30

Minikube

Minikubeとは

Minikubeは、開発者が自分のマシン上でローカルに単一ノードのKubernetesクラスタを実行できるオープンソースのツールです。Minikubeは、開発者がKubernetesを学び、アプリケーションを開発・テストし、新機能を孤立した環境で試すことができるようにする簡素化された方法を提供します。また、ハードウェアリソースを大幅に必要とせずに行うことができます。

Minikubeは、個人のコンピュータ上の仮想マシン(VM)内で単一ノードクラスタを実行します。このVMには、APIサーバー、スケジューラ、etcdなど、Kubernetesの全ての必要なコンポーネントが含まれています。さらに、MinikubeはDNS、NodePorts、ConfigMaps、SecretsなどのさまざまなKubernetesの機能もサポートしています。

Minikubeの利点の一つは、使いやすさです。わずかなコマンドでKubernetesクラスタを設定し、デプロイし、リソースを管理することができます。また、リソースの管理にはkubectlのような一般的なKubernetesツールや、複雑なアプリケーションのデプロイにはHelmとのシームレスな統合も可能です。

もう一つの注目すべき機能は、Minikubeがローカルマシン上で本番に似た環境をエミュレートできることです。アドオンと設定を使用することで、本番のセットアップや制約を模倣することができます。これは、アプリケーションを実際のシナリオにデプロイする前にテストや検証を行う際に特に役立ちます。

Minikubeのインストール

MacOSを使用している場合、次のコマンドを実行してMinikubeをインストールできます。

bash
$ brew install minikube
$ brew install kubectl

他のOSを使用している場合は、インストールについては次の公式ドキュメントを参照してください。

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

Minikubeとの基本的なやり取りのコマンド

Minikubeがインストールすると、さまざまなコマンドを使用してMinikubeとやり取りすることができます。

minikube start

仮想マシンを初期化し、その中に単一ノードのKubernetesクラスタをセットアップします。

bash
$ minikube start

😄  minikube v1.30.1 on Darwin 13.0 (arm64)
✨  Automatically selected the docker driver
📌  Using Docker Desktop driver with root privileges
👍  Starting control plane node minikube in cluster minikube
🚜  Pulling base image ...
💾  Downloading Kubernetes v1.26.3 preload ...
    > preloaded-images-k8s-v18-v1...:  330.52 MiB / 330.52 MiB  100.00% 3.50 Mi
    > gcr.io/k8s-minikube/kicbase...:  336.39 MiB / 336.39 MiB  100.00% 2.23 Mi
🔥  Creating docker container (CPUs=2, Memory=2200MB) ...

🧯  Docker is nearly out of disk space, which may cause deployments to fail! (87% of capacity). You can pass '--force' to skip this check.
💡  Suggestion:

    Try one or more of the following to free up space on the device:

    1. Run "docker system prune" to remove unused Docker data (optionally with "-a")
    2. Increase the storage allocated to Docker for Desktop by clicking on:
    Docker icon > Preferences > Resources > Disk Image Size
    3. Run "minikube ssh -- docker system prune" if using the Docker container runtime
🍿  Related issue: https://github.com/kubernetes/minikube/issues/9024

🐳  Preparing Kubernetes v1.26.3 on Docker 23.0.2 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🔎  Verifying Kubernetes components...
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

minikube status

Minikubeマシンの状態とそのKubernetesおよびkubeconfigの状態を表示します。

bash
$ minikube

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

minikube dashboard

このコマンドは、デフォルトのウェブブラウザでKubernetesダッシュボードを開き、クラスタと対話することができます。

bash
$ minikube dashboard

🔌  Enabling dashboard ...
    ▪ Using image docker.io/kubernetesui/dashboard:v2.7.0
    ▪ Using image docker.io/kubernetesui/metrics-scraper:v1.0.8
💡  Some dashboard features require the metrics-server addon. To enable all features please run:

        minikube addons enable metrics-server


🤔  Verifying dashboard health ...
🚀  Launching proxy ...
🤔  Verifying proxy health ...

🎉  Opening http://127.0.0.1:51471/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ in your default browser...

Minikube dashboard

minikube addons list

クラスタで有効または無効にできる全ての利用可能なアドオンをリスト表示します。

bash
$ minikube addons list

|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | Google                         |
| cloud-spanner               | minikube | disabled     | Google                         |
| csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
| dashboard                   | minikube | enabled ✅   | Kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
| efk                         | minikube | disabled     | 3rd party (Elastic)            |
| freshpod                    | minikube | disabled     | Google                         |
| gcp-auth                    | minikube | disabled     | Google                         |
| gvisor                      | minikube | disabled     | Google                         |
| headlamp                    | minikube | disabled     | 3rd party (kinvolk.io)         |
| helm-tiller                 | minikube | disabled     | 3rd party (Helm)               |
| inaccel                     | minikube | disabled     | 3rd party (InAccel             |
|                             |          |              | [info@inaccel.com])            |
| ingress                     | minikube | disabled     | Kubernetes                     |
| ingress-dns                 | minikube | disabled     | Google                         |
| istio                       | minikube | disabled     | 3rd party (Istio)              |
| istio-provisioner           | minikube | disabled     | 3rd party (Istio)              |
| kong                        | minikube | disabled     | 3rd party (Kong HQ)            |
| kubevirt                    | minikube | disabled     | 3rd party (KubeVirt)           |
| logviewer                   | minikube | disabled     | 3rd party (unknown)            |
| metallb                     | minikube | disabled     | 3rd party (MetalLB)            |
| metrics-server              | minikube | disabled     | Kubernetes                     |
| nvidia-driver-installer     | minikube | disabled     | Google                         |
| nvidia-gpu-device-plugin    | minikube | disabled     | 3rd party (Nvidia)             |
| olm                         | minikube | disabled     | 3rd party (Operator Framework) |
| pod-security-policy         | minikube | disabled     | 3rd party (unknown)            |
| portainer                   | minikube | disabled     | 3rd party (Portainer.io)       |
| registry                    | minikube | disabled     | Google                         |
| registry-aliases            | minikube | disabled     | 3rd party (unknown)            |
| registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube | enabled ✅   | Google                         |
| storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
| volumesnapshots             | minikube | disabled     | Kubernetes                     |
|-----------------------------|----------|--------------|--------------------------------|

kubectl cluster-info

クラスタに関する情報を取得します。

bash
$ kubectl cluster-info

Kubernetes control plane is running at https://127.0.0.1:49938
CoreDNS is running at https://127.0.0.1:49938/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

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

kubectl get componentstatus

クラスタの状態を確認します。

bash
$ kubectl get componentstatus

NAME                 STATUS    MESSAGE                         ERROR
controller-manager   Healthy   ok
etcd-0               Healthy   {"health":"true","reason":""}
scheduler            Healthy   ok

kubectl get nodes

クラスタのノードのリストを表示します。

bash
$ kubectl get nodes

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   13m   v1.26.3

minikube stop

このコマンドは実行中のMinikube VMを停止しますが、状態は保持して後で再開できます。

bash
$ minikube stop

✋  Stopping node "minikube"  ...
🛑  Powering off "minikube" via SSH ...
🛑  1 node stopped.

minikube delete

Minikube VMと関連する全ての状態を完全に削除します。

bash
$ minikube delete

🔥  Deleting "minikube" in docker ...
🔥  Deleting container "minikube" ...
🔥  Removing /Users/ryuseikakujo/.minikube/machines/minikube ...
💀  Removed all traces of the "minikube" cluster.

参考

https://minikube.sigs.k8s.io/docs/start/
https://kubernetes.io/docs/reference/kubectl/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!