はじめに
Kubernetesは直近3マイナーバージョンをUpstreamのサポート対象にしており、特に1.19以降では各バージョンごとに1年のパッチサポートがあります。2021年7月現在の最新版は1.21なので、1.19以降の3マイナーバージョンがサポート対象になっています。詳細については公式ドキュメントにも記述があります。
なお、GKE、EKS、AKSなどのKubernetesディストリビューションに関するサポートポリシーはUpstreamとは違い各ベンダーが責任を追っているため、各社のドキュメントをご覧いただければと思います。
KubernetesのAPI deprecationについて
Kubernetesではマイナーバージョンごとに新しい機能が追加されたり、古い機能や利用の少ない機能を非推奨化または廃止するためのポリシー、Deprecation Policyが決められています。 以下はKubernetesリソースで使われるAPI versionの例です。
Example | Track |
---|---|
v1 | GA (generally available, stable) |
v1beta1 | Beta (pre-release) |
v1alpha1 | Alpha (experimental) |
一般にこれらのバージョンは3つのフェーズ(track)に分類でき、それぞれ
- GA(安定版、広く使われていて仕様がすでに概ね固まっているもの)
- Beta(公式に導入が検討されているβ版、基本機能は動作することが保証されなおかつデフォルトで有効、機能自体も継続的にサポートされるが、Stableまたは次のβ版に変わる際にAPIスキーマが非互換になる場合がある)
- Alpha(実験的に導入が始まった段階で多くのバグを含む場合が多く、通知なしに削除される場合がある。有効にするにはfeature gateを明示的に指定する必要がある)
となっています。詳しくは公式ドキュメントに書かれています。
Beta APIの削除とは?
上述でのBeta APIは
公式に導入が検討されているβ版、基本機能は動作することが保証されなおかつデフォルトで有効、機能自体も継続的にサポートされる
とありますが、1.22で削除されるAPIは以下のとおりです。
ValidatingWebhookConfiguration
、MutatingWebhookConfiguration
のadmissionregistration.k8s.io/v1beta1CustomResourceDefinition
のapiextensions.k8s.io/v1beta1APIService
のapiregistration.k8s.io/v1beta1TokenReview
のauthentication.k8s.io/v1beta1SubjectAccessReview
、LocalSubjectAccessReview
、SelfSubjectAccessReview
のauthorization.k8s.io/v1beta1CertificateSigningRequest
のcertificates.k8s.io/v1beta1Lease
のcoordination.k8s.io/v1beta1Ingress
のextensions/v1beta1とnetworking.k8s.io/v1beta1
中には知らないリソースがあるぞ!という方もいらっしゃるかもしれませんが、少なくともIngress
やCRDなど、よく名前に挙がるリソースが対象になっていることがわかります。
Betaなのに削除されるというのが分かりづらいかもしれませんが、これらのリソースは既にKubernetesでGAになっており、betaではないv1 APIが公開されています。
Deprecation(非推奨)ではなくRemoval(削除)なので、1.22にアップデートした時点でこれらのAPIがまだBetaで使われている場合、クラスターやワークロードの動作に影響があります。CRDやIngressを利用されている場合は速やかにStableのAPIに切り替える必要があるでしょう。
参考までに、Ingressのスキーマについて簡単に比較してみます。
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /testpath pathType: Prefix backend: service: name: test port: number: 80
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: minimal-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: / spec: rules: - http: paths: - path: /testpath backend: serviceName: test servicePort: 80
移行の仕方
このように、BetaとGAのAPIでは微妙にspecの中身が異なっていることがわかりますね。 APIごとに差分はまちまちなので、上記リストに該当するリソースの利用に心当たりのある方は、Deprecation API Migration Guideに従ってAPIの移行を行ってください。
API versionが正しく更新されていれば、1.22に更新しても動作に影響はないはずです(多分)。
では、今日はこのへんで。