minikubeとは
kubernetesのお試しに使える。Kubernetes構築は大変そうなので、勉強用に使える環境は嬉しい。
普通、kubernetesは複数ノードで動かすものだが、1つのノードで動かすことができるらしい。
必要スペックを確認
minikubeスタートガイドより
項目 | 必要スペック |
---|---|
CPU | 2CPU |
MEM | 2GB |
DISK | 20GB |
おうちクラウドに上記スペックのAlmaLinux8.6を立てて動かす。
おうちクラウド立ててると、ほしいときにVM立てられるのがいい。
minikube環境構築
Dockerをインストールしておく。
Dockerのインストールはこちらの記事を参照。
Docker composeまでは入れなくてもいいのかな?
minikubeをダウンロード&実行ファイルをパスに追加
# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
# install minikube-linux-amd64 /usr/local/bin/minikube
minikubeを実行
root権限で実行する場合は--force
オプションをつける。
# minikube start --force
😄 Almalinux 8.6 上の minikube v1.28.0
❗ minikube は --force が付与された場合、様々な検証をスキップします (これは予期せぬ挙動を引き起こすかも知れません)
✨ docker ドライバーが自動的に選択されました。他の選択肢: ssh, none
🛑 「docker」ドライバーは root 権限で使用すべきではありません。root での継続を希望する場合、--force を使用してください。
💡 VM 内で minikube を実行している場合、--driver=none の使用を検討してください:
📘 https://minikube.sigs.k8s.io/docs/reference/drivers/none/
⛔ 要求されたメモリー割り当て (1811MB) が推奨の最小値 1900MB 未満です。デプロイは失敗するかもしれません。
🧯 要求された 1811MiB のメモリー割当は、システムのオーバーヘッド (合計システムメモリー: 1811MiB) に十分な空きを残しません。安定性の問題に直面するかも知れません。
💡 提案: Start minikube with less memory allocated: 'minikube start --memory=1811mb'
📌 root 権限を持つ Docker ドライバーを使用
👍 minikube クラスター中のコントロールプレーンの minikube ノードを起動しています
🚜 ベースイメージを取得しています...
💾 ロード済み Kubernetes v1.25.3 をダウンロードしています...
> preloaded-images-k8s-v18-v1...: 385.44 MiB / 385.44 MiB 100.00% 97.26 M
> gcr.io/k8s-minikube/kicbase: 386.27 MiB / 386.27 MiB 100.00% 14.26 MiB
> gcr.io/k8s-minikube/kicbase: 0 B [________________________] ?% ? p/s 13s
🔥 docker container (CPUs=2, Memory=1811MB) を作成しています...
🐳 Docker 20.10.20 で Kubernetes v1.25.3 を準備しています...
▪ 証明書と鍵を作成しています...
▪ コントロールプレーンを起動しています...
▪ RBAC のルールを設定中です...
🔎 Kubernetes コンポーネントを検証しています...
▪ gcr.io/k8s-minikube/storage-provisioner:v5 イメージを使用しています
🌟 有効なアドオン: default-storageclass, storage-provisioner
💡 kubectl が見つかりません。kubectl が必要な場合、'minikube kubectl -- get pods -A' を試してください
🏄 終了しました!kubectl がデフォルトで「minikube」クラスターと「default」ネームスペースを使用するよう設定されました
終了した旨のメッセージが表示されたら完了。
インストール中にメモリが足りないっぽいメッセージが出てたけど、swapを使ってなんとかインストールしてくれたのかな?
メッセージを見ると、Dockerを使って構築してくれてることがわかる。
コンテナ起動状態を確認
Dockerを使ってkubernetesクラスタが動いていることがわかる。
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eecfd2f5c752 gcr.io/k8s-minikube/kicbase:v0.0.36 "/usr/local/bin/entr…" 6 minutes ago Up 6 minutes 127.0.0.1:32772->22/tcp, 127.0.0.1:32771->2376/tcp, 127.0.0.1:32770->5000/tcp, 127.0.0.1:32769->8443/tcp, 127.0.0.1:32768->32443/tcp minikube
kubectlを使う
minikubeを実行すると、kubectlもついてくるようである。
minikube kubectl --
コマンドで実行するようになっているため使い勝手が悪い。
# minikube kubectl -- get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-bdq7s 1/1 Running 0 18m
kube-system etcd-minikube 1/1 Running 0 18m
kube-system kube-apiserver-minikube 1/1 Running 0 18m
kube-system kube-controller-manager-minikube 1/1 Running 0 18m
kube-system kube-proxy-jjxnf 1/1 Running 0 18m
kube-system kube-scheduler-minikube 1/1 Running 0 18m
kube-system storage-provisioner 1/1 Running 1 (18m ago) 18m
エイリアスを書いてあげることでkubectl
で実行できるようにする。
# alias kubectl="minikube kubectl --"
[root@minikube ~]# kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-565d847f94-bdq7s 1/1 Running 0 22m
kube-system etcd-minikube 1/1 Running 0 22m
kube-system kube-apiserver-minikube 1/1 Running 0 22m
kube-system kube-controller-manager-minikube 1/1 Running 0 22m
kube-system kube-proxy-jjxnf 1/1 Running 0 22m
kube-system kube-scheduler-minikube 1/1 Running 0 22m
kube-system storage-provisioner 1/1 Running 1 (21m ago) 22m
今回は、エイリアスを書いてminikubeのkubectlを使えるようにしたが、kubectlをインストールしても良さそう。
クラスタ構成を確認
コントロールプレーン(マスターノード)の起動と、内部DNSのエンドポイントが確認できた。
# kubectl cluster-info
Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
ノード状態確認
minikubeは1ノードで動かすものなので1つだけ表示されている。
# kubectl get node
NAME STATUS ROLES AGE VERSION
minikube Ready control-plane 121m v1.25.3
その他minikubeコマンド
コマンド | 内容 |
---|---|
minikube start | 仮想マシンを起動する |
minikube stop | 仮想マシンを停止 |
minikube delete | 仮想マシンを削除 |
minikube status | 起動状態を確認する |
minikube ip | 仮想マシンのIPアドレスを確認 |
minikube ssh | 仮想マシンへSSH接続する |
minikube addons list | アドオンリストを表示する |
minikube dashboard | Kubernetesダッシュボードを起動 |
外部サーバーなのが問題なのか、以下がうまく動かない・・・(時間見つけて解決方法調べます)
ダッシュボードを使う
アドオンを追加すると使えるようになる。
# minikube addons enable metrics-server
💡 metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
▪ k8s.gcr.io/metrics-server/metrics-server:v0.6.1 イメージを使用しています
🌟 'metrics-server' アドオンが有効です
ダッシュボードを起動する。
--url
オプションを追加してもよい。
# minikube dashboard
Grafanaを使う
# minikube addons enable heapster
⌛ metrics-server アドオンを使用します (heapster は廃止予定です)
💡 metrics-server is an addon maintained by Kubernetes. For any concerns contact minikube on GitHub.
You can view the list of minikube maintainers at: https://github.com/kubernetes/minikube/blob/master/OWNERS
▪ k8s.gcr.io/metrics-server/metrics-server:v0.6.1 イメージを使用しています
🌟 'metrics-server' アドオンが有効です
# kubectl get svc --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 104m
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 104m
kube-system metrics-server ClusterIP 10.108.86.162 <none> 443/TCP 76m
kubernetes-dashboard dashboard-metrics-scraper ClusterIP 10.109.205.197 <none> 8000/TCP 81m
kubernetes-dashboard kubernetes-dashboard ClusterIP 10.105.102.28 <none> 80/TCP 81m
とりあえずminikubeは動いたようなので先に進める。