Kubernetes基礎【2026年6月更新】

Kubernetesクラスタを1時間で構築し、本番環境で安定稼働させるための基礎知識を完全網羅。最新のKubernetes 1.31に対応した実践的な設定手順とトラブルシューティングテクニックを、具体的なコマンドと構成ファイルで解説します。

本記事を最後まで実践すれば、ローカル環境で動作するKubernetesクラスタを構築でき、基本的なPod・Deployment・Serviceの運用が可能になります。また、セキュリティベストプラクティスとモニタリング設定まで、実務で即座に活用できる内容を提供します。


目次


Kubernetesとは何か:基礎概念とメリット

Kubernetesは、コンテナ化されたアプリケーションの自動デプロイ・スケーリング・運用を自動化するオープンソースのコンテナオーケストレーションプラットフォームです。Googleによって開発され、現在はCloud Native Computing Foundation(CNCF)によって管理されています。

具体的には、以下のような機能を提供します:

  • セルフヒーリング(Self-Healing):障害が発生したPodを自動的に再起動
  • オートスケーリング(Auto-Scaling):負荷に応じてPod数を自動調整
  • ローリングアップデート(Rolling Update):ダウンタイムなしでアプリケーションを更新
  • サービスディスカバリー(Service Discovery):Pod間のネットワーク接続を自動管理
  • ストレージオーケストレーション(Storage Orchestration):永続ストレージを自動的に割り当て

Kubernetesを導入する主なメリットは以下の通りです:

メリット具体的な効果数値例
運用コストの削減手動でのコンテナ管理が不要になり、運用工数を大幅に削減平均30%の運用コスト削減(出典: CNCF調査2025)
リリースサイクルの短縮CI/CDパイプラインとの統合により、リリース頻度が向上リリースサイクルを1/3に短縮(出典: Google Cloud調査)
スケーラビリティの向上需要の変動に応じてリソースを自動的にスケールピーク時のリソース利用率を50%改善(出典: Datadog調査)
高可用性の確保障害時の自動復旧機能により、サービス停止時間を最小化可用性を99.95%に向上(出典: Kubernetes公式ドキュメント)

Kubernetesは、以下のようなユースケースで活用されています:

  • マイクロサービスアーキテクチャの実現
  • CI/CDパイプラインの基盤として
  • マルチクラウド環境でのアプリケーションデプロイ
  • 機械学習モデルの運用(MLOps)
  • IoTデバイス向けのエッジコンピューティング

特に、2025年以降はAI/MLワークロードの増加に伴い、Kubernetes上でのGPUリソース管理が重要なトレンドとなっています。NVIDIA GPU Operatorを活用することで、GPUを必要とするワークロードの効率的な運用が可能になります。


Kubernetesアーキテクチャ:コントロールプレーンとノードの役割

Kubernetesクラスタは、大きく分けてコントロールプレーン(Control Plane)ワーカーノード(Worker Nodes)の2つのコンポーネントで構成されます。それぞれの役割と主要なコンポーネントについて解説します。

コントロールプレーンの構成要素

コントロールプレーンは、クラスタ全体の管理と制御を行う中枢です。以下の主要コンポーネントで構成されます:

コンポーネント役割代表的なツール
API ServerKubernetes APIへの全てのリクエストを処理。RESTful APIを提供kube-apiserver
etcdクラスタの状態を保存する分散キーバリューストアetcd
Scheduler新しいPodを実行する最適なノードを選択kube-scheduler
Controller Manager望ましい状態(Desired State)を維持するための制御ループを実行kube-controller-manager
Cloud Controller Managerクラウドプロバイダー固有の機能を管理(オンプレミスでは不要)cloud-controller-manager

コントロールプレーンの各コンポーネントは、kubeletを通じてワーカーノードと通信します。kubeletは、各ノード上で動作するエージェントであり、Podの起動・停止・状態監視などを行います。

ワーカーノードの構成要素

ワーカーノードは、実際にアプリケーションを実行するコンピュータ(物理サーバーまたは仮想マシン)です。各ノードには以下のコンポーネントがインストールされています:

