はじめに
kubernetesリソースをしっかり理解するために、ローカルPC上でminikubeを立ち上げ、リソースをapplyすることでその中身を理解することにしました。本記事では、まずそのセットアップとしてminikube を使ってローカルに k8s クラスタを立ち上げ、kubectl でコマンドを送れる状態を作るところまでを扱います。
minikube と kubectl とは
| ツール | 役割 |
|---|---|
| kubectl | k8s クラスタを操作する CLI(「k8s のリモコン」) |
| minikube | ローカルマシン上にシングルノードの k8s クラスタを立ち上げるツール |
minikube は本番環境と同じ Kubernetes API を持つため、学習・開発環境として十分な再現度がある。
前提条件
- Docker Desktop がインストール済み(minikube のドライバとして使用)
- RAM 4GB 以上が利用可能(推奨)
- macOS / Linux / Windows(WSL2)のいずれか
Step 1: kubectl のインストール
macOS
# Homebrew でインストール
brew install kubectl
# バージョン確認
kubectl version --client
Linux
curl -LO "https://dl.k8s.io/release/$(curl -sL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
Windows
winget install Kubernetes.kubectl
確認コマンドの出力例:
Client Version: v1.29.x
Kustomize Version: v5.x.x
Step 2: minikube のインストール
macOS
brew install minikube
Linux
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
Windows
winget install Kubernetes.minikube
Step 3: クラスタの起動
minikube は Kubernetes クラスタを動かすために、何らかの「隔離された実行環境」が必要です。その実行環境を提供するのがドライバです。--driver=docker を指定すると、minikube は Docker コンテナを「ノードに見立てて」 k8s クラスタを動かします。
# Docker ドライバで起動(推奨)
minikube start --driver=docker
# CPU とメモリを明示的に指定する場合
minikube start --driver=docker --cpus=2 --memory=4096
初回は必要なイメージのダウンロードがあるため、数分かかります。以下のような出力が出れば成功です。
* minikube v1.32.x on Darwin
* Using the docker driver based on user configuration
* Starting control plane node minikube in cluster minikube
* Pulling base image ...
* Preparing Kubernetes v1.29.x on Docker ...
* Done! kubectl is now configured to use "minikube"
Step 4: 動作確認
クラスタに含まれるnodeと各コンポーネントの状態を調べてみます。
kubectl get nodes
kubectl get componentstatuses
期待される出力:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 1m v1.29.x
$ kubectl get componentstatuses
NAME STATUS MESSAGE ERROR
scheduler Healthy ok
controller-manager Healthy ok
etcd-0 Healthy ok
各コンポーネントの役割
- scheduler — 「この Pod はどのノードで動かすか」を決める調停役。CPUやメモリの空きを見て最適なノードを選びます。
- controller-manager — 「Deployment で3台指定したのに2台しかいない」といった差分を検知して自動修正し続けるループ。Chapter 3 の ReplicaSet で実感できます。
- etcd — クラスタの全状態(どんなリソースが存在するか)を保存するキーバリューDB。ここが壊れるとクラスタ全体が失われます。
STATUS: Ready と表示されたことから、kubectlでクラスタを操作できる状態であることが分かり、クラスタ内のコンポーネントもSTATUS: Healthと表示され、正常に稼働していることが分かります。
クラスタの停止・削除
# 停止(後で再開できる)
minikube stop
# 完全削除
minikube delete
まとめ
-
minikube startでローカル k8s クラスタが起動する -
kubectl get nodesで Ready 状態を確認できたら準備完了