この記事はICTSC2025の2次予選Writeupです。

昨年に引き続き「結束baud」というチームで参加し、ネットワークとKubernetes屋さんとして問題を解いていました。

今回、回答した問題と一言コメントは以下の通りです。 解いた問題は無事に全て満点でした。

眠れない夜

問題文

概要

あなたは、Webサービスのインフラを管理するエンジニアです。

今日も仕事を終え、綺麗な夜空を眺めながら帰路についていると上司から緊急の電話がかかってきました。明日までにデプロイ予定のWebアプリケーションの担当者が急病で作業不能になってしまったとのことです。

前任者の作業メモによると、アプリケーションはKubernetes上で稼働させる予定でしたが、現在は正常に動作していません。

あなたはこのアプリケーションを稼働させ、利用可能な状態にする必要があります。

調査と復旧対応を行ってください。

前提条件

初期状態

終了状態

問題環境

deployment.yaml

デプロイ直後の状況

回答

お世話になっております。結束baudです。 Webアプリケーションが正常に稼働しない件につきまして、調査および復旧作業が完了しましたのでご報告いたします。

今回の障害は以下の2点でした。

以下の手順で解決しました。

1. deployment.yamlの修正 deployment.yamlに以下を追記してPodのリソースを明記します。

2. 調査・修正用Podの作成 通常の手順ではetcdへのアクセス権限がないため、特権を持つデバッグ用Podを作成します。なお、ValidatingAdmissionPolicy によるスケジューリング制限を回避するため、一時的に kube-system Namespaceを使用し、nodeName を直接指定してデプロイします。

以下の debug.yaml を作成します。

3. etcd上の不正データの削除 Pod内部からetcdクラスタへ接続し、etcd-ctl を導入します。導入後に、エラーの原因となっている不正なLeaseオブジェクトを削除します。

4. 動作確認 不正データ削除後に、server-02のホストに戻り kube-scheduler が自動的に正しい形式でLeaseリソースを再作成し、リーダー選出に成功したことをログで確認します。

5. デバッグ用Podの削除

6. 最終確認

また、rolloutしても正しく動作することをチェックしました。

以上の手順より、Podがスケジュールされサービスが正常に起動していることが確認できました。


The Handover of the Handover

問題文

概要