コンポーネント役割代表的なツール
kubeletPodの管理と状態監視。API Serverと通信kubelet
kube-proxyネットワークルーティングを管理。Serviceの実現kube-proxy
Container Runtimeコンテナの実行環境を提供containerd, CRI-O, Docker(非推奨)
Pod1つ以上のコンテナをまとめた最小単位の実行ユニット

各ノードには、Node Nameと呼ばれる一意の識別子が割り当てられます。また、ノードにはラベル(Labels)アノテーション(Annotations)を付与することで、柔軟なリソース管理が可能になります。

クラスタの状態管理

Kubernetesは、Desired State(望ましい状態)Current State(現在の状態)を常に比較し、差異があれば自動的に修正します。この仕組みにより、セルフヒーリング機能が実現されています。

例えば、以下のような状況で自動修正が行われます:

  • Podがクラッシュした場合:自動的に再起動
  • ノードがダウンした場合:Podを別のノードに再スケジューリング
  • リソース不足が発生した場合:Podを別のノードに移動

この状態管理は、etcdと呼ばれる分散キーバリューストアに保存されます。etcdは、高可用性と一貫性を確保するために、Raftコンセンサスアルゴリズムを採用しています。


Kubernetesクラスタの構築手順:ローカル環境から本番まで

Kubernetesクラスタを構築する方法は、用途や環境によって異なります。本セクションでは、以下の3つのシナリオに分けて構築手順を解説します:

  1. ローカル開発環境:Minikube
  2. 本番環境向け:kubeadm
  3. クラウドプロバイダーのマネージドKubernetes

各方法の特徴を比較すると以下の通りです:

方法用途メリットデメリット構築時間
Minikubeローカル開発・学習簡単にセットアップ可能、リソース消費が少ないシングルノードのみ、本番機能が制限10分程度
kubeadmオンプレミス・ベアメタル柔軟な構成が可能、完全な機能を利用手動での設定が多い、メンテナンスが必要30分程度
EKS/AKS/GKEクラウド環境マネージドサービス、高可用性、自動アップグレードコストが高い、ベンダーロックインのリスク5分程度

Minikubeでローカル開発環境を構築

Minikubeは、ローカルマシン上でシングルノードのKubernetesクラスタを簡単に構築できるツールです。主に開発・学習・テスト用途で利用されます。

Minikubeのインストール

以下の手順でMinikubeをインストールします。対応OSはLinux、macOS、Windowsです。

Linux/macOSの場合:

# curlでMinikubeをダウンロード
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

バイナリを/usr/local/binに移動

sudo install minikube-linux-amd64 /usr/local/bin/minikube

バージョン確認

minikube version

Windowsの場合(PowerShell):

# Chocolateyを使用してインストール
choco install minikube

バージョン確認

minikube version

次に、kubectl(Kubernetes CLI)をインストールします:

# Linux/macOS
curl -LO "https://dl.k8s.io/release/$(curl -L -s 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 (PowerShell)

choco install kubernetes-cli

Minikubeクラスタの起動

Minikubeを起動するには、以下のコマンドを実行します:

minikube start --driver=docker --cpus=2 --memory=4g

主なオプションの説明:

  • –driver:コンテナランタイムを指定(docker, podman, virtualbox, hyperkit等)
  • –cpus:CPUコア数を指定(デフォルト: 2)
  • –memory:メモリサイズを指定(デフォルト: 2GB)
  • –kubernetes-version:Kubernetesバージョンを指定(例: –kubernetes-version=v1.31.0)

クラスタの起動が完了したら、以下のコマンドで状態を確認します:

minikube status

出力例:

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

次に、kubectlを使用してクラスタに接続します:

kubectl get nodes

出力例:

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   2m    v1.31.0

Minikubeの主な機能

Minikubeには、以下のような便利な機能があります:

機能コマンド説明
ダッシュボード起動minikube dashboardWebベースのKubernetesダッシュボードを起動
イングレスの有効化minikube addons enable ingressIngressコントローラーを有効化
ストレージプロビジョナー有効化minikube addons enable storage-provisioner永続ボリュームの自動プロビジョニングを有効化
メトリクスサーバー有効化minikube addons enable metrics-serverリソースメトリクスを収集

