kakudooo docs

Kubernetes APIについて

概要

component

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を使用してオブジェクトの修正やアクセスを継続することが可能です。

API Groups

REST形式のパス、manifestファイルのapiVersionフィールドとして指定される。

APIのVersioning

以下の3レベルのバージョンが定義されている。

基準について詳細は、以下を参照

https://github.com/kubernetes/community/blob/master/contributors/devel/sig-architecture/api_changes.md#alpha-beta-and-stable-versions

APIの変更にあたって

上記のVersioningの設計により既存クライアントとの互換性を一定期間維持することが可能であり、また、Kubernetesプロジェクトとしてもこれを推奨している。

APIの非推奨化ポリシーが存在する。

例えば、Beta版のAPIからStable版のAPIへ移行することになったとする。その場合、Beta版のAPIに対して非推奨期間を設け、非推奨期間中は両方のversionをアクセス可能にする必要がある。

については、新旧のversionで互換性を保つ必要のある処理が存在(helm applyなど)すると問題を引き起こすことがあるので注意する。

Plutoを導入しておくと、apiVersionについて現在指定しているversionがDEPRECATEDREMOVEDかを教えてくれるみたいなので活用するのもあり。

参考