コンテナサービス Kubernetes 版 (ACK) は、Certified Kubernetes Conformance Program の条件を厳守しています。このトピックでは、Kubernetes 1.22 をサポートするために ACK が行った変更について説明します。
バージョンのアップグレード
Kubernetes 1.22 をサポートするために、コンポーネントが ACK によって更新および最適化されています。
主要コンポーネント | バージョン | 説明 |
Kubernetes | 1.22.15-aliyun.1 |
|
etcd | 3.5.1 | なし |
CoreDNS | v1.9.3.6-32932850-aliyun | この更新はワークロードに影響しません。次の機能が提供されます。
|
CRI |
| なし |
containerd 1.4.8 | なし | |
CSI | 1.26 | なし |
CNI | Flannel 0.15.1.4-e02c8f12-aliyun | この更新はワークロードに影響しません。次の機能が提供されます。
|
Terway | なし | |
NVIDIA Container Runtime | 3.7.0 | なし |
Ingress Controller | 1.1.0-aliyun.1 | この更新により、ワークロードが一時的に中断され、ワークロード構成との互換性の問題が発生する可能性があります。Kubernetes 1.22 に更新する前に、コンポーネント更新の影響を評価することをお勧めします。 |
バージョンの詳細
リソースの変更と非推奨化
[リソースの変更] MutatingWebhookConfiguration リソースと ValidatingWebhookConfiguration リソースの
admissionregisration.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用してアドミッション Webhook 構成とミューテーション Webhook 構成を作成することはできなくなり、アドミッション Webhook とミューテーション Webhook の使用に悪影響を及ぼします。admissionregisration.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] CustomResourceDefinition (CRD) リソースの
apiextensions.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して CRD を作成することはできなくなり、CRD を使用するコントローラーの調整に悪影響を及ぼします。apiextensions.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] APIService リソースの
apiregistration.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して管理されている拡張 Kubernetes API は使用できません。apiregistration.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] TokenReview リソースの
authentication.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して作成された TokenReview は認証に使用できなくなり、アプリケーションに悪影響を及ぼします。authentication.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] SubjectAccessReview リソースの
authorization.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して作成された SubjectAccessReview は認可に使用できなくなり、アプリケーションに悪影響を及ぼします。authorization.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] CertificateSigningRequest (CSR) リソースの
certificates.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して作成された CSR は、証明書の署名と発行の申請に使用できません。certificates.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] Lease リソースの
coordination.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して作成されたリースはリーダー選出に使用できなくなり、アプリケーションに悪影響を及ぼします。coordination.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] Ingress リソースと IngressClass リソースの
networking.k8s.io/v1beta1API バージョンとextensions/v1beta1API バージョンは廃止されました。これらの API バージョンを使用して作成されたイングレスは、サービスの公開に使用できません。networking.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] ClusterRole リソース、ClusterRoleBinding リソース、Role リソース、および RoleBinding リソースの
rbac.authorization.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して管理されているロールベースのアクセス制御 (RBAC) リソースは、アプリケーションとクラスターを管理するための権限の付与に使用できません。rbac.authorization.k8s.io/v1API バージョンを代わりに使用できます。[リソースの変更] CSIDriver リソース、CSINode リソース、StorageClass リソース、および VolumeAttachment リソースの
storage.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して Container Storage Interface (CSI) プラグインに関連するリソースを管理すると、CSI プラグインが正常に実行されなくなり、クラスター内のストレージサービスに悪影響を及ぼす可能性があります。storage.k8s.io/v1を代わりに使用できます。[リソースの変更] PriorityClass リソースの
scheduling.k8s.io/v1beta1API バージョンは廃止されました。この API バージョンを使用して管理されている PriorityClass は、ポッドの優先順位の設定に使用できません。scheduling.k8s.io/v1バージョンを代わりに使用できます。[リソースの非推奨化] Dockershim は非推奨となり、Kubernetes 1.24 で削除されます。詳細については、「EP-2221」および「cri-containerd」をご参照ください。
Kubernetes 1.24 に更新する前に、次の手順を実行して、Docker コンテナーで実行されているワークロードを、他のコンテナーランタイムで実行されているコンテナーに移行することをお勧めします。
ノードの仕様を決定し、既存の Docker コンテナーの数に基づいて、Docker 以外のコンテナーランタイムを実行するノードの数を計算します。
オフピーク時にクラスターに新しいノードを追加します。
Docker ランタイムを実行しているノードを 1 つずつドレインします。ノードがドレインされるたびに、ノード上のアプリケーションポッドが新しいノードに正常に移行されたことを確認してから、別のノードをドレインします。
Docker ランタイムを実行しているすべてのノードがドレインされ、ノード上でポッドが実行されなくなったら、ノードを削除します。
[リソースの非推奨化] Kubernetes 1.22.10 以降のバージョンでは、kube-proxy は NodePort サービスのポートをリッスンしなくなりました。この更新後、NodePort サービスのポート範囲 (API サーバーの ServiceNodePortRange パラメーターで指定) が
net.ipv4.ip_local_port_rangeカーネルパラメーターで指定されたポート範囲と競合する場合、TCP 接続が断続的に失敗することがあります。これにより、ヘルスチェックが失敗し、ノードでサービス例外が発生する可能性があります。クラスターの Kubernetes バージョンを 1.22.10 以降に更新する前に、クラスター内のすべての NodePort サービスのポート範囲がnet.ipv4.ip_local_port_rangeカーネルパラメーターで指定されたポート範囲と競合していないことを確認してください。NodePort サービスのポート範囲の設定方法の詳細については、「適切なノードポート範囲を設定するにはどうすればよいですか。」または「Kubernetes コミュニティ PR」をご参照ください。
機能強化
デフォルトでは、Kubernetes 1.21 以降のバージョンで ImmutableEphemeralVolumes 機能が有効になっています。この機能を使用して、ConfigMap とシークレットを不変として設定できます。これにより、クラスターの Kubernetes API サーバーの負荷が大幅に軽減されます。詳細については、「シークレット」および「ConfigMap」をご参照ください。
デフォルトでは、Kubernetes 1.21 以降のバージョンで IPv4/IPv6 デュアルスタック (IPv6DualStack) 機能が有効になっています。IPv4/IPv6 デュアルスタックを使用するには、クラスターの作成時に適切な IPv4 CIDR ブロックと IPv6 CIDR ブロックを指定し、IPv4/IPv6 デュアルスタックをサポートするコンテナーネットワークインターフェイス (CNI) プラグインをインストールする必要があります。詳細については、「IPv4/IPv6 デュアルスタック」をご参照ください。
デフォルトでは、Kubernetes 1.21 以降のバージョンで GracefulNodeShutdown 機能が有効になっています。この機能は Linux ノードのみをサポートしています。この機能を有効にすると、kubelet は発生しようとしているノードシャットダウンイベントを認識し、特定のシャットダウン期間内にノード上のポッドをエビクトできます。詳細については、「グレースフルノードシャットダウン」をご参照ください。
デフォルトでは、Kubernetes 1.21 以降のバージョンで EfficientWatchResumption 機能が有効になっています。この機能は、API サーバーの再起動後に、Kubernetes API サーバーのウォッチキャッシュを効率的に再開できます。この機能は大規模クラスターに適しています。詳細については、「KEP-1904」をご参照ください。
デフォルトでは、Kubernetes 1.22 以降のバージョンで CSIStorageCapacity 機能が有効になっています。この機能により、kube-scheduler は、ポッドが使用するボリュームを作成するのに十分なストレージ容量を持つノードにポッドをスケジュールできます。詳細については、「ストレージ容量」をご参照ください。
デフォルトでは、Kubernetes 1.22 以降のバージョンで DaemonSetUpdateSurge 機能が有効になっています。この機能を使用すると、
.spec.strategy.rollingUpdate.maxSurgeフィールドを使用して、DaemonSet のローリングアップデート中に、想定されるポッド数を超えて作成できるポッドの割合を指定できます。詳細については、「DaemonSet でローリングアップデートを実行する」をご参照ください。デフォルトでは、IndexedJob 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、ジョブ構成で .spec.completionMode を Indexed に設定することで、インデックス付きジョブを作成できます。このようにして、アノテーション batch.kubernetes.io/job-completion-index と JOB_COMPLETION_INDEX 環境変数が、ジョブによって作成される各ポッドに追加されます。詳細については、「Kubernetes」をご参照ください。
デフォルトでは、MemoryManager 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能は Linux ノードのみをサポートしています。この機能を使用すると、非均一メモリアクセス(NUMA)対応のメモリ管理を有効にできます。この機能は、保証されたメモリリソースを必要とするアプリケーションに適しており、アプリケーションのパフォーマンスを大幅に向上させることができます。ACK は、この機能のメモリ予約を構成しません。詳細については、「実行時のメモリマップ」および「NUMA 対応メモリマネージャーを利用する」をご参照ください。
デフォルトでは、PodAffinityNamespaceSelector 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、ポッドアフィニティ設定のラベルセレクターを同じ名前空間内ではなく、名前空間をまたいで適用できます。これにより、アフィニティベースのポッドスケジューリングが最適化されます。詳細については、「KEP-2249」をご参照ください。
デフォルトでは、PodDeletionCost 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能が有効になると、リソース使用率が低いポッドのポッド削除コストが低くなります。詳細については、「レプリカセット」をご参照ください。
デフォルトでは、PreferNominatedNode は Kubernetes 1.22 以降のバージョンで有効になっています。この機能が有効になっていると、kube-scheduler は優先的にノミネートされたノードにポッドをスケジュールします。 kube-scheduler は、ノミネートされたすべてのノードがポッドと一致しない場合にのみ、他のノードを評価します。詳細については、「KEP-1923」をご参照ください。
ProbeTerminationGracePeriod 機能は、Kubernetes 1.22 以降のバージョンで有効になっています。この機能は、liveness プローブのみをサポートしています。この機能を使用すると、ポッドレベルまたはプローブレベルの teminationGracePeriodSeconds フィールドを設定して、ポッドが liveness プローブに失敗した後に再起動を待機する必要がある期間を短縮できます。詳細については、「liveness プローブ、readiness プローブ、および startup プローブを構成する」をご参照ください。
デフォルトでは、NetworkPolicyEndPort 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、NetworkPolicy でポート範囲を指定できます。詳細については、「ネットワーク ポリシー」をご参照ください。
デフォルトでは、LogarithmicScaleDown 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能は、ポッドをスケールインするためのランダム化されたアプローチを提供し、ポッド トポロジ スプレッド制約によって発生する問題の影響を軽減します。詳細については、「スケールダウン時にポッド トポロジ スプレッド制約を考慮する必要がある」および「KEP-2185」をご参照ください。
デフォルトでは、SuspendJob 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、ジョブのライフサイクルをより効率的に管理できます。たとえば、この機能を使用してジョブを一時停止および再開できます。詳細については、「一時停止されたジョブの概要」をご参照ください。
デフォルトでは、ServiceInternalTrafficPolicy 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、クラスタ内で準備ができているノードローカルエンドポイント、または準備ができているすべてのエンドポイントに内部トラフィックをルーティングできます。詳細については、「サービス」をご参照ください。
デフォルトでは、ServiceLoadBalancerClass 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用して、負荷分散をカスタマイズできます。詳細については、「ロードバランサ実装のクラスを指定する」をご参照ください。
デフォルトでは、ServiceLBNodePortControl 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、サービス構成で .spec.allocateLoadBalancerNodePorts を false に設定することで、LoadBalancer サービスのノードポート割り当てを無効にできます。このようにして、サービスはトラフィックをポッドに直接ルーティングします。詳細については、「ロードバランサーの NodePort 割り当てを無効にする」をご参照ください。
デフォルトでは、SizeMemoryBackedVolumes 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能は Linux ノードのみをサポートしています。emptyDir.sizeLimit フィールドを設定することで、emptyDir メモリバッキングボリュームのサイズを指定できます。これにより、ポッドスケジューリングの可観測性が向上します。詳細については、「KEP-1967」をご参照ください。
デフォルトでは、Server-side Apply 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能を使用すると、リソース構成のフィールドに対する変更を追跡できます。 ソース、時間、操作など、変更に関する情報を追跡できます。 詳細については、「Server-side Apply」をご参照ください。
CSI プラグインと Windows コンテナを統合する機能は、Kubernetes 1.22 以降のバージョンで安定化されています。この機能を使用すると、Windows Server 2019 や Windows Server バージョン 2004 など、オペレーティングシステムが特権コンテナをサポートしていないホストで、CSI Proxy を使用してストレージ操作を実行できます。この機能を使用するには、使用する CSI プラグインがこの機能をサポートしていることを確認してください。詳細については、「CSI Proxy」をご参照ください。
デフォルトでは、CSRDuration 機能は Kubernetes 1.22 以降のバージョンで有効になっています。この機能が有効になると、署名および発行される証明書の有効期間は、CSR 内の .spec.expirationSeconds の値と、kube-controller-manager 構成の
--cluster-signing-durationの値のうち、小さい方の値に設定されます。ACK クラスタでは、kube-controller-manager 構成の --cluster-signing-duration のデフォルト値は 10 年です。詳細については、「署名者」をご参照ください。Kubernetes 1.22 以降では、BoundServiceAccountTokenVolume 機能ゲートが一般提供 (GA) に到達します。この機能ゲートが有効になっている場合、投影されたボリュームとしてポッドにマウントされていないサービスアカウントトークンのデフォルトの有効期間は 1 年です。詳細については、「機能の詳細」をご参照ください。
新機能
ボリュームヘルスモニタリング機能は、Kubernetes 1.21 以降のバージョンでサポートされています。この機能は、CSI プラグインを使用してプロビジョニングされた永続ボリューム (PV) のヘルスステータスを検出するのに役立ちます。これにより、正常でない PV からのデータの読み取りまたは書き込みが防止されます。デフォルトでは、この機能は CSI プラグインを使用する ACK クラスタで有効になっています。この機能を使用するには、使用する CSI プラグインがこの機能をサポートしていることを確認してください。詳細については、「ボリュームヘルスモニタリング」をご参照ください。
cgroups v2 に基づいて開発されたメモリ Quality of Service (QoS) 機能は、Kubernetes 1.22 以降のバージョンでサポートされています。計算リソースが不足しているシナリオ (リソースリクエストの急増が発生するシナリオなど) では、CPU リソースの可用性を確保するために CPU 速度制限が実行されます。ただし、メモリ速度制限はサポートされていません。メモリ速度制限をサポートするために、オープンソースの Linux カーネルは cgroups v2 の特定のインターフェイスを最適化します。デフォルトでは、メモリ QoS 機能は ACK クラスタで有効になっています。この機能は Linux ノードのみをサポートしています。この機能を使用するには、使用する Linux ノードの OS カーネルがこの機能をサポートしていることを確認してください。詳細については、「cgroup v1 インターフェイスの Memcg QoS 機能」および「2570-memory-qos」をご参照ください。
Kubernetes 1.22 以降のバージョンでは、HostProcess コンテナから Windows 特権コンテナを作成できます。デフォルトでは、Windows HostProcess コンテナ機能は ACK クラスタで有効になっています。この機能を使用するには、使用するノードの OS カーネルがこの機能をサポートしていることを確認してください。詳細については、「Windows Server 2022 の Windows コンテナの新機能」および「Windows HostProcess ポッドの作成」をご参照ください。
スワップメモリ機能は、Kubernetes 1.22 以降のバージョンでワークロードに対してサポートされています。この機能は Linux ノードのみをサポートしています。スワップメモリ機能が必要なシナリオでは、スワップメモリ機能を使用してアプリケーションのパフォーマンスを向上させることができます。たとえば、ノード管理者は、ノードのパフォーマンスを向上させたり、メモリ競合によって発生する安定性の問題を軽減したりすることができます。スワップメモリ機能は ACK クラスタでは無効になっています。詳細については、「スワップメモリ管理」および「KEP-2400」をご参照ください。
デフォルトの seccomp プロファイルは、Kubernetes 1.22 以降のバージョンでワークロード用に構成されます。この機能は Linux ノードのみをサポートしています。この機能が有効になると、デフォルトで RuntimeDefault seccomp プロファイルが使用されます。特定のワークロードでは、他のワークロードよりもシステムコールの制限が少ない場合があります。この機能を有効にすると、これらのワークロードは失敗する可能性があります。この機能は ACK クラスタでは無効になっています。詳細については、「すべてのワークロードのデフォルト seccomp プロファイルとして RuntimeDefault の使用を有効にする」をご参照ください。
機能の更新
PSP リソースは Kubernetes 1.21 以降のバージョンで非推奨となり、Kubernetes 1.25 で削除される予定です。デフォルトでは、ACK クラスタで Pod Security Policy 機能が有効になっています。Kubernetes 1.22 では、PSP リソースの代替として ACK Pod Security Policy を使用できます。詳細については、「Pod security admission」および「PodSecurityPolicy deprecation: past, present, and future」をご参照ください。
topologyKeys フィールドは、Kubernetes 1.21 以降のバージョンでは非推奨になりました。代わりに、Service トポロジー機能を有効にするには、Topology Aware Hints 機能が使用されます。デフォルトでは、ACK クラスタでは Service トポロジー機能は無効になっています。Kubernetes 1.22 のクラスタで Service トポロジー機能が有効になっている場合は、Topology Aware Hints 機能を有効にすることで、topologyKeys フィールドと同じ効果を得ることができます。詳細については、「Topology Aware Hints」をご参照ください。
Kubernetes 1.22 の機能強化
可観測性
Kubernetes API サーバーへのアクセスとリクエストに関するメトリックが追加されました。これにより、Kubernetes API サーバーの可観測性が向上します。
コントロールプレーンコンポーネントの主要なメトリックは、ACK Pro マネージドクラスター、Serverless Kubernetes Pro クラスター、および ACK Edge Pro クラスターで収集できます。これにより、コントロールプレーンコンポーネントの可観測性が向上します。
安定性
以下の機能強化は、すべてのタイプの ACK クラスターに提供されます。
ストーブリソースの保護が強化され、コールドスタート時の etcd の負荷が軽減されます。
リクエストのソース、タイプ、およびルートの組み合わせに基づいて、Kubernetes API サーバーでトラフィックの速度制限を実行できます。これにより、コールドスタート時の etcd の負荷が軽減されます。
パフォーマンスの向上
kubelet: kubelet のインプレース更新中、システムは可能な限り ポッドの再起動を回避します。詳細については、「コンテナーが変更されたかどうかの kubelet の計算が、クラスター全体の停止を引き起こす可能性がある」をご参照ください。
kube-proxy: kube-proxy は、Alibaba Cloud Linux 2 (kernel-4.19.91-23) 以降のバージョンと互換性があります。IP Virtual Server (IPVS) モードが有効になっている場合、conn_reuse_mode は 0 に設定されていません。詳細については、「[ipvs] Linux カーネルバージョン v5.9 以降で conn_reuse_mode=1 を設定する」をご参照ください。
Serverless Kubernetes クラスター: Serverless Kubernetes クラスターは、仮想ノードが準備できていない場合、Elastic Container Instance ベースのポッドをプロアクティブにエビクトしません。これにより、ビジネス損失が軽減されます。
ACK Pro マネージドクラスターと ACK Edge Pro クラスター: スケジューラが最適化されています。ギャングスケジューリング、トポロジー対応 CPU スケジューリング、トポロジー対応 GPU スケジューリングなど、スケジューリング機能が向上しています。詳細については、「クラスター」をご参照ください。
修正された問題
kube-controller-manager の特定のシナリオにおける EndpointSlice のリークの問題が修正されました。詳細については、「EndpointSlice ミラーリングがサービスセレクターのトランジションを処理する方法の修正」をご参照ください。