シニアDevOpsエンジニア面接質問:本番システム編

Milad Bonakdar
著者
Kubernetes、Terraform State、GitOps、セキュリティ、可観測性、インシデント対応、本番運用の判断軸を実践的に確認できます。
シニア DevOps 面接で見られること
シニア DevOps 面接では、ツール名を知っているかよりも、本番システムを運用できるかが問われます。Kubernetes 障害、Terraform State の安全性、GitOps のロールアウト、クラウドの耐障害性、セキュリティ統制、可観測性、インシデント対応について、シナリオ形式で聞かれることが多いです。
このガイドでは、何を最初に確認するか、どのリスクを下げるか、修正をどう検証するか、そして engineering・security・product にどのようにトレードオフを説明するかを練習できます。
高度な Kubernetes
1. Kubernetes のアーキテクチャと主要コンポーネントの役割について説明してください。
回答: Kubernetes は、コントロールプレーンとワーカーノードで構成されるアーキテクチャを採用しています。シニアらしい回答では、各コンポーネントと、望ましい状態がシステム内でどのように反映されるかを説明します。
コントロールプレーンコンポーネント:
- API Server: Kubernetes コントロールプレーンのフロントエンドで、すべての REST リクエストを処理します。
- etcd: クラスタ状態のための分散キーバリューストアです。
- Scheduler: リソース要件に基づいて Pod をノードに割り当てます。
- Controller Manager: コントローラプロセス(レプリケーション、エンドポイントなど)を実行します。
- Cloud Controller Manager: クラウドプロバイダーの API と統合します。
ノードコンポーネント:
- kubelet: コンテナが Pod で実行されていることを保証するエージェントです。
- kube-proxy: Pod 通信のためのネットワークルールを維持します。
- Container Runtime: コンテナを実行します(Docker、containerd、CRI-O)。
仕組み:
- ユーザーは kubectl 経由でデプロイメントを送信します。
- API Server が検証し、etcd に保存します。
- Scheduler が Pod をノードに割り当てます。
- ノード上の kubelet がコンテナを作成します。
- kube-proxy がネットワークを構成します。
頻度: 非常に多い
難易度: 難しい
2. CrashLoopBackOff 状態の Pod のトラブルシューティング方法を教えてください。
回答: 体系的なデバッグアプローチ:
一般的な原因:
- アプリケーションが起動時にクラッシュする
- 環境変数の欠落
- 正しくない活性プローブの構成
- リソース不足 (OOMKilled)
- イメージのプルエラー
- 依存関係の欠落
修正例:
頻度: 非常に多い
難易度: 普通
3. Kubernetes ネットワーク(Service、Ingress、Network Policy)について説明してください。
回答: Kubernetes ネットワークのレイヤー:
Service: Service 公開の種類:
Ingress: HTTP/HTTPS ルーティング:
Network Policy: Pod 間の通信を制御します。
頻度: 非常に多い
難易度: 難しい
4. Kubernetes での自動スケーリングの実装方法を説明してください。
回答: 複数の自動スケーリング戦略:
Horizontal Pod Autoscaler (HPA):
Vertical Pod Autoscaler (VPA):
Cluster Autoscaler: 保留中の Pod に基づいて、クラスタサイズを自動的に調整します。
頻度: 多い
難易度: 普通
高度な Terraform
5. Terraform の状態管理とベストプラクティスについて説明してください。
回答: Terraform の状態は、インフラストラクチャを追跡し、運用に不可欠です。
リモート状態の構成:
状態ロック:
ベストプラクティス:
1. 状態ファイルを Git にコミットしない
2. 環境にワークスペースを使用する
3. 既存のリソースをインポートする
4. 状態操作(慎重に使用)
5. 大幅な変更の前に状態をバックアップする
頻度: 非常に多い
難易度: 難しい
6. 大規模プロジェクト向けに Terraform コードをどのように構成しますか?
回答: 保守性のためのモジュール構造:
ディレクトリ構造:
モジュールの例:
モジュールの使用:
頻度: 多い
難易度: 難しい
クラウドアーキテクチャ
7. AWS で高可用性マルチリージョンアーキテクチャを設計してください。
回答: 高可用性のためのマルチリージョンアーキテクチャ:
主要コンポーネント:
1. DNS とトラフィック管理:
2. データベースレプリケーション:
3. データレプリケーション:
設計原則:
- アクティブ-アクティブまたはアクティブ-パッシブ構成
- ヘルスチェックによる自動フェイルオーバー
- 最小限の遅延でのデータレプリケーション
- リージョン間の一貫したデプロイメント
- 両方のリージョンの監視とアラート
頻度: 多い
難易度: 難しい
GitOps と CI/CD
8. GitOps と、ArgoCD での実装方法について説明してください。
回答: GitOps は、Git を宣言型のインフラストラクチャおよびアプリケーションの信頼できる唯一の情報源として使用します。
原則:
- Git での宣言的な構成
- 自動同期
- すべての変更のバージョン管理
- 継続的な調整
ArgoCD の実装:
ディレクトリ構造:
Kustomization:
利点:
- 監査証跡としての Git
- 簡単なロールバック (git revert)
- 宣言的な目的の状態
- 自動ドリフト検出
- マルチクラスタ管理
頻度: 多い
難易度: 普通
セキュリティとコンプライアンス
9. Kubernetes でセキュリティのベストプラクティスをどのように実装しますか?
回答: 多層防御セキュリティアプローチ:
1. Pod Security Standards:
2. RBAC (ロールベースアクセス制御):
3. Network Policy:
4. シークレット管理:
5. Security Context:
6. イメージスキャン:
頻度: 非常に多い
難易度: 難しい
可観測性と SRE
10. 包括的な可観測性スタックを設計してください。
回答: 可観測性の 3 つの柱:メトリクス、ログ、トレース
アーキテクチャ:
1. メトリクス (Prometheus + Grafana):
2. ログ (Loki):
3. トレーシング (Jaeger):
4. アラートルール:
5. SLO 監視:
頻度: 多い
難易度: 難しい
ディザスタリカバリ
11. Kubernetes クラスタのディザスタリカバリをどのように実装しますか?
回答: 包括的な DR 戦略:
1. バックアップ戦略:
2. etcd バックアップ:
3. 復元手順:
4. マルチリージョンフェイルオーバー:
5. RTO/RPO ターゲット:
- RTO (目標復旧時間): 1 時間未満
- RPO (目標復旧時点): 15 分未満
- 定期的な DR 訓練 (毎月)
- 文書化されたランブック
- 可能な場合は自動フェイルオーバー
頻度: 多い
難易度: 難しい
サービスメッシュ
12. サービスメッシュアーキテクチャと、いつ使用するかを説明してください。
回答: サービスメッシュは、サービス間の通信のためのインフラストラクチャレイヤーを提供します。
コアコンポーネント:
Istio の実装:
使うべき場面:
- Microservices 間の通信が複雑な場合
- mTLS、認可、トラフィック制御を統一したい場合
- Canary release や traffic splitting を安全に行いたい場合
- Service-to-service の可観測性を揃えたい場合
注意点: Service mesh は複雑性、レイテンシ、運用負荷を増やします。シニア面接では、そのコストを上回る価値がなぜあるのかを具体的に説明しましょう。
まとめ
ツールの定義だけを暗記するのではなく、本番障害をどう切り分け、どのリスクを優先し、修正をどう検証し、恒久対応につなげるかまで話せるように準備しましょう。


