はじめに
- 前回の記事の続き
- MacBook Air 2018にLinux Mintをインストールした特殊な環境で、Kubernetes(K8s)の学習を始めました
- minikube start してから実際にブラウザでアプリを確認するまでの手順と、道中で出会う謎の用語たちを具体的な例えを添えてで解説します
- 奇妙な言い回しはGeminiのせいなので悪しからず
1. 爆速でアプリを動かす手順
細かい説明の前に、まずは動かして「やった感」を出します。
(正確にはGeminiに言われたとおりにコマンド実行しただけです)
ステップ1:クラスター起動
minikube start
minikube dashboard # 別窓でGUIを確認
勝手にダッシュボードが起動したので驚き&感動しました。キャプチャはのちほど
ポッドを3つに増やした際に取得したものなので実際の画面とは異なります
ステップ2:アプリ(Deployment)の作成
kubectl create deployment hello-node --image=registry.k8s.io/e2e-test-images/agnhost:2.39 -- /agnhost netexec --http-port=8080 #dashboardと
別窓で実行
- 正直ここがよくうわからなかったので、あとでGeminiに聞いて解説してもらいました(後述します)
【重要】LoadBalancerを機能させる:minikube tunnel
- 通常、クラウド(AWSやGCP)であれば type: LoadBalancer と設定すれば、勝手に豪華な外部IPが割り振られますがここはローカルPC(Linux Mint)の上なのでこのままでは、いくら待っても EXTERNAL-IP は (保留中)のままになります。そこで必要になるのがこのコマンドです。
minikube tunnel #さらに別窓を開いて実行
# 実行結果
tak@tak-MacBookAir:~$ minikube tunnel
[sudo] tak のパスワード:
Status:
machine: minikube
pid: 19755
route: 10.96.0.0/12 -> 192.168.49.2
minikube: Running
services: [hello-node]
errors:
minikube: no errors
router: no errors
loadbalancer emulator: no errors
- 何をしているのか: Linux Mintのネットワークから、Minikube内の隔離された世界へ「専用の地下通路」を開通させています。
- 注意点: このコマンドは実行中、ターミナルを占有します。Ctrl+Cで止めると、せっかく繋がったブラウザとの接続も切れてしまうので、別のターミナルで「おまじない」のように動かし続けておく必要があります。
ステップ3:外部公開(Service)と接続
kubectl expose deployment hello-node --type=LoadBalancer --port=8080
minikube service hello-node # ブラウザが自動起動
2. 【最重要】これって何?用語解説
動くには動いた。でも、自分が何を叩いたのか分からない状態なので、具体例を交えてGeminiに解説してもらいました。
① Node(ノード)
- 正体: コンテナが住むための「物理サーバー」または「仮想マシン」
- 具体例: 今わたしの目の前にある MacBook(Linux Mint) そのものです
- 例え: 「マンション一棟」に相当します
② Pod(ポッド)
- 正体: Kubernetesにおける最小の管理単位。1つ以上のコンテナを包む「殻」
- 具体例: kubectl get pods で見える、実際に動いているアイツです
- 例え: マンションの「一室」。住人(コンテナ)は部屋(Pod)単位で管理されます
③ Deployment(デプロイメント)
- 正体: Podを「いつ、どこで、いくつ」動かすかを管理する宣言書
- 具体例: 「hello-node というPodを常に1つ起動させておけ!」という命令そのもの
- 例え: 「マンションの管理会社」。もし部屋(Pod)が火事(エラー)で消滅しても、管理会社(Deployment)がすぐに新しい部屋を契約して用意してくれます
④ Service(サービス)
- 正体: Podにアクセスするための「固定IP」や「ポート」を提供する窓口
- なぜ必要か: Podは死ぬとIPアドレスが変わります。Serviceがないと、外部からアクセスする際に「引っ越し先の住所が分からない!」となってしまいます
- 例え: 「マンションの受付・代表電話」。受付に電話すれば、担当の部屋(Pod)に繋いでくれます
⑤ kubectl(キューブコントロール)
- 正体: Kubernetesクラスターを操作するためのリモコン
- 具体例: kubectl get nodes など
- 例え: 「管理用タブレット」。これを操作してマンションの設定を変更します
3. なぜ minikube service が必要なのか?
- 通常のWeb開発なら localhost:8080 で見れるはずですが、K8sは「クラスター内部のネットワーク」に閉じこもっています。
- minikube service コマンドは、「クラスターの壁に無理やり穴を空けて、あなたのブラウザを繋げる」という、いわば魔法のトンネル掘りを行っているのです。
とりあえずまとめ
Deployment:管理職(Podを死なせない)
Pod:現場(コンテナが動く場所)
Service:受付(外からの窓口)
この3つさえ押さえておけば、Kubernetesの会話の8割にはついていけます。
とGeminiに言われたのですが、正直まだそれぞれの用語、役割、メリットデメリットが腹落ちしていないので、次回は他の機能なども深堀ってみます。
停止手順も載せておきます
1. 「一時停止」する(また後で続きをやる場合)
- PodやDeploymentの設定は残したまま、Minikubeの仮想マシン(またはプロセス)だけを止めます。
minikube stop
状態: マンション(Node)の電気を消して閉館するイメージ。
次回の再開: minikube start を打てば、先ほどの hello-node が自動的にムクッと起き上がってきます。
2. 「更地にする」(学習が終わってスッキリしたい場合)
- 作ったアプリや設定をすべて削除し、Minikube自体も完全に消去します。
minikube delete
状態: マンションを爆破して更地にするイメージ。
次回の再開: すべて消えるので、また kubectl create deployment... からやり直しです。
3. 【おまけ】アプリだけ消す(クラスターは残す場合)
- Minikubeは起動したまま、今回作った hello-node だけを消したいときはこれ。
kubectl delete service hello-node
kubectl delete deployment hello-node
今回は
- 設定を残しておきたいので、
minikube stop
を実行しておきます。

