# An Empirical Study on Kubernetes Operator Bugs
**論文**: An Empirical Study on Kubernetes Operator Bugs
**媒体**: ISSTA 2024
**対象**: 36 個のオープンソース Kubernetes Operator における 210 件のバグ
**URL**: https://doi.org/10.1145/3650212.3680396
> [!abstract] 概要
> 本論文は、36 個のオープンソース Kubernetes Operator から 210 件のバグを収集し、根本原因、トリガ、影響、修正、既存テスト手法での検出可能性を分類する。Operator バグの多くは Kubernetes リソース状態の観測・分析や reconciliation 処理に起因する。多くのバグは少数の操作要求、状態変化、障害で発火するが、影響の 54% はサイレント障害である。Operator の信頼性には、CRD や RBAC だけでなく、状態遷移と reconciliation の体系的テストが必要である。
## 論文情報
| 項目 | 内容 |
|---|---|
| 著者 | Qingxin Xu, Yu Gao, Jun Wei |
| 発表 | ISSTA 2024 |
| 対象 | 36 個のオープンソース Kubernetes Operator |
| 規模 | 3,049 件の候補から 210 件のバグを分析 |
| 主題 | Operator バグの分類、トリガ、影響、修正、テスト可能性 |
## 概要
Kubernetes Operator は、特定アプリケーションの運用知識をコントローラとして実装し、Custom Resource の状態を監視しながら reconciliation を行う。
このモデルは強力だが、Operator 自体がバグを持つと、管理対象アプリケーションの停止、誤構成、復旧不能、望ましくない状態を引き起こす。
本論文は、Operator バグを大規模に収集し、どのような原因で、どのような条件で、どのような影響を起こすのかを調べる。
さらに、Sieve や Acto のような既存テスト手法でどの程度検出できるかを推定する。
**Figure 1: Kubernetes Operator の制御ループ**
![[_attachments/empirical-kubernetes-operator-bugs/fig01-control-loop.png]]
(Figure 1. 現在状態と宣言された望ましい状態を観測し、差分を解析して reconciliation する Operator の基本ループを示す。)
## 問題設定
Operator は Kubernetes API と密接に結びつき、次のような性質を持つ。
- Custom Resource の spec/status を読む。
- cluster state を観測する。
- reconcile loop で差分を埋める。
- 障害、再起動、再試行、イベント順序の変化に対応する。
このため、通常のユニットテストだけでは、本番クラスタで起きる状態遷移や fault によるバグを見落としやすい。
本論文の問いは次である。
- Operator バグの根本原因は何か。
- バグはどのような操作要求、状態変化、障害で発火するか。
- 影響は明示的エラーとして表れるのか、それともサイレントに残るのか。
- 既存の Operator テスト手法でどの程度検出できるか。
## データセット
研究は 36 個のオープンソース Operator から 3,049 件の候補を集め、210 件のバグを詳細分析する。
バグは issue、pull request、commit、テスト、修正内容などから確認される。
分析は次の観点を持つ。
**Figure 3: Kubernetes における Operator パターン**
![[_attachments/empirical-kubernetes-operator-bugs/fig03-operator-pattern.png]]
(Figure 3. Custom Resource Definition、Custom Resource、Operator、Kubernetes Core の関係を示す。)
| 軸 | 内容 |
|---|---|
| Root cause | access control, CRD, state observation/analysis, reconciliation |
| Trigger | operation request, state property change, fault |
| Impact | operator outage, malfunction, explicit error, unstable state, undesired state |
| Fix | 修正ファイル数、LOC、確認・修正までの日数 |
| Detectability | Sieve / Acto で理論的に検出可能か |
## 根本原因
バグ原因は次の割合で分類される。
| 根本原因 | 割合 |
|---|---:|
| Access control | 4% |
| CRD | 9% |
| State observation / analysis | 60% |
| Reconciliation | 27% |
最も多いのは state observation / analysis である。
これは、Operator が Kubernetes や管理対象アプリケーションの状態を誤って読み取り、誤った判断をするバグである。
次に多い reconciliation は、望ましい状態へ収束させる処理自体の誤りである。
**Table 2: Operator バグの根本原因**
![[_attachments/empirical-kubernetes-operator-bugs/table02-root-causes.png]]
(Table 2. access control、CRD、state observation/analysis、reconciliation の各カテゴリとサブカテゴリ別件数を示す。)
## トリガ
論文は、バグ発火条件が比較的小さいことを示す。
ほぼすべてのバグは、3 個以下の operation request、2 個以下の state property change、2 個以下の fault で発火する。
また、86% は deterministic とされる。
つまり、複雑なランダム探索でなくても、適切な状態と操作列を与えれば再現できる可能性が高い。
重要なトリガは次である。
- 83% は特定の property update を必要とする。
- 10% は invalid operation request を含む。
- 9% は fault を必要とする。
**Figure 5: リソース操作同期の欠如によるバグ例**
![[_attachments/empirical-kubernetes-operator-bugs/fig05-resource-operation-sync.png]]
(Figure 5. CassandraDateCenter と StatefulSet の操作順序・同期不足により、削除対象 Pod に紐づく PVC が残る例を示す。)
**Figure 6/7: 入力条件と関連リソース数の分布**
![[_attachments/empirical-kubernetes-operator-bugs/fig06-07-input-conditions.png]]
(Figure 6/7. 操作要求、状態変化、fault の個数、およびバグ発現に関わる built-in resource、controller、reconciliation iteration の分布を示す。)
## 影響
影響は次のように分類される。
| 影響 | 件数 |
|---|---:|
| Operator outage | 31 |
| Malfunction | 42 |
| Explicit errors | 34 |
| Unstable state | 10 |
| Undesired state | 93 |
特に重要なのは、54% が silent failure とされる点である。
明示的なエラーやクラッシュではなく、望ましくない状態が残る。
Operator の目的は状態を収束させることなので、サイレントな非収束は本質的な障害である。
## 修正と検出可能性
バグの確認には平均 13 日、修正には平均 28 日かかる。
修正規模は平均 3 ファイル、97 LOC とされる。
これは、Operator バグが必ずしも大規模修正を必要とするわけではないが、問題の発見と確認に時間がかかることを示す。
既存手法の検出可能性では、Sieve と Acto が理論的に 116 件、全体の 55% を検出可能と推定される。
Sieve は fault 関連 20 件のうち 18 件を検出可能で、Acto は 98 件を検出可能とされる。
## 新規性
この論文は、Kubernetes Operator という比較的新しい運用自動化ソフトウェアのバグを体系的に分類している。
従来の分散システムバグ研究がストレージや協調プロトコルを中心に扱うのに対し、本研究は reconciliation ベースの制御ループに注目する。
## 考察
Operator の信頼性を上げるには、CRD schema や RBAC の静的確認だけでは不足する。
状態観測、状態分析、reconcile loop の分岐、fault 後の再試行をテストしなければならない。
実務上の示唆は次である。
- spec/status の更新パターンを体系的に生成する。
- 正常操作だけでなく invalid request を含める。
- API server、管理対象 Pod、外部サービスの fault を注入する。
- 望ましくない状態がサイレントに残るケースを oracle として検査する。
## 強み / 弱点・課題
### 強み
- 36 Operator、210 バグという大規模な実証研究である。
- 根本原因、トリガ、影響、修正、検出可能性を一貫して分類している。
- silent failure の多さを明示している。
- 既存テスト手法のカバレッジを具体的に見積もっている。
### 弱点・課題
- OSS Operator に限定され、商用 Operator や社内 Operator は含まれない。
- 検出可能性は理論的評価であり、実際のツール実行結果とは差があり得る。
- バグ候補の抽出は issue/PR/commit に依存する。
- Operator フレームワークや Kubernetes バージョンの変化により傾向が変わる可能性がある。
## 関連
- [[Kubernetesオペレータ]]
- [[分散システム障害]]
- [[@2020__NSDI__Understanding, Detecting and Localizing Partial Failures in Large System Software]]
- [[@2011__SOSP__An Empirical Study on Configuration Errors in Commercial and Open Source Systems]]
## 出典
- [[.raw/papers/empirical-kubernetes-operator-bugs.pdf]]
- [[.raw/papers/empirical-kubernetes-operator-bugs.txt]]
- [[.raw/papers/empirical-kubernetes-operator-bugs/images/images.json]]