コンテンツにスキップ

K8Sデプロイ設計判断(面接質問)

原文

面接官: 「アプリケーションをKubernetesにデプロイするにはどうしますか。」

🔴 候補者A: 「Deployment、Service、Ingressを作成します。」 YAMLを書き始めます

🟢 候補者B: 「その前に、いくつか質問してもいいですか?」

面接官: 「もちろんです。」

候補者B: - 「アプリはステートフルですか、それともステートレスですか?」 - 「予想されるトラフィックは?」 - 「オートスケーリングの必要性はありますか?」 - 「ノードやゾーンをまたいだ高可用性が必要ですか?」

面接官: 「ステートレスで、高トラフィック、オートスケーリングが必要です。」

候補者B: 「素晴らしい。HPA、リソース制限、レディネスプローブを含めます…」

教訓: Kubernetesへのデプロイは簡単です。難しいのは正しくデプロイすることです。

要約

K8S面接で差がつくのは「いきなりYAMLを書き始める」vs「前提条件を聞いて適切な構成を選ぶ」。ステートフル/レス、トラフィック規模、スケーリング要件、可用性要件で必要なリソース(Deployment/StatefulSet、HPA、リソース制限、Readinessプローブ等)が変わる。要件確認が設計の第一歩。

解説

候補者Aが見落としているもの

候補者AはK8Sの基本構成(Deployment/Service/Ingress)を知っているが、なぜその構成でよいかの判断基準がない。本番でよく起きる問題:

  • ステートフルなのにDeploymentで作ってPod再起動時にデータ消失
  • リソース制限がなくノード全体が落ちる(ノイジーネイバー)
  • Readiness/Liveness プローブがなくて障害中のPodにトラフィックが流れる
  • HPAなしでトラフィック急増時にサービス停止

候補者Bが聞くべき4つの観点

観点 影響する設計
ステートフル/レス Deployment vs StatefulSet、PV/PVC有無
トラフィック規模 レプリカ数、HPA、リソース制限値
オートスケーリング要件 HPA/VPA、Cluster Autoscaler
高可用性要件 PodAntiAffinity、マルチAZ、PodDisruptionBudget

本番K8Sに必要な最低限の構成

  • HPA (Horizontal Pod Autoscaler): CPU/メモリやカスタムメトリクスに応じてPodを自動スケール
  • リソース制限: resources.requests/limits でノードの適切な配置とOOM回避
  • Readinessプローブ: 起動/トラフィック受付可能かの判定
  • Livenessプローブ: ハング検知と自動再起動
  • PodDisruptionBudget: ノード停止時の最小利用可能Pod数

→ 既存材料: K8S_マニフェストのアノテーションAWS_K8S学習

リンク