Kubernetes入門:DeploymentとServiceをローカルで動かす

中級 | 12分 で読める | 2025.12.02

公式ドキュメント

Kubernetesは、複数のコンテナをまとめて動かし、壊れた時の作り直しや台数の調整を助ける仕組みです。最初から本番運用を再現しようとせず、ローカルでDeploymentとServiceの関係を確かめます。

今回やること

  • minikubeで学習用クラスタを起動する
  • DeploymentでnginxのPodを1つ管理する
  • ServiceでPodへ安定した入口を作る
  • ブラウザまたはcurlで応答を確認する

3つの言葉

名前役割
Podコンテナを動かす最小単位
Deployment指定した数のPodを維持する管理役
Service入れ替わるPodへ届く、安定した通信先

Podは作り直されると名前やIPが変わります。そのため、利用側は通常Podへ直接つながず、Serviceを使います。

minikubeでServiceがPodへの入口となりDeploymentがPodを作成して維持する関係

準備

kubectlminikubeの公式手順に従ってminikubeをインストールしてください。Dockerを使える状態で、次を実行します。

minikube start
kubectl get nodes

Readyのノードが1つ表示されれば準備できています。会社や学校から借りたクラスタへ、学習用コマンドを実行してはいけません。ここでは自分のローカルminikubeだけを使います。

Deploymentを作る

まずはnginxを1つ動かします。

kubectl create deployment demo-web --image=nginx:1.30.4
kubectl get deployments
kubectl get pods -l app=demo-web

nginx:1.30.4は、この記事の確認時点(2026年7月25日)にDocker Official Imageで案内されているstable系の明示的なパッチタグです。後から試す場合は、nginx公式イメージの対応タグを確認し、その時点でサポートされているstable系のパッチタグへ読み替えてください。

Deploymentが「Podを1つに保つ」と宣言し、Kubernetesが実際のPodを作ります。Podの状態がRunningになるまで少し待つことがあります。

内容をYAMLで見ると、DeploymentがPodの数とコンテナイメージを管理していることが分かります。

kubectl get deployment demo-web -o yaml

Serviceで公開する

次に、Podへ届く入口を作ります。

kubectl expose deployment demo-web --type=NodePort --port=80
minikube service demo-web --url

最後のコマンドが表示したURLをブラウザで開くか、別のターミナルでcurl <表示されたURL>を実行します。nginxのWelcomeページが返れば、Serviceを通った通信に成功しています。

成功確認

次の3点を確認してください。

kubectl get deployment demo-web
kubectl get pods -l app=demo-web
kubectl get service demo-web
  • DeploymentのREADY1/1である
  • PodがRunningである
  • Service経由でnginxの応答が返る

Podを削除してもDeploymentが新しいPodを作ることも観察できます。

kubectl delete pod -l app=demo-web
kubectl get pods -l app=demo-web --watch

表示を止める時はCtrl + Cです。新しいPodがRunningになったら、ServiceのURLで再び応答を確認します。

よくあるつまずき

PodがImagePullBackOffになる

イメージ名やネットワークを確認します。原因は次で見られます。

kubectl describe pod <Pod名>

URLへ接続できない

最初にminikube statuskubectl get service demo-webを確認します。クラウドのLoadBalancerとローカルのNodePortは動き方が異なるため、この入門ではminikube serviceを使います。

練習

DeploymentのPod数を2つに増やし、状態を確認します。

kubectl scale deployment demo-web --replicas=2
kubectl get pods -l app=demo-web

2つのPodがRunningになっても、Service名はdemo-webのままであることを確認してください。

後片付け

この記事で作ったServiceとDeploymentだけを削除します。

kubectl delete service demo-web
kubectl delete deployment demo-web

学習用minikubeクラスタ自体も不要なら、次で削除できます。クラスタ内のデータも消えるため、この記事専用に作ったローカルクラスタであることを確認してから実行してください。

minikube delete

次のステップ

永続ストレージ、Secret、Ingress、監視、Helmはそれぞれ設定と運用判断が必要です。この最小例を動かせてから、目的に応じて学びましょう。

参考リソース

← 一覧に戻る
PR
PR
PR
PR