例えば、ダッシュボードを起動するには以下のコマンドを実行します:

minikube dashboard --url

これにより、ブラウザでKubernetesクラスタの状態を視覚的に確認できます。

Minikubeの停止と削除

Minikubeクラスタを停止するには:

minikube stop

クラスタを完全に削除するには:

minikube delete

kubeadmで本番向けクラスタを構築

kubeadmは、Kubernetes公式のクラスタ構築ツールです。オンプレミス環境やベアメタルサーバーでKubernetesクラスタを構築する際に利用されます。kubeadmを使用することで、標準的なKubernetesクラスタを簡単に構築できます。

前提条件

kubeadmでクラスタを構築する前に、以下の前提条件を満たす必要があります:

  • OS: Ubuntu 22.04 LTS / CentOS 7 or 8 / RHEL 8 / Debian 11
  • CPU: 2コア以上
  • メモリ: 2GB以上
  • ディスク: 20GB以上の空き容量
  • ネットワーク: ノード間の通信が可能(ポート: 6443, 2379-2380, 10250等)
  • コンテナランタイム: containerd(推奨)または CRI-O

本手順では、Ubuntu 22.04 LTSを使用します。他のOSを使用する場合は、公式ドキュメントを参照してください。

コンテナランタイムのインス…

kubeadmでは、containerdをコンテナランタイムとして使用します。以下の手順でcontainerdをインストールします:

# 必要なパッケージをインストール
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl

Docker公式GPGキーを追加

sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc

Dockerリポジトリを追加

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

containerdをインストール

sudo apt-get update sudo apt-get install -y containerd.io

containerdの設定を更新

sudo mkdir -p /etc/containerd containerd config default | sudo tee /etc/containerd/config.toml

systemdをcgroupドライバーとして使用するように設定

sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/g' /etc/containerd/config.toml

containerdを再起動

sudo systemctl restart containerd sudo systemctl enable containerd

kubeadm、kubel…

次に、Kubernetesの主要コンポーネントをインストールします:

# KubernetesのGPGキーを追加
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.31/deb/Release.key | sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg

Kubernetesリポジトリを追加

echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.31/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list

パッケージをインストール

sudo apt-get update sudo apt-get install -y kubelet kubeadm kubectl

自動アップデートを防止

sudo apt-mark hold kubelet kubeadm kubectl

インストールされたバージョンを確認します:

kubeadm version
kubelet --version
kubectl version --client

コントロールプレーンノード…

コントロールプレーンノードとして機能するサーバーで、以下のコマンドを実行します:

sudo kubeadm init --pod-network-cidr=10.244.0.0/16

主なオプションの説明:

  • –pod-network-cidr:PodネットワークのCIDRを指定(使用するCNIプラグインによって異なる)
  • –apiserver-advertise-address:API Serverのアドバタイズアドレスを指定(マルチノードの場合に必要)
  • –control-plane-endpoint:コントロールプレーンのエンドポイントを指定(HA構成の場合に必要)

初期化が完了すると、以下のような出力が表示されます:

Your Kubernetes control-plane has initialized successfully!

To start using your cluster, you need to run the following as a regular user:

  mkdir -p $HOME/.kube
  sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
  sudo chown $(id -u):$(id -g) $HOME/.kube/config

Alternatively, if you are the root user, you can run:

  export KUBECONFIG=/etc/kubernetes/admin.conf

You should now deploy a pod network to the cluster.
Run "kubectl get pods -A" to check that the pod network has been installed.

上記の手順に従って、kubectlの設定を行います:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

次に、Podネットワークをインストールします。本例では、Flannelを使用します:

kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml

Podネットワークのインストールが完了したら、ノードの状態を確認します:

kubectl get nodes

出力例:

NAME             STATUS   ROLES           AGE   VERSION
control-plane    Ready    control-plane   5m    v1.31.0

ワーカーノードの追加

コントロールプレーンノードの初期化が完了したら、ワーカーノードを追加します。ワーカーノードで以下のコマンドを実行します:

sudo kubeadm join :6443 --token  --discovery-token-ca-cert-hash 

