Kubernetes基礎【2026年6月更新】

Kubernetes基礎【2026年6月更新】
Kubernetesクラスタを1時間で構築し、本番環境で安定稼働させるための基礎知識を完全網羅。最新のKubernetes 1.31に対応した実践的な設定手順とトラブルシューティングテクニックを、具体的なコマンドと構成ファイルで解説します。
本記事を最後まで実践すれば、ローカル環境で動作するKubernetesクラスタを構築でき、基本的なPod・Deployment・Serviceの運用が可能になります。また、セキュリティベストプラクティスとモニタリング設定まで、実務で即座に活用できる内容を提供します。
目次
- Kubernetesとは何か:基礎概念とメリット
- Kubernetesアーキテクチャ:コントロールプレーンとノードの役割
- Kubernetesクラスタの構築手順:ローカル環境から本番まで
- Kubernetesのコア概念:Pod・Deployment・Serviceの違い
- YAML設定ファイルの書き方:実践的なテンプレート集
- ネットワーク設定:Service・Ingress・ネットワークポリシー
- ストレージ管理:PersistentVolume・StatefulSet
- セキュリティ設定:RBAC・NetworkPolicy・PodSecurity
- モニタリングとロギング:Prometheus・Grafana・Loki
- トラブルシューティング:よくあるエラーと解決策
- 運用ベストプラクティス:GitOps・CI/CD・バックアップ
- Kubernetes基礎に関するFAQ
- まとめ:Kubernetes基礎の習得ロードマップ
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 Server | Kubernetes 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の起動・停止・状態監視などを行います。
ワーカーノードの構成要素
ワーカーノードは、実際にアプリケーションを実行するコンピュータ(物理サーバーまたは仮想マシン)です。各ノードには以下のコンポーネントがインストールされています:
| コンポーネント | 役割 | 代表的なツール |
|---|---|---|
| kubelet | Podの管理と状態監視。API Serverと通信 | kubelet |
| kube-proxy | ネットワークルーティングを管理。Serviceの実現 | kube-proxy |
| Container Runtime | コンテナの実行環境を提供 | containerd, CRI-O, Docker(非推奨) |
| Pod | 1つ以上のコンテナをまとめた最小単位の実行ユニット | – |
各ノードには、Node Nameと呼ばれる一意の識別子が割り当てられます。また、ノードにはラベル(Labels)とアノテーション(Annotations)を付与することで、柔軟なリソース管理が可能になります。
クラスタの状態管理
Kubernetesは、Desired State(望ましい状態)とCurrent State(現在の状態)を常に比較し、差異があれば自動的に修正します。この仕組みにより、セルフヒーリング機能が実現されています。
例えば、以下のような状況で自動修正が行われます:
- Podがクラッシュした場合:自動的に再起動
- ノードがダウンした場合:Podを別のノードに再スケジューリング
- リソース不足が発生した場合:Podを別のノードに移動
この状態管理は、etcdと呼ばれる分散キーバリューストアに保存されます。etcdは、高可用性と一貫性を確保するために、Raftコンセンサスアルゴリズムを採用しています。
Kubernetesクラスタの構築手順:ローカル環境から本番まで
Kubernetesクラスタを構築する方法は、用途や環境によって異なります。本セクションでは、以下の3つのシナリオに分けて構築手順を解説します:
各方法の特徴を比較すると以下の通りです:
| 方法 | 用途 | メリット | デメリット | 構築時間 |
|---|---|---|---|---|
| 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 dashboard | WebベースのKubernetesダッシュボードを起動 |
| イングレスの有効化 | minikube addons enable ingress | Ingressコントローラーを有効化 |
| ストレージプロビジョナー有効化 | 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 EKS | AWS | 完全マネージド、AWSとの統合が強力、Fargateによるサーバーレスも選択可能 | $0.10(管理費) + $0.0265/時間(Fargate) | 25リージョン以上 |
| Azure Kubernetes Service (AKS) | Microsoft Azure | Azureとの深い統合、Active Directoryとの連携、無料管理費 | $0.00(管理費無料) + $0.024/時間(Linux) | 50リージョン以上 |
| Google Kubernetes Engine (GKE) | Google Cloud | Googleの技術が活かされたパフォーマンス、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の構築手順(概要):
- AWS CLIとeksctlをインストール
- eksctlを使用してクラスタを作成:
eksctl create cluster --name my-cluster --region us-west-2 - kubectlを設定:
aws eks --region us-west-2 update-kubeconfig --name my-cluster - 必要なアドオン(例: VPC CNI, CoreDNS)をインストール
Azure Kuberne…
AKSは、Microsoft Azure上でKubernetesクラスタを提供するマネージドサービスです。主な特徴は以下の通りです:




