0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

minikubeを開発用クラスタとして利用する際の基本的な使い方

Posted at

概要

minikubeでk8sのローカルクラスタを構築して、開発環境として利用する際のコマンド例などのメモです。

Docker Desktopに付属のk8sクラスタの代替として利用するようなシンプルな利用方法を想定しています。またMac上で動かすことを想定に記載していますが、OS環境に依存する部分はほとんどありません。

基本的な使い方

クラスタの作成(初回起動)

初回起動時に色々なパラメータを指定した上で start コマンドを実行することでクラスタを作成します。

主なパラメータ

  • p: クラスタを識別するためのプロファイル名(省略可能ですがとりあえず付けておくのがオススメです)
  • cpus: コア数
  • memory: メモリサイズ[MB]
  • disk-size: ディスクサイズ
  • driver: 仮想化に利用するドライバーの種別(Macでは hyperkit がIdle時のCPU使用率的にはオススメです)
  • kubernetes-version: Kubernetesバージョン(無指定だとデフォルトのバージョンが使われます)

実行例

$ minikube start -p minikube-dev1 --cpus 2 --memory 4096 --disk-size 50g --driver hyperkit
😄  [minikube-dev1] minikube v1.21.0 on Darwin 11.4
✨  Using the hyperkit driver based on user configuration
👍  Starting control plane node minikube-dev1 in cluster minikube-dev1
🔥  Creating hyperkit VM (CPUs=2, Memory=4096MB, Disk=51200MB) ...
🐳  Preparing Kubernetes v1.20.7 on Docker 20.10.6 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube-dev1" cluster and "default" namespace by default

クラスタの停止

クラスタを停止する際は stop コマンドで停止します。
k8sはアイドル時も一定のCPUを消費するので、不要になったクラスタは停止しておいた方がマシンに優しくなります。(ただし後述するauto-pause add-onを入れておけば、アイドル時のCPU消費を大幅に削減できるので無理に止めなくても良いかもしれません)

実行例

$ minikube stop -p minikube-dev1
✋  Stopping node "minikube-dev1"  ...
🛑  1 nodes stopped.

スタート(2回目以降)

停止したクラスタを再度起動する場合は単純に start コマンドを実行します。

実行例

$ minikube start -p minikube-dev1
😄  [minikube-dev1] minikube v1.21.0 on Darwin 11.4
✨  Using the hyperkit driver based on existing profile
👍  Starting control plane node minikube-dev1 in cluster minikube-dev1
🔄  Restarting existing hyperkit VM for "minikube-dev1" ...
🐳  Preparing Kubernetes v1.20.7 on Docker 20.10.6 ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube-dev1" cluster and "default" namespace by default

クラスタの削除

不要になったクラスタを削除する場合は delete コマンドで削除します。

実行例

$ minikube delete -p minikube-dev1
🔥  Deleting "minikube-dev1" in hyperkit ...
💀  Removed all traces of the "minikube-dev1" cluster.

デフォルトプロファイルの指定

デフォルトプロファイルを指定しておくと各種コマンドで -p でのプロファイル指定が不要となります。
特定のクラスタを定常的に利用する場合は設定しておくと便利です。

実行例

$ minikube profile minikube-dev1
✅  minikube profile was successfully set to minikube-dev1

プロファイルのリスト表示

list コマンドでプロファイルのリストと動作状態を確認することができます。

実行例

$ minikube profile list
|---------------|-----------|---------|---------------|------|---------|---------|-------|
|    Profile    | VM Driver | Runtime |      IP       | Port | Version | Status  | Nodes |
|---------------|-----------|---------|---------------|------|---------|---------|-------|
| minikube      | hyperkit  | docker  | 192.168.64.2  | 8443 | v1.19.4 | Stopped |     1 |
| minikube-dev1 | hyperkit  | docker  | 192.168.64.10 | 8443 | v1.20.7 | Running |     1 |
|---------------|-----------|---------|---------------|------|---------|---------|-------|

クラスタ設定の変更

実行例

クラスタのオプション設定は config set コマンドで変更することができます。
指定できるオプションは起動時に指定するものと同じです。

cpuコア数の変更
$ minikube config set cpus 3
❗  These changes will take effect upon a minikube delete and then a minikube start

オススメのAddons

開発用に利用する際に入れておくと良いものをリストアップしています。
以降のコマンド例はデフォルトプロファイルの指定を実施済みの想定で -p オプションは省略しています。

metrics-server

Metrics(CPU/Memory使用量)を取得できるようにするための add-on です。

$ minikube addons enable metrics-server
    ▪ Using image k8s.gcr.io/metrics-server/metrics-server:v0.4.2
🌟  The 'metrics-server' addon is enabled

これで kubectl top でリソース使用量が確認できるようになります。

$ kubectl top pods -n kube-system --use-protocol-buffers
NAME                                    CPU(cores)   MEMORY(bytes)
coredns-74ff55c5b-kks2v                 3m           8Mi
etcd-minikube-dev1                      13m          26Mi
kube-apiserver-minikube-dev1            59m          286Mi
kube-controller-manager-minikube-dev1   16m          43Mi
kube-proxy-zjhbd                        1m           16Mi
kube-scheduler-minikube-dev1            3m           13Mi
metrics-server-7894db45f8-5nsv2         4m           13Mi
storage-provisioner                     3m           8Mi

(α版) auto-pause

一定時間クラスタへの操作がないと kube-system で動いているコンテナを pause してくれる add-on です。アイドル時のCPU使用率を低下させることができます。

α版な影響か原理的な問題なのか動作が不安定になる部分がありますが、Kubernetesはアイドル時のCPU使用率が比較的高めなので、マシンに優しくする目的ではオススメです。

$ minikube addons enable auto-pause
    ▪ Using image gcr.io/k8s-minikube/auto-pause-hook:v0.0.2
    ▪ auto-pause addon is an alpha feature and still in early development. Please file issues to help us make it better.
    ▪ https://github.com/kubernetes/minikube/labels/co/auto-pause
🌟  The 'auto-pause' addon is enabled

ingress

Ingress を利用できるようにする add-on です。

$ minikube addons enable ingress
    ▪ Using image k8s.gcr.io/ingress-nginx/controller:v0.44.0
    ▪ Using image docker.io/jettech/kube-webhook-certgen:v1.5.1
    ▪ Using image docker.io/jettech/kube-webhook-certgen:v1.5.1
🔎  Verifying ingress addon...
🌟  The 'ingress' addon is enabled

Ingressへのアクセス方法

minikube では ip コマンドでPodが動作するノードのIPアドレスが分かります。

$ minikube ip
192.168.64.6

この値を /etc/hosts に設定してIngressでアクセスしたいホスト名を解決できるようにします。
例えば、Ingressのホスト名が hello.test であれば下記の値を設定します。

/etc/hosts
192.168.64.6    hello.test

これでcurlやWebブラウザで hello.test を指定することでIngressに対してリクエストが送れます。

その他

全部消してリセット

何か困ったことが起きた時は、とりあえず全部消してリセットしてみると治る場合があります。

$ minikube delete --purge --all
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?