トークンとハッシュは、コントロールプレーンノードの初期化時に表示されるメッセージから取得できます。以下のコマンドで再取得も可能です:

kubeadm token create --print-join-command

ワーカーノードを追加した後、再度ノードの状態を確認します:

kubectl get nodes

出力例:

NAME             STATUS   ROLES           AGE   VERSION
control-plane    Ready    control-plane   10m   v1.31.0
worker-node-1     Ready              2m    v1.31.0
worker-node-2     Ready              1m    v1.31.0

kubeadmクラスタのア…

kubeadmを使用してクラスタをアップグレードするには、以下の手順を実行します:

# アップグレードプランを確認
sudo kubeadm upgrade plan

コントロールプレーンをアップグレード

sudo kubeadm upgrade apply v1.31.0

kubeletとkubectlをアップグレード

sudo apt-get update && sudo apt-get install -y kubelet=1.31.0-00 kubectl=1.31.0-00

kubeletを再起動

sudo systemctl daemon-reload sudo systemctl restart kubelet

ノードの状態を確認

kubectl get nodes

アップグレード後は、必ずPodネットワークプラグイン(例: Flannel)が正常に動作していることを確認してください。

クラウドプロバイダーのマネージドKubernetes比較

主要なクラウドプロバイダーでは、マネージドKubernetesサービスを提供しています。各サービスの特徴を比較し、用途に応じた選択基準を解説します。

以下の3つの主要なマネージドKubernetesサービスを比較します:

サービス名提供元特徴料金(月額・1ノードあたり)対応リージョン
Amazon EKSAWS完全マネージド、AWSとの統合が強力、Fargateによるサーバーレスも選択可能$0.10(管理費) + $0.0265/時間(Fargate)25リージョン以上
Azure Kubernetes Service (AKS)Microsoft AzureAzureとの深い統合、Active Directoryとの連携、無料管理費$0.00(管理費無料) + $0.024/時間(Linux)50リージョン以上
Google Kubernetes Engine (GKE)Google CloudGoogleの技術が活かされたパフォーマンス、Autopilotによる完全マネージド、 Anthosによるハイブリッド/マルチクラウド対応$0.10(管理費) + $0.0265/時間(Autopilot)39リージョン以上

Amazon EKS(El…

Amazon EKSは、AWS上でKubernetesクラスタを簡単に構築・運用できるマネージドサービスです。主な特徴は以下の通りです:

  • 完全マネージド:コントロールプレーンの管理が不要
  • AWSとの統合:IAM、VPC、ELB、RDS等とのシームレスな連携
  • Fargate対応:サーバーレスなPod実行が可能
  • セキュリティ:AWS IAMとの統合によるきめ細かなアクセス制御
  • モニタリング:Amazon CloudWatchとの統合

EKSの主な機能:

  • クラスタの自動スケーリング
  • ローリングアップデートの自動管理
  • VPC CNIによるネットワーク管理
  • AWS Load Balancer ControllerによるIngress管理

EKSの料金体系:

  • 管理費:$0.10/時間/クラスタ
  • EC2ノード:ノードの料金(例: t3.medium: $0.0416/時間)
  • Fargate:Pod実行時の料金(vCPUとメモリに応じて課金)

EKSの構築手順(概要):

  1. AWS CLIとeksctlをインストール
  2. eksctlを使用してクラスタを作成:eksctl create cluster --name my-cluster --region us-west-2
  3. kubectlを設定:aws eks --region us-west-2 update-kubeconfig --name my-cluster
  4. 必要なアドオン(例: VPC CNI, CoreDNS)をインストール

Azure Kuberne…

AKSは、Microsoft Azure上でKubernetesクラスタを提供するマネージドサービスです。主な特徴は以下の通りです:

    ABOUT ME
    たから
    サラリーマンをしながら開業して経営やってます。 今年、本業で独立・別事業を起業予定です。 ◆経験:IT講師/インフラエンジニア/PM/マネジメント/採用/運用・保守・構築・設計 ◆取得資格:CCNA/CCNP/LPIC-1/AZ-900/FE/サーティファイC言語 ◆サイドビジネス:アパレル事業/複数のWEBメディアを運営