Open5
KubernetesカスタムリソースAPIの設計・開発
こことここの読解メモ。
概要 / Operational overview
- バージョン付けられたAPIは、内部的に単一の内部モデルに変換される。
- バージョンからバージョンへの直接の変換は行わず、単一の内部モデルを通して入出力時にサポートされたバージョンのAPIに変換する。
- クライアントはバージョン付けられたAPIのみに依存するべき。
互換性について / On compatibility
- K8sでは前方・後方互換性が共にトッププライオリティ。
互換性の定義
- 正しい動作のために必須でない新機能なら追加してもOK
- 既存のセマンティクスが変更されてない
- デフォルト値と振る舞いの意味
- 既存API型、フィールド、値の解釈
- どのフィールドが必須でどれが必須でないか
- 可変フィールドが不変になったりしていない
- validだった値がinvalidになったりしていない
- 明示的にinvalidとされていた値がvalidになったりしていない
互換性を言い換えると:
- 変更前に成功したAPIコールは変更後も成功すべき
- 変更に関係しないAPIコールは変更前と同じ挙動をすべき
- その変更を用いたAPIコールはその変更を適用していないAPIサーバに投げてもエラーを起こしてはいけない
- その変更をバージョン変更によって適用やロールバックをできるようにし、それをしても情報のロスを起こしてはいけない
- 既存クライアントはその変更を知らなくても(その変更を使っている場合でも)機能しつづけられなければいけない。
- APIサーバを前バージョンへロールバックできなければいけない。その場合、その変更を使用しているAPIオブジェクトは影響を受ける。