こんにちは!今回は、「Kubernetesって難しそう…」「kubectlコマンドがよく分からない」「Podって何?」という方に向けて記事を書きました。
「Docker Composeは使えるけど、Kubernetesは挫折した…」
「kubectlコマンドを覚えるのが大変そう」
「実際にPodを操作してみたいけど、どこから始めればいいか分からない」
そんな悩みを解決してくれるのが、高橋あおいさんの「つくって、壊して、直して学ぶ Kubernetes入門」です!
この書籍の最大の特徴は、「あえて壊しながら学ぶ」というアプローチです。普通なら避けたいトラブルを意図的に起こして、その対処法を学ぶことで、本当に実践的なスキルが身につきます。
この記事では、Kubernetes初心者の方でも安心して学習を始められるよう、kubectlコマンドやPod操作の基本から、実際のトラブル対応まで分かりやすく解説していきます!
Kubernetesとは何か?初心者が知るべき基本概念
コンテナオーケストレーションの必要性
まず、「そもそもなぜKubernetesが必要なの?」という疑問から始めましょう。
Dockerを使って開発している方なら、こんな経験はありませんか?
- 「本番環境でコンテナが落ちたら、手動で再起動するしかない…」
- 「アクセスが増えた時、コンテナを増やすのが面倒…」
- 「複数のサーバーでコンテナを管理するのが大変…」
Kubernetes(k8s)は、これらすべての問題を解決してくれるコンテナオーケストレーションプラットフォームです!
主な機能:
- 自動復旧:コンテナが落ちても自動で再起動
- 自動スケーリング:負荷に応じてコンテナ数を調整
- ロードバランシング:複数コンテナに負荷を分散
- ローリングアップデート:無停止でアプリケーション更新
Kubernetesの基本アーキテクチャ
Kubernetesの仕組みを理解するために、基本的な構成要素を見てみましょう。
クラスタ
- Kubernetesが管理する複数サーバーの集合体
- マスターノード(制御)+ ワーカーノード(実行)で構成
ノード
- クラスタを構成する1台1台のサーバー
- 物理サーバーでも仮想マシンでもOK
Pod
- Kubernetesの最小実行単位
- 1つ以上のコンテナをまとめたもの
- 通常は1Pod = 1コンテナで運用
Service
- Podへのアクセス経路を提供
- Podが増減しても、アクセス方法は変わらない
例えて言うなら…
- クラスタ = オフィスビル全体
- ノード = 各フロア
- Pod = 各部屋で働く人(コンテナ)
- Service = 受付・案内デスク
Docker Composeとの違いを理解しよう
「Docker Composeで十分じゃない?」と思う方もいるでしょう。確かにDocker Composeは便利ですが、以下のような制限があります。
Docker Compose
- ✅ 開発環境での複数コンテナ管理が簡単
- ❌ 1台のサーバーでしか動かない
- ❌ 自動復旧・自動スケールができない
- ❌ 本格的な負荷分散は難しい
Kubernetes
- ✅ 複数サーバーでの分散実行
- ✅ 自動復旧・自動スケール
- ✅ 高度な負荷分散・ネットワーク制御
- ✅ 本番運用に必要な機能が豊富
つまり、開発環境ならDocker Compose、本番運用ならKubernetesという使い分けが一般的です!
kubectlコマンドをマスターしよう
kubectlの基本的な使い方
kubectl(クーベクティーエル)は、Kubernetesクラスタを操作するためのコマンドラインツールです。
基本的な書式は以下のようになります:
kubectl [動詞] [リソース] [名前] [オプション]
例:
kubectl get pods
kubectl describe pod my-pod
kubectl delete service my-service
最初は覚えることが多く感じるかもしれませんが、よく使うコマンドは限られているので安心してください!
よく使うkubectlコマンド一覧
リソースの確認
# Pod一覧の表示
kubectl get pods
# Service一覧の表示
kubectl get services
# すべてのリソースを表示
kubectl get all
# 詳細情報の表示
kubectl describe pod [pod名]
リソースの作成・削除
# YAMLファイルからリソース作成
kubectl apply -f app.yaml
# リソースの削除
kubectl delete pod [pod名]
kubectl delete -f app.yaml
デバッグ・トラブルシューティング
# Podのログ確認
kubectl logs [pod名]
# Podの中に入る
kubectl exec -it [pod名] -- /bin/bash
# Podの状態詳細確認
kubectl describe pod [pod名]
kubectlでクラスタの状態を確認する方法
実際にクラスタの状態を確認してみましょう!
ノードの状態確認
kubectl get nodes
これで、クラスタを構成するノードの一覧と状態が分かります。
リソース使用量の確認
kubectl top nodes
kubectl top pods
CPU・メモリの使用量を確認できます(metrics-serverが必要)。
イベントの確認
kubectl get events --sort-by=.metadata.creationTimestamp
クラスタ内で何が起こっているかを時系列で確認できます。
Podの基本操作を体験してみよう
Podとは何か?基本概念の理解
Podは、Kubernetesの最小デプロイ単位です。
「コンテナじゃないの?」と思うかもしれませんが、Kubernetesではコンテナを直接操作しません。必ずPodという「入れ物」に包んで管理します。
Podの特徴:
- 1つのPodには1つ以上のコンテナが入る
- 同じPod内のコンテナは同じノードで実行される
- 同じPod内のコンテナはネットワークを共有
- Podには一意のIPアドレスが割り当てられる
なぜPodが必要?
複数のコンテナを密結合で動かしたい場合があります。例えば:
- Webアプリケーション + ログ収集サイドカー
- アプリケーション + プロキシサーバー
でも実際は、1Pod = 1コンテナで運用することがほとんどです!
Podの作成・削除・確認方法
実際にPodを作ってみましょう!
コマンドでPodを作成
kubectl run my-nginx --image=nginx --port=80
これで、nginxコンテナが動くPodが作成されます。
YAMLでPodを作成
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
kubectl apply -f pod.yaml
Podの状態確認
# Pod一覧
kubectl get pods
# 詳細情報
kubectl describe pod my-nginx
# Podの中に入る
kubectl exec -it my-nginx -- /bin/bash
Podの削除
kubectl delete pod my-nginx
Podのログ確認とデバッグ
Podが期待通り動いているか確認する方法を見てみましょう。
ログの確認
# 最新のログを表示
kubectl logs my-nginx
# リアルタイムでログを表示(-f)
kubectl logs -f my-nginx
# 過去のログを指定行数表示
kubectl logs --tail=100 my-nginx
Podの状態診断
# Pod詳細情報(エラー原因の特定に重要!)
kubectl describe pod my-nginx
# Pod内のプロセス確認
kubectl exec my-nginx -- ps aux
# Pod内のネットワーク確認
kubectl exec my-nginx -- netstat -tlnp
よくあるPodのステータス
- Running:正常に動作中
- Pending:まだ起動していない(リソース不足など)
- CrashLoopBackOff:起動しては落ちるを繰り返している
- ImagePullBackOff:イメージがダウンロードできない
「つくって、壊して、直して」で学ぶトラブル対応
意図的にPodを壊してみる
ここからが本書の真骨頂!実際にPodを壊してトラブルシューティングを体験してみましょう。
メモリ不足でPodを壊す
apiVersion: v1
kind: Pod
metadata:
name: memory-hog
spec:
containers:
- name: app
image: nginx
resources:
limits:
memory: "64Mi" # 少なすぎるメモリ制限
requests:
memory: "128Mi" # リクエストがリミットを超えている
これを適用すると、PodがOutOfMemoryエラーで落ちるはずです。
存在しないイメージでPodを壊す
kubectl run broken-pod --image=nonexistent:latest
無効な設定でPodを壊す
apiVersion: v1
kind: Pod
metadata:
name: broken-config
spec:
containers:
- name: app
image: nginx
ports:
- containerPort: "invalid" # 数値じゃなく文字列
kubectlでトラブルシューティング
壊れたPodを診断・修復してみましょう!
ステップ1:状況確認
# Pod一覧で状態確認
kubectl get pods
# 詳細情報でエラー原因を特定
kubectl describe pod broken-pod
ステップ2:ログ確認
# エラーログの確認
kubectl logs broken-pod
# 前回実行時のログ確認(Podが再起動している場合)
kubectl logs broken-pod --previous
ステップ3:イベント確認
# 関連するイベントを時系列で確認
kubectl get events --field-selector involvedObject.name=broken-pod
ステップ4:リソース使用量確認
# CPU・メモリ使用量確認
kubectl top pod broken-pod
実際の障害対応の流れ
本書では、以下のような実践的な障害対応パターンを学べます:
1. OutOfMemoryエラー
- 症状:PodがCrashLoopBackOffになる
- 原因:メモリ制限が不適切
- 対処:リソース制限の調整
2. ImagePullBackOffエラー
- 症状:Podが起動しない
- 原因:イメージが存在しない・認証エラー
- 対処:イメージ名の修正・認証情報の設定
3. ネットワーク接続エラー
- 症状:Pod間の通信ができない
- 原因:Service設定の問題
- 対処:Service・ネットワークポリシーの確認
デバッグのコツ
- kubectl describeで詳細情報を確認
- kubectl logsでアプリケーションログを確認
- kubectl get eventsでシステムイベントを確認
- kubectl execで直接Podの中を調査
Kubernetesの学習を続けるために
次に学ぶべき概念とリソース
Podとkubectlの基本をマスターしたら、次のステップに進みましょう!
レベル2:基本的なワークロード
- Deployment:Podの管理・更新を自動化
- Service:Podへの安定したアクセス経路
- ConfigMap:設定情報の外部化
- Secret:機密情報の管理
レベル3:高度な機能
- Ingress:HTTP/HTTPSアクセスの制御
- PersistentVolume:データの永続化
- Horizontal Pod Autoscaler:自動スケーリング
- NetworkPolicy:ネットワークセキュリティ
レベル4:運用・監視
- Prometheus + Grafana:メトリクス監視
- ELK Stack:ログ管理
- Helm:アプリケーション管理
- GitOps:宣言的なデプロイメント
おすすめの学習リソース
書籍で基礎を固める
Kubernetes学習の第一歩として、今回紹介した「つくって、壊して、直して学ぶ Kubernetes入門」は本当におすすめです!
特にこの書籍の良いところ:
- 豊富なマンガ・イラストで概念が分かりやすい
- 実際に手を動かしながら学べるハンズオン形式
- 「壊して学ぶ」アプローチで実践的なスキルが身につく
- トラブルシューティングが充実している
無料のハンズオン環境
- Minikube:ローカルでKubernetesクラスタを構築
- Kind:Dockerを使った軽量クラスタ
- Play with Kubernetes:ブラウザ上で試せるプレイグラウンド
公式リソース
- Kubernetes公式ドキュメント:最新情報はここで確認
- kubectl Cheat Sheet:よく使うコマンドの早見表
まとめ
お疲れさまでした!この記事では、Kubernetes入門の基本的な内容を学習しました:
✅ Kubernetesの基本概念を理解
✅ kubectlコマンドの使い方をマスター
✅ Pod操作の基本を体験
✅ トラブルシューティングの手法を学習
Kubernetesは確かに学習コストがかかる技術です。でも、一歩ずつ着実に進めば必ずマスターできます!
重要なポイント:
- まずはPodとkubectlから始める
- 実際に手を動かしながら学ぶ
- トラブルを恐れずに「壊して学ぶ」
- 分からないところは公式ドキュメントで確認
特に最初の基礎固めが重要です。「つくって、壊して、直して学ぶ Kubernetes入門」なら、図解豊富で実践的な内容で、確実にスキルアップできます。
Kubernetesの世界への第一歩として、ぜひ手に取ってみてください!
きっと「Kubernetesって面白い!」と感じられるはずです。
コメント