Container Service for Kubernetes (ACK) は、Certified Kubernetes Conformance Program に準拠しています。本トピックでは、Kubernetes 1.20 をサポートするために ACK が行った変更点を説明します。これには、アップグレード前に必要な 6 つの操作項目、5 つの非推奨機能、およびいくつかの新機能と ACK 固有の強化機能が含まれます。
コンポーネントのバージョン
| コアコンポーネント | バージョン | 注記 |
|---|---|---|
| Kubernetes | 1.20.11 | アップグレード前に以下の操作項目をご確認ください。 |
| Docker Runtime | 19.03.5 | このリリースで非推奨となりました。既存のクラスターは引き続き動作します。 |
| Containerd Runtime | 1.4.4 | なし |
| etcd | 3.4.3 | なし |
| CSI (Container Storage Interface) | 1.26 | なし |
| CoreDNS | 1.7.0 | メトリック名が更新されました。upstream プラグインが削除されました。 |
| NVIDIA Container Runtime | 3.4.1 | なし |
アップグレード前に必要な操作
ACK クラスターを Kubernetes 1.20 にアップグレードする前に、以下の各項目を確認してください。一部の項目では、ワークロードまたはクラスター構成を事前に変更する必要があります。
SAN を含むアドミッション Webhook 証明書の確認
アドミッション Webhook の自己署名サーバー証明書には、必要なサブジェクト代替名(SAN)が含まれている必要があります。アップグレード前に、ご利用のアドミッション Webhook 証明書に必要な SAN が含まれていることを確認してください。準拠した証明書構成の例については、サンプル Helm チャートをご参照ください。
selfLink の使用からの移行
変更内容: selfLink フィールドは Kubernetes 1.20 で非推奨となり、空の値を返すようになりました。
影響を受ける対象: API 応答から selfLink フィールドを読み取るアプリケーション、およびオープンソースの nfs-client-provisioner を使用しているクラスターです。
対応方法:
-
API 応答から
selfLinkを読み取るアプリケーションをすべて更新します。 -
nfs-client-provisionerを使用している場合は、selfLinkに依存しないバージョンに更新します。
詳細については、「Stop setting SelfLink in kube-apiserver」をご参照ください。
alicloud-nas-controller のアップグレード前の更新(FlexVolume クラスターのみ)
影響を受ける対象: FlexVolume と alicloud-nas-controller の両方がデプロイされているクラスターです。
対応方法: Kubernetes 1.20 にアップグレードする前に、alicloud-nas-controller のイメージを 1.14.8.17-7b898e5-aliyun 以降に更新してください。
FlexVolume は非推奨です。Container Storage Interface (CSI) に移行するには、「FlexVolume から CSI への移行」をご参照ください。
CoreDNS メトリック名の更新
CoreDNS 1.7.0 では、既存のメトリック名が変更されています。モニタリングシステムで CoreDNS メトリックを収集している場合は、アップグレード前にメトリック名を更新してください。変更内容の全リストについては、「Metric changes」をご参照ください。
upstream プラグインはサポートされなくなりました。ご利用の Corefile に upstream が指定されている場合、CoreDNS のアップグレード時に自動的に削除されます。
exec プローブのタイムアウト修正
変更内容: Kubernetes 1.20 では、kubelet が exec プローブの timeoutSeconds 設定を無視していた長年のバグが修正されました。この修正前は、exec プローブはタイムアウトせずに無期限に実行されていました。修正後は、デフォルトのタイムアウトが 1 秒になります。
影響を受ける対象: 1 秒を超えて実行される exec プローブを備えた Pod のうち、timeoutSeconds が明示的に設定されていないもの。これらのプローブは、今後 1 秒後に失敗するようになります。
対応方法: アップグレード前に、明示的な timeoutSeconds が設定されていない exec プローブについて、Pod 定義を監査してください。timeoutSeconds を適切な値に設定してください。
Ingress API バージョンの更新
extensions/v1beta1 および networking.k8s.io/v1beta1 の Ingress および IngressClasses 用 API バージョンは、Kubernetes 1.22 より後のバージョンで非推奨となります。1.22 にアップグレードする前に、networking.k8s.io/v1 に移行してください。
ACK クラスターには、デフォルトで NGINX Ingress コントローラーが含まれています。現在は networking.k8s.io/v1beta1 をサポートしています。Kubernetes 1.22 にアップグレードする前に、networking.k8s.io/v1 への移行を計画してください。
非推奨機能
| 非推奨項目 | 代替機能 | 削除されたバージョン |
|---|---|---|
| Docker Runtime | Containerd Runtime | 今後の Kubernetes リリース |
node-role.kubernetes.io/master ラベル |
node-role.kubernetes.io/control-plane |
Kubernetes 1.20 より後のバージョン |
extensions/v1beta1 / networking.k8s.io/v1beta1(Ingress 用) |
networking.k8s.io/v1 |
Kubernetes 1.22 より後のバージョン |
selfLink フィールド |
該当なし(API から削除) | Kubernetes 1.20 より後のバージョン |
| FlexVolume | CSI (Container Storage Interface) | 今後のリリース |
Docker Runtime 非推奨に関する補足: Kubernetes 1.20 では、Docker は非推奨(削除ではない)とマークされています。既存のクラスターは変更なしで引き続き動作します。Docker でビルドされたコンテナイメージは影響を受けません。この変更はコンテナランタイムにのみ適用され、イメージフォーマットには影響しません。マネージドサービスとして ACK をご利用の場合、直ちにアクションを取る必要はありません。ただし、今後のリリースで Docker サポートが終了する前に、ワーカーノードをサポート対象のコンテナランタイムに移行する必要があります。詳細については、「Dockershim Deprecation FAQ」をご参照ください。
マスターノードラベルに関する補足: ACK 専用クラスターでは、マスターノードにデフォルトで node-role.kubernetes.io/control-plane ラベルが追加されるようになりました。node-role.kubernetes.io/master ラベルは、Kubernetes 1.20 より後のバージョンで非推奨となります。
新機能
API Priority and Fairness
API Priority and Fairness(APF)はパブリックプレビューで提供され、デフォルトで有効になっています。APF を使用すると、kube-apiserver への API リクエストを制限および優先順位付けできます。詳細については、「API Priority and Fairness」をご参照ください。
EndpointSlice のデフォルト有効化
Kubernetes 1.19 以降では、kube-proxy によって EndpointSlice がデフォルトで有効になりました。EndpointSlice により、大規模クラスターのスケーラビリティが向上します。詳細については、「EndpointSlices」をご参照ください。
Immutable ConfigMaps および Secrets(パブリックプレビュー)
ConfigMap または Secret を不変(immutable)としてマークすることで、誤った変更を防止できます。また、不変リソースは kube-apiserver の負荷を軽減します。詳細については、「Immutable ConfigMaps」をご参照ください。
Windows コンテナの強化
-
Windows コンテナ向けに EndpointSlice がデフォルトで有効になりました。
-
デバイスプラグインがサポートされるようになりました。詳細については、「Device plug-ins」をご参照ください。
ACK 固有の強化機能
コントロールプレーンの改善
-
オブザーバビリティ: リクエスト操作と監視操作の両方のメトリックが収集されるようになったため、コントロールプレーンコンポーネントの動作をより詳細に把握できます。
-
安定性: kube-apiserver はクラスター起動時に etcd に対する過剰なリクエストから保護されるようになり、コールドスタート時の回復力が向上しました。
-
パフォーマンス: 新しいインデックスによりリストリクエスト処理が高速化され、読み取り負荷が高い状況での kube-apiserver の CPU 使用量が削減されました。
Alibaba Cloud Linux 2 との kube-proxy 互換性
Kubernetes 1.20.11 では、kube-proxy はカーネルバージョン 4.19.91-23 以降の Alibaba Cloud Linux 2 と互換性があります。IPVS モードが有効になっている場合、conn_reuse_mode は 0 に設定されません。背景情報については、「IPVS」をご参照ください。
仮想ノードスケジューリング(Kubernetes 1.22 以降へのアップグレード後に適用)
Kubernetes 1.22 以降にアップグレードすると、仮想ノードスケジューリングがデフォルトで有効になります。仮想ノードにスケジュールされた Pod には、以下の条件が適用されます。
-
仮想ノードのテイント
-
ノードアフィニティ
-
Pod アフィニティ/アンチアフィニティルール
-
トポロジースプレッド制約
アップグレード前のスケジューリング動作を維持するには、kube-scheduler 設定で Enable Virtual Node-based Pod Scheduling のチェックを外してください。設定手順については、「Custom parameters of kube-scheduler」をご参照ください。