Control PlaneにあるAPIサーバーに対してHTTPリクエストすることで、Kubernetes内のオブジェクト(例: Pod,Namespace,ConfigMap,Event,…)の状態を操作できるようにする機能。
kubectl
コマンドなどREST APIをラップしたツールから操作することが一般的。(例: kubectl apply
)
操作対象となるAPIリソースの表現の仕方として、API Groupsというものが用意されている。 同じリソースを複数のバージョンで操作することが可能となっている
例えば、同じリソースでv1とv1beta1の2つのバージョンが有ることを考えてみます。 v1beta1バージョンのAPIを利用しオブジェクトを最初に作成したとして、v1beta1バージョンが非推奨となり削除されるまで、v1beta1もしくはv1どちらのAPIバージョンを利用してもオブジェクトのread、update、deleteができます。 その時点では、v1 APIを使用してオブジェクトの修正やアクセスを継続することが可能です。
REST形式のパス、manifestファイルのapiVersionフィールドとして指定される。
/api/v1
に存在する/apis/$GROUP_NAME/$VERSION
の形式apiVersion: $GROUP_NAME/$VERSION
の形式で指定する
apiVersion: batch/v1
以下の3レベルのバージョンが定義されている。
v1alpha1
v2beta3
v1
基準について詳細は、以下を参照
上記のVersioningの設計により既存クライアントとの互換性を一定期間維持することが可能であり、また、Kubernetesプロジェクトとしてもこれを推奨している。
→ APIの非推奨化ポリシーが存在する。
例えば、Beta版のAPIからStable版のAPIへ移行することになったとする。その場合、Beta版のAPIに対して非推奨期間を設け、非推奨期間中は両方のversionをアクセス可能にする必要がある。
については、新旧のversionで互換性を保つ必要のある処理が存在(helm applyなど)すると問題を引き起こすことがあるので注意する。
→ Plutoを導入しておくと、apiVersionについて現在指定しているversionがDEPRECATED
かREMOVED
かを教えてくれるみたいなので活用するのもあり。