はじめに
Kubernetesを触り始めたばかりの頃、「Pod」「Service」「Deployment」など、たくさんの概念があって混乱しました...。今回は、そんな基本概念を整理して、実際の運用で必要な知識をまとめてみました。
Kubernetesとは
Kubernetes(K8s)は、コンテナオーケストレーションツールです。複数のコンテナを効率的に管理・運用するためのプラットフォームを提供します。
主な機能
- 自動スケーリング: 負荷に応じてPod数を自動調整
- 自己修復: 障害が発生したPodを自動的に再起動
- ロードバランシング: トラフィックを複数のPodに分散
- 設定管理: 設定情報の一元管理
- ストレージ管理: 永続化ストレージの管理
Kubernetesアーキテクチャ概要
基本概念
1. Pod
Podは、Kubernetesの最小デプロイメント単位です。1つ以上のコンテナを含むことができます。
特徴:
- 同じPod内のコンテナは同じIPアドレスを共有
- 同じノード上で実行される
- 一時的な存在(再起動時にIPが変わる)
2. Service
Serviceは、Podへの安定したアクセスを提供します。PodのIPアドレスが変動しても、Serviceを通じてアクセスできます。
Service Types:
- ClusterIP: クラスター内部からのアクセス
- NodePort: ノードの特定ポート経由でのアクセス
- LoadBalancer: クラウドプロバイダーのロードバランサーを使用
3. Deployment
Deploymentは、Podの管理と更新を担当します。レプリカ数の管理やローリングアップデートを自動化します。
機能:
- レプリカ数の管理
- ローリングアップデート
- ロールバック機能
- ヘルスチェック
主要リソースの関係図
よく使うコマンド
基本操作
# クラスター情報の確認
kubectl cluster-info
# ノード一覧
kubectl get nodes
# Pod一覧
kubectl get pods
# 全リソース一覧
kubectl get all
デプロイメント操作
# デプロイメント作成
kubectl create deployment nginx --image=nginx
# デプロイメント一覧
kubectl get deployments
# デプロイメント詳細
kubectl describe deployment nginx
# スケールアウト
kubectl scale deployment nginx --replicas=3
サービス操作
# サービス作成
kubectl expose deployment nginx --port=80 --type=NodePort
# サービス一覧
kubectl get services
# サービス詳細
kubectl describe service nginx
実践的な例
簡単なWebアプリケーションのデプロイ
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: nginx:latest
ports:
- containerPort: 80
# service.yaml
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
selector:
app: web-app
ports:
- port: 80
targetPort: 80
type: LoadBalancer
デプロイ手順
# デプロイメント作成
kubectl apply -f deployment.yaml
# サービス作成
kubectl apply -f service.yaml
# 状態確認
kubectl get pods
kubectl get services
トラブルシューティング
よくある問題と解決方法
Podが起動しない場合:
# Podの詳細確認
kubectl describe pod <pod-name>
# ログ確認
kubectl logs <pod-name>
# イベント確認
kubectl get events
Serviceにアクセスできない場合:
# Serviceの詳細確認
kubectl describe service <service-name>
# Endpoint確認
kubectl get endpoints
# Podのラベル確認
kubectl get pods --show-labels
まとめ
Kubernetesの基本概念を整理してみました。最初は複雑に感じますが、以下の順序で理解していくと良いと思います。
- Pod: 最小単位の理解
- Service: アクセス方法の理解
- Deployment: 管理方法の理解
- その他のリソース: 必要に応じて学習
実際の運用では、まずは基本的なDeploymentとServiceから始めて、徐々に他のリソースを活用していくのが現実的でしょうか。
次回以降で、引き続き整理を進めつつ、Kubernetes運用で困ったことや、良いTipsを共有していきます。