inductor's blog

nothing but self note :)

Kubernetes 1.22で削除されるBeta APIが結構多いのでまとめてみる

はじめに

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は以下のとおりです。

  • ValidatingWebhookConfigurationMutatingWebhookConfigurationadmissionregistration.k8s.io/v1beta1
  • CustomResourceDefinitionapiextensions.k8s.io/v1beta1
  • APIServiceapiregistration.k8s.io/v1beta1
  • TokenReviewauthentication.k8s.io/v1beta1
  • SubjectAccessReviewLocalSubjectAccessReviewSelfSubjectAccessReviewauthorization.k8s.io/v1beta1
  • CertificateSigningRequestcertificates.k8s.io/v1beta1
  • Leasecoordination.k8s.io/v1beta1
  • Ingressextensions/v1beta1networking.k8s.io/v1beta1

kubernetes.io

中には知らないリソースがあるぞ!という方もいらっしゃるかもしれませんが、少なくとも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に更新しても動作に影響はないはずです(多分)。

では、今日はこのへんで。