Kubernetesエコシステムの各ツールが解決する問題を理解する
概要¶
Kubernetesエコシステムの各ツールは、Kubernetes単体では解決できなかった具体的な課題を解決するために存在する。「問題 → ツール」の形式で整理した解説。
詳細¶
kubectl の操作が煩雑 → K9s / Lens¶
1日に5つのネームスペースをまたいで kubectl get/describe/logs/exec/delete/apply を50回繰り返すのは遅く、ミスが起きやすい。
K9s または Lens を使うと、ターミナルUIでクラスタ全体を一画面に表示でき、キー1つでネームスペース切り替え、コマンド入力なしでログ追跡が可能になる。
GitとクラスタのドリフトはサイレントにProdを壊す → ArgoCD¶
kubectl apply でローカルからデプロイしていると、誰かがクラスタを直接変更したとき、Gitとの差分(ドリフト)がサイレントに発生する。本番障害まで気づかない。
ArgoCD を使うと、GitをSingle Source of Truthとして扱い、すべての変更を自動同期。手動変更があればArgoCDが上書き修正する。
HPAはキューの詰まりを見てスケールしない → KEDA¶
Kafkaコンシューマのバックログが20万件に積み上がっていても、CPUが5%なら HPAはスケールしない。ユーザーは待ち続ける。
KEDA を使うと、キューの深さ・SQSメッセージ数・Prometheusメトリクスに基づいてPodをスケールできる。CPUだけに依存しない。
HPAがPodを増やしてもノードが満杯 → Karpenter¶
HPAはPodを増やすが、ノードが満杯なら新しいPodはPending状態のまま。HPAの仕事は終わっているが、クラスタに置き場がない。
Karpenter を使うと、PendingのPodが出た瞬間に新しいノードを数秒で起動し、負荷が下がれば自動削除。使った分だけ課金される。
デフォルトではすべてのPodが相互通信できる → Network Policies¶
決済サービスがDBに、内部ツールがログサービスに到達できる状態はデフォルト。侵害されたPodの爆発半径が大きい。
Network Policies を使うと、DBへのアクセスをアプリからのトラフィックのみに限定し、それ以外は拒否できる。
20マイクロサービス間の障害連鎖の原因が見えない → Service Mesh¶
1つのサービスが遅くなるとリトライが積み上がり、他の4サービスにカスケード障害が広がる。どこから始まったかがわからない。
Istio または Linkerd(Service Mesh)を使うと、各Podにサイドカープロキシを配置し、mTLS・リトライ・サーキットブレーカー・トラフィックメトリクスをアプリのコード変更なしに提供する。
KubernetesのSecretsはBase64でetcdに平文保存 → Secrets Store CSI Driver¶
kubectl アクセス権があれば誰でもSecretsを読める。VaultやAWS Secrets Managerに移したいが、アプリを書き直したくない。
Secrets Store CSI Driver を使うと、VaultやAWS Secrets ManagerのシークレットをファイルとしてPodに直接マウントできる。KubernetesのSecretとしては保存されない。
rootコンテナやリソース制限なしのデプロイが毎回インシデント後に発覚 → Kyverno¶
開発者がrootで動くコンテナやリソース制限なしのマニフェストをshipしても、インシデントが起きるまで気づかない。
Kyverno を使うと、Admissionの段階でポリシーを強制適用できる。rootコンテナ禁止、ダイジェストなしイメージ禁止、limitsなしDeployment禁止を、クラスタに入る前に弾く。
数値も履歴もなく何が起きているかわからない → Prometheus + Grafana¶
Podの再起動・レイテンシ急増・メモリ増加が起きていても、数値も履歴もなければ「いつから始まったか」がわからない。
Prometheus + Grafana を使うと、Prometheusが全Pod・ノード・コンポーネントからメトリクスを収集し、Grafanaがダッシュボードで可視化。スパイクが始まった正確な時刻と原因サービスがわかる。
Grafanaはスパイクを見せるが、どのリクエストが原因かはわからない → Jaeger¶
ログはフラグメント、メトリクスは集計値。どのリクエストが最初にどのサービスを叩き、どこで遅くなったかは見えない。
Jaeger を使うと、1つのリクエストが触れたすべてのサービスを追跡し、ホップごとのレイテンシと正確な障害点を表示できる。
なぜ重要か / いつ使うか¶
このエコシステムは「ツールの一覧」ではなく、Kubernetesが解けなかった問題への回答集として理解するべき。
| 問題 | ツール |
|---|---|
| kubectl操作の煩雑さ | K9s / Lens |
| GitとクラスタのドリフトP | ArgoCD |
| キュー深さベースのスケール | KEDA |
| ノード不足によるPending | Karpenter |
| Pod間通信の制御 | Network Policies |
| サービス間の可観測性・mTLS | Istio / Linkerd |
| 外部シークレット管理 | Secrets Store CSI Driver |
| ポリシー強制 | Kyverno |
| メトリクス収集・可視化 | Prometheus + Grafana |
| 分散トレーシング | Jaeger |