Kubernetes(クバネティス)入門|Dockerとの違い、Pod・Deployment・Serviceの仕組みを図解で解説

Kubernetes入門 アイキャッチ

「Kubernetes(クバネティス)って何?」「Dockerと何が違うの?」「Pod、Service、Deploymentの関係がよくわからない」。この記事は、そんな方向けのKubernetes入門です。仕組みと主要なリソースを図解でつかみ、最後にローカル環境で実際にアプリを動かすところまで進みます。

コンテナやDockerそのものの基本(イメージ、Dockerfile、Docker Compose)はDockerの基本と実践で解説しています。この記事では「たくさんのコンテナをどう管理するか」に絞って説明します。

目次

Kubernetesとは?ひとことで言うと「コンテナの自動運用係」

Kubernetes(K8sとも書きます。最初の「K」と最後の「s」のあいだに8文字あることからの略称です)は、コンテナ化されたアプリケーションのデプロイ、スケーリング、管理を自動化するオープンソースのプラットフォームです。

Googleが社内で使っていたクラスター管理システム「Borg」とその後継「Omega」の経験をもとに開発され、2014年6月に最初のコードがGitHubに公開されました。2015年7月21日にバージョン1.0がリリースされ、同時にLinux Foundation傘下に新設されたCNCF(Cloud Native Computing Foundation)へ寄贈されています。2026年10月時点の最新の安定版はv1.37です。

DockerとKubernetesの違い

項目Docker(Docker Compose)Kubernetes
主な役割コンテナを作って動かす多数のコンテナを複数台のサーバーで運用する
規模主に1台のマシン複数台のマシン(クラスター)
障害時基本は手動で再起動自動で作り直す(自己修復)
台数の増減手動設定に応じて自動でスケール

なお、KubernetesはDocker専用ではありません。v1.24でDocker Engineとの橋渡し部品(dockershim)が削除され、現在はcontainerdやCRI-Oなど、CRIという標準インターフェースに対応したコンテナランタイムを使います。Dockerで作ったイメージはそのままKubernetesで動かせます。

Docker(1台のマシンでコンテナを動かす)とKubernetes(複数台のノードにコンテナを配置・管理する)の比較図
Docker(1台のマシンでコンテナを動かす)とKubernetes(複数台のノードにコンテナを配置・管理する)の比較図

Kubernetesが解決する3つの課題

  • 自己修復:コンテナが落ちたら、自動で新しいものを起動して「あるべき状態」に戻す
  • スケーリング:アクセスが増えたらコンテナの数を増やし、減ったら減らす
  • ローリングアップデートとロールバック:新しいバージョンに少しずつ入れ替え、問題があれば元に戻す

ポイントは、「何台動かしたいか」というあるべき状態を宣言しておくと、Kubernetesがその状態を保ち続けてくれることです。これを宣言的な管理と呼びます。

Kubernetesの仕組み:クラスター・コントロールプレーン・ノード

Kubernetesは、複数のマシンをまとめたクラスターとして動きます。クラスターは大きく2つの部分に分かれます。

部分役割主な構成要素
コントロールプレーンクラスター全体の司令塔。どこに何を動かすかを決め、状態を監視するkube-apiserver、etcd(設定と状態の保存)、kube-scheduler、kube-controller-manager
ワーカーノード実際にコンテナ(Pod)が動くマシンkubelet、kube-proxy、コンテナランタイム

以前は「マスターノード」と呼ばれていましたが、現在の公式ドキュメントでは「コントロールプレーン」という呼び方が使われています。

コントロールプレーン(kube-apiserver・etcd・kube-scheduler・kube-controller-manager)と複数のワーカーノード(kubelet・Pod)の構成図
コントロールプレーン(kube-apiserver・etcd・kube-scheduler・kube-controller-manager)と複数のワーカーノード(kubelet・Pod)の構成図

まず覚えたい4つのリソース:Pod・Deployment・Service・Namespace

Pod:コンテナを動かす最小単位

Podは、Kubernetesで動かせる最小の単位です。1つのPodには通常1つのコンテナが入り、密接に連携するコンテナを同じPodにまとめることもできます。Podは作り直されるたびにIPアドレスが変わる、使い捨ての存在です。

Deployment:Podの数とバージョンを管理する

Deploymentは「このイメージのPodを3つ動かす」といったあるべき状態を定義するリソースです。Podが落ちれば作り直し、イメージを更新すれば少しずつ新しいPodに入れ替えます。実際の運用では、Podを直接作るのではなくDeploymentを使うのが基本です。

