Kubernetes 1.16 の非推奨 API

Kubernetes 1.16 リリースでは、特定の API の非推奨となったバージョンは提供されなくなりました。現在の API バージョンは v1.10 以降で利用可能であり、サポートされているすべてのバージョンの Google Kubernetes Engine(GKE)で利用できます。

1.16 における変更点

非推奨 API のほとんどは、以前のベータ版 API であり、その後、ベータ版から安定版に移行されました。安定版の API は長期的な互換性の保証をしているため、非推奨のベータ版の API から置き換える必要があります。

変更されたデフォルト値

下記の表では、apps/v1beta1 から移行する場合にユーザーが定義しないパラメータのデフォルト値に対する変更点と挙動について記載します。

オブジェクト 変更点 新しい動作
DaemonSet spec.updateStrategy.type: OnDelete から RollingUpdate に変更しました。 RollingUpdate では、DaemonSet 定義を変更すると Pod が自動的に再生成されます。
Deployment spec.progressDeadlineSeconds: 2147483647 から 600 に変更しました。 Deployment が失敗と判断されるまで、「進行中」にとどまる時間を短縮します。
spec.revisionHistoryLimit: 2147483647 から 10 に変更しました。 Deployment コントローラによって削除される前に残っている ReplicaSet オブジェクトの数を制限します。
spec.strategy.rollingUpdate.maxSurge: 25% に増加しました。 ローリング アップデートが、specs.replicas で指定された目的の数の Pod に対して作成できる Pod の最大数を定義します。
spec.strategy.rollingUpdate.maxUnavailable: 25% に増加しました。 ローリング アップデートは、使用できない Pod の数がこの数を下回った場合にのみ続行されます。割合の場合は、spec.replicas で指定されます。
StatefulSet spec.updateStrategy.type: OnDelete から RollingUpdate に変更しました。 RollingUpdate では、StatefulSet 定義を変更すると Pod が自動的に再生成されます。

1.16 へのアップグレードの準備

ユーザーは API オブジェクトを削除して再生成することは必要ありません。既存のすべての API オブジェクトは、新しいバージョンの API で読み込みや更新が可能です。

しかしながら、ユーザーは Kubernetes 1.16 にアップグレードする前に、クライアントとマニフェストを移行することを推奨します。すべての GKE のバージョンで新しいバージョンの API を利用できます。

トラブルシューティング

非推奨 API へ書き込みを行う API クライアントを特定する

Google Cloud のオペレーション スイートが有効になっているクラスタでは、次のクエリを使用して、非推奨 API への書き込みを行うクライアントを特定できます。

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "apps/v1beta1" OR "apps/v1beta2")
protoPayload.request.kind!="Ingress"
NOT ("kube-system")

kubectl get ... -o yaml の実行後に非推奨のバージョンが表示される

kubectl get ... は、使用中のクラスタで extensions/v1beta1 が使用可能な場合に使用します。たとえば、次のコマンドは 1.15 クラスタ上の extensions/v1beta1 デプロイを取得します。

kubectl get deployments -o yaml

クラスタを Kubernetes 1.16 にアップグレードすると、同じコマンドで新しい API が自動的に使用されます。

API グループやバージョンは、明示的に指定できます。たとえば、apps/v1 デプロイを取得するには、次のコマンドを実行します。

kubectl get deployments.v1.apps -o yaml

リソース

詳細については、以下の OSS Kubernetes ドキュメントをご覧ください。