Open5

KubernetesカスタムリソースAPIの設計・開発

佐藤 匡剛佐藤 匡剛

概要 / Operational overview

  • バージョン付けられたAPIは、内部的に単一の内部モデルに変換される。
  • バージョンからバージョンへの直接の変換は行わず、単一の内部モデルを通して入出力時にサポートされたバージョンのAPIに変換する。
  • クライアントはバージョン付けられたAPIのみに依存するべき。
佐藤 匡剛佐藤 匡剛

互換性について / On compatibility

  • K8sでは前方・後方互換性が共にトッププライオリティ。

互換性の定義

  • 正しい動作のために必須でない新機能なら追加してもOK
  • 既存のセマンティクスが変更されてない
    • デフォルト値と振る舞いの意味
    • 既存API型、フィールド、値の解釈
    • どのフィールドが必須でどれが必須でないか
    • 可変フィールドが不変になったりしていない
    • validだった値がinvalidになったりしていない
    • 明示的にinvalidとされていた値がvalidになったりしていない
佐藤 匡剛佐藤 匡剛

互換性を言い換えると:

  • 変更前に成功したAPIコールは変更後も成功すべき
  • 変更に関係しないAPIコールは変更前と同じ挙動をすべき
  • その変更を用いたAPIコールはその変更を適用していないAPIサーバに投げてもエラーを起こしてはいけない
  • その変更をバージョン変更によって適用やロールバックをできるようにし、それをしても情報のロスを起こしてはいけない
  • 既存クライアントはその変更を知らなくても(その変更を使っている場合でも)機能しつづけられなければいけない。
  • APIサーバを前バージョンへロールバックできなければいけない。その場合、その変更を使用しているAPIオブジェクトは影響を受ける。