Service:Podへの安定した入り口

PodはIPアドレスが変わるため、直接アクセスするのは不便です。Serviceは、ラベルで選んだ複数のPodに対して固定の名前とIPアドレスを提供し、通信を振り分ける入り口です。主な種類は次の3つです。

Serviceの種類アクセスできる範囲主な用途
ClusterIP(初期値)クラスターの内部だけアプリとデータベースなど、内部同士の通信
NodePort各ノードのIPアドレスと特定のポート番号から検証用に外部から試す
LoadBalancerクラウドのロードバランサー経由で外部からEKS・GKE・AKSなどで本番公開する
Deploymentが管理する3つのPodの前にServiceが立ち、リクエストを振り分ける関係図
Deploymentが管理する3つのPodの前にServiceが立ち、リクエストを振り分ける関係図

Namespace:クラスターを用途ごとに区切る

Namespaceは、1つのクラスターを「開発用」「検証用」のように論理的に分ける仕組みです。チームや環境ごとにリソースを整理できます。

外部公開の新しい標準:Gateway API

HTTPのルーティングで外部に公開する方法としては、これまでIngressが広く使われてきました。ただ、Ingress APIは機能追加が止まっており、代表的な実装だったIngress NGINXは2026年3月に開発・保守を終了しています。新しく学ぶなら、後継として位置づけられているGateway APIから触れるのがおすすめです。

ハンズオン:ローカルでKubernetesを動かしてみる

学習用には、PC上に小さなクラスターを作れるツールを使います。代表的なのはminikubeと、Dockerのコンテナをノード代わりにするkind(Kubernetes IN Docker)です。kindを使うにはDockerかPodmanが必要です。minikubeはDockerのほか、VirtualBoxなどの仮想マシンでも動きます(minikube公式ドキュメント)。操作にはkubectlというコマンドラインツールを使います。

1. クラスターを起動する(minikubeの例)

minikube start
kubectl get nodes

2. Deploymentを作ってPodを動かす

kubectl create deployment hello --image=nginx --replicas=3
kubectl get pods

3. Serviceで公開してアクセスする

kubectl expose deployment hello --type=NodePort --port=80
minikube service hello

※MacやWindowsでDockerを使っている場合は、minikube serviceを実行したターミナルを閉じずに開いたままにしておいてください。閉じるとアクセスできなくなります。

同じDeploymentは、YAMLファイルに書いてkubectl apply -f hello.yamlで作ることもできます。最小限の例は次のとおりです。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello
spec:
  replicas: 3
  selector:
    matchLabels:
      app: hello
  template:
    metadata:
      labels:
        app: hello
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80

4. 自己修復とスケールを試す

kubectl delete pod <Pod名のどれか1つ>
kubectl get pods
kubectl scale deployment hello --replicas=5

Podを1つ削除しても、Deploymentが「3つ」というあるべき状態に戻すために新しいPodを自動で作ります。これがKubernetesの自己修復です。

ハンズオンの4ステップ(create→expose→delete pod で自動復活→scale)の流れを示すイメージ図
ハンズオンの4ステップ(create→expose→delete pod で自動復活→scale)の流れを示すイメージ図

実際の運用では、こうした設定をYAMLファイル(マニフェスト)に書いてGitで管理し、kubectl apply -f で反映するのが一般的です。CI/CDとの組み合わせはCI/CDパイプラインの構築やGitHub Actions入門を参考にしてください。

次のステップ:本番に近い環境へ

  • マネージドKubernetes:AWSのEKS、Google CloudのGKE、AzureのAKSを使うと、コントロールプレーンの運用をクラウド側に任せられます。クラウドの選び方はAWSとGCPの比較もどうぞ。
  • インフラのコード化:クラスター自体の作成はTerraform入門で紹介しているIaCで管理できます。
  • 設計の考え方:Kubernetesと相性のよい設計はマイクロサービスアーキテクチャで解説しています。

まとめ

  • Kubernetesは、コンテナのデプロイ・スケーリング・自己修復を自動化するプラットフォーム
  • クラスターは「コントロールプレーン(司令塔)」と「ワーカーノード(実行役)」でできている
  • まずはPod・Deployment・Service・Namespaceの4つを覚え、minikubeやkindで手を動かすのが近道
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

社内エンジニアとして、SREとセキュリティの仕事をしています。サーバーの構築や運用、クラウド環境の設計にも関わってきました。趣味はゲームと漫画・アニメ。

コメント

コメントする

目次