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 ドキュメントをご覧ください。