Kubernetesの面接は、用語(pod、deployment、service)から運用(podがクラッシュしたときに何が起きるか、スタックしたロールアウトをどうデバッグするか)、そして設計(アプリを安全に運用する方法)へと進みます。面接官はコマンドと症状を好むので、実際に何を入力し、何が表示されると期待するかを言えるように練習しましょう。
以下はトピック別に整理した26問と回答です。例は、可能な限りご自身のクラスタでの経験に置き換えてください。
アーキテクチャとオブジェクト
1. Kubernetesとは何ですか?
マシンのクラスタ全体でコンテナを実行・管理するためのオープンソースシステムです。サービスのコピーを3つ、といった望ましい状態を宣言すると、Kubernetesがそれに一致するよう動き続けます。
2. クラスタの主なコンポーネントは何ですか?
コントロールプレーンには、APIサーバー(玄関口)、etcd(データストア)、スケジューラ(各podをどのノードに配置するかを選ぶ)、コントローラマネージャ(制御ループを実行する)があります。各ワーカーノードは、kubelet(podを実行する)、コンテナランタイム、kube-proxy(サービスのネットワーキングを処理する)を実行します。
3. podとは何ですか?
最小のデプロイ単位です。ネットワーク名前空間とストレージを共有する1つ以上のコンテナを保持します。ほとんどのpodはメインコンテナを1つ持ち、追加のコンテナはサイドカーまたはinitコンテナです。
4. Deployment、ReplicaSet、StatefulSetの違いは何ですか?
ReplicaSetは、同一のpodを一定数稼働させ続けます。DeploymentはReplicaSetを管理し、ローリングアップデートとロールバックを提供します。StatefulSetはステートフルなアプリ向けで、podに安定した名前と安定したストレージが与えられ、起動と停止が順序付けられます。
5. DaemonSetとは? Jobは? CronJobは?
DaemonSetは、ログ収集エージェントなどのエージェント用に、ノードごとに1つのpodを実行します。Jobはタスクを完了まで実行します。CronJobはスケジュールに従ってJobを実行します。
6. ラベル、セレクタ、アノテーションとは何ですか?
ラベルはオブジェクトに付けるキーと値のペアで、セレクタはラベルによってオブジェクトを選択します。Serviceはこの方法でpodを見つけ、Deploymentは自身のReplicaSetを見つけます。アノテーションもキーと値のデータを保持しますが、ツールが使用する識別目的ではないメタデータのためのものです。
7. namespaceとは何ですか?
通常はチームや環境ごとに、クラスタを仮想的なグループに分割する方法です。namespaceは名前のスコープを定め、namespaceごとにリソースクォータとアクセスルールを適用できます。それ自体は強固なセキュリティ境界ではありません。
ネットワーキング
8. Serviceの種類は何ですか?
| 種類 | 機能 |
|---|---|
| ClusterIP | 安定した内部IPで、クラスタ内からのみ到達可能(デフォルト) |
| NodePort | すべてのノードでポートを開く |
| LoadBalancer | クラウドプロバイダ経由で外部ロードバランサを作成する |
| ExternalName | サービスをDNS名にマッピングする |
9. Ingressとは何ですか?
ホストとパスに基づいて外部のHTTPおよびHTTPSトラフィックをサービスにルーティングするオブジェクトで、実際の処理はingress controllerが行います。より新しいGateway APIは、より表現力の高い後継です。
10. podはお互いをどうやって見つけますか?
ServiceとクラスタDNSを通じてです。namespace shop にある api という名前のサービスは、api.shop.svc.cluster.local として、あるいは同じnamespace内からなら単に api として到達できます。
11. NetworkPolicyとは何ですか?
どのpodがどこと通信できるかを制御するルールセットです。デフォルトではすべてのpodが互いに到達できます。ポリシー(およびそれを強制するネットワークプラグイン)を使えば、トラフィックを制限できます。たとえば、APIのpodだけがデータベースに到達できるようにできます。
設定とストレージ
12. ConfigMapとSecretの違いは何ですか?
どちらも、環境変数またはファイルとして注入される設定を保持します。Secretは機密データ向けですが、デフォルトではbase64でエンコードされているだけで、暗号化はされていません。保存時の暗号化を有効にし、RBACでアクセスを制限し、外部のシークレットマネージャの利用も検討しましょう。
13. PersistentVolumeとPersistentVolumeClaimとは何ですか?
PersistentVolumeはクラスタ内のストレージの一片です。PersistentVolumeClaimはpodによるストレージの要求です。StorageClassを使うと、Kubernetesがボリュームを自動的にプロビジョニングできます。通常のコンテナファイルシステム内のデータは、podが置き換わると消えてしまいます。
14. requestsとlimitsとは何ですか?
requestsはスケジューラがコンテナのために確保するリソースです。limitsはコンテナが使用できる上限です。メモリのlimitを超えるとコンテナは強制終了され(OOMKilled)、CPUのlimitを超えるとスロットリングが発生します。
信頼性とアップデート
15. ライブネス、レディネス、スタートアッププローブとは何ですか?
ライブネスはコンテナを再起動すべきかどうかを確認します。レディネスはトラフィックを受け取るべきかどうかを確認します。スタートアップは、起動の遅いアプリに他のプローブが始まるまでの時間を与えます。よくある間違いは、データベースに依存するライブネスプローブで、データベースがダウンするとすべての Pod が再起動してしまいます。
16. ローリングアップデートはどのように機能しますか?
Deployment は新しい Pod を作成し、古いものを徐々に削除します。これは maxSurge と maxUnavailable によって制御されます。レディネスプローブが、新しい Pod がいつ準備完了とみなされるかを決めます。問題が起きた場合は、kubectl rollout undo で前のリビジョンに戻せます。
17. オートスケーリングはどのように機能しますか?
Horizontal Pod Autoscaler は CPU などのメトリクスに基づいて Pod の数を変更します。Vertical Pod Autoscaler はリクエストとリミットを調整します。クラスタオートスケーラーは、Pod をスケジュールできないときやノードが十分に活用されていないときにノードを追加または削除します。
18. ノードのメンテナンス中もアプリの可用性を保つにはどうすればよいですか?
複数のレプリカを実行し、それらをノードやゾーンに分散させ、PodDisruptionBudget を設定して自発的な退避でも最低限の数が稼働し続けるようにします。ノードのドレインは kubectl drain で行います。
トラブルシューティング
19. Pod が CrashLoopBackOff になっています。どうしますか?
コンテナが起動しては繰り返し終了している状態です。kubectl logs <pod> --previous を実行して失敗した理由を確認し、kubectl describe pod でイベント、終了コード、プローブの失敗を確認し、設定、不足しているシークレット、リソースリミットをチェックします。
20. Pod が Pending のまま止まっています。何を確認しますか?
kubectl describe pod を実行すると、スケジューラーが配置できなかった理由が表示されます。どのノードにも十分な CPU やメモリがない、ノードセレクターやテイントが一致していない、またはボリュームクレームがバインドされていない、といった理由が考えられます。
21. Pod が OOMKilled になりました。どうしますか?
メモリリミットを超えたということです。使用量の推移を確認し、リークがあるのか、単にリミットが低すぎるのかを突き止め、リミットを引き上げるかアプリを修正します。スケジューリングが現実的になるよう、リクエストは実際の使用量に近い値に設定します。
22. サービスに到達できません。どうデバッグしますか?
- Pod が実行中で準備完了であることを確認する。
- サービスのセレクターが Pod のラベルと一致しているか確認する(kubectl get endpoints)。
- 一時的な Pod を使ってクラスタ内からテストする。
- ポート、ターゲットポート、コンテナのリッスンアドレスを確認する。
- ネットワークポリシーを確認し、次に Ingress と DNS を確認する。
セキュリティと運用
23. RBAC はどのように機能しますか?
Role はリソースに対する権限を定義し、Binding はそれをユーザー、グループ、またはサービスアカウントに付与します。可能な場合は名前空間スコープの Role を使い、cluster-admin は避け、各ワークロードに必要最小限の権限だけを持つ専用のサービスアカウントを割り当てます。
24. クラスタをどのように保護しますか?
最小権限の RBAC を使い、API アクセスを制限し、イメージをスキャンし、可能な場合は読み取り専用ファイルシステムで非 root としてコンテナを実行し、ネットワークポリシーを適用し、シークレットを暗号化し、Kubernetes を最新の状態に保ち、アクティビティを監査します。
25. Helm とは何ですか?
Kubernetes のパッケージマネージャーです。チャートはテンプレート化されたマニフェストのセットで、リリースは独自の values を持つインストール済みのインスタンスです。環境をまたいでデプロイを再利用し、バージョン管理するのに役立ちます。Kustomize はプレーンなマニフェストにパッチを当てるもう一つのアプローチです。
26. Web アプリを Kubernetes に安全にデプロイするにはどうしますか?
「ゾーンをまたいで分散した少なくとも 3 つのレプリカを持つ Deployment、リクエストとリミットの設定、レディネスプローブとライブネスプローブ、TLS 付きの Service と Ingress、ConfigMap と Secret に入れた設定、HPA、そして PodDisruptionBudget を用意します。ローリングアップデートと簡単なロールバックを備えたパイプラインを通じてデプロイし、ロールアウト中はエラー率とレイテンシーを監視します。」
覚えておくべきコマンド
| タスク | コマンド |
|---|---|
| Pod の一覧表示 | kubectl get pods -n <namespace> |
| Pod の詳細とイベント | kubectl describe pod <pod> |
| ログ | kubectl logs <pod> -c <container>(クラッシュ後は --previous を追加) |
| Pod 内でシェル | kubectl exec -it <pod> -- sh |
| ロールバック | kubectl rollout undo deployment/<name> |
| スケール | kubectl scale deployment/<name> --replicas=5 |
| マニフェストの適用 | kubectl apply -f file.yaml |
準備の方法
kind や minikube でローカルに小さなクラスタを立ち上げ、意図的に壊してみましょう。不正なイメージタグ、失敗するプローブ、低すぎるメモリリミットなどです。describe と logs の出力を読む練習をしましょう。実際に対応したインシデントを一つ用意し、その後何を変えたかを準備しておきましょう。設計の練習にはシステムデザインガイドを、クラウドのトピックには AWS 面接ガイドをご覧ください。
デバッグの手順は声に出して説明しましょう。面接官は確認する順序を重視します。文字起こし付きの模擬面接を行うと、どのステップを飛ばしたかがわかります。ライブ面接では、AI ツールに関する雇用主のルールに従ってください。
YesToTheOfferでKubernetes面接の回答を練習
模擬技術面接を実施し、デバッグ手順を話し、後でトランスクリプトを確認しましょう。30分無料、サブスクリプション不要。



