Container Service for Kubernetes (ACK) は、認定Kubernetes適合プログラムの条項を厳守します。 このトピックでは、ACK LingjunがKubernetes 1.22をサポートするために行った変更について説明します。
バージョン更新
ACK Lingjunクラスターのすべてのコンポーネントが更新され、Kubernetes 1.22をサポートするように最適化されています。
キーコンポーネント | バージョン | 説明 |
Kubernetes | 1.22.15-aliyun.1 |
|
etcd | 3.5.1 | なし |
CoreDNS | v1.9.3.6-32932850-aliyun | 更新はワークロードには影響しません。 以下の機能が提供されます。
|
CRI | containerd 1.5.13 | なし |
CSI | v1.26.3-fc2ba2a-aliyun | なし |
CNI | Terway v1.5.7 | なし |
NVIDIAコンテナーランタイム | 3.13.0 | なし |
Ingressコントローラ | v1.8.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バージョンを使用して作成されたTokenReviewsは認証に使用できず、アプリケーションに悪影響を及ぼします。 代わりに、authentication.k8s.io/v1APIバージョンを使用できます。[リソースの変更] SubjectAccessReviewリソースの
authorization.k8s.io/v1beta1APIバージョンは廃止されました。 このAPIバージョンを使用して作成されたSubjectAccessReviewsは承認に使用できず、アプリケーションに悪影響を及ぼします。 代わりに、authorization.k8s.io/v1APIバージョンを使用できます。[リソースの変更] CertificateSigningRequest (CSR) リソースの
certificate.k8s.io/v1beta1APIバージョンが廃止されました。 このAPIバージョンを使用して作成されたCSRは、証明書の署名および発行には使用できません。 代わりに、certificates.k8s.io/v1APIバージョンを使用できます。[リソースの変更] Leaseリソースの
coordination.k8s.io/v1beta1APIバージョンが廃止されました。 このAPIバージョンを使用して作成されたリースは、リーダーの選択には使用できません。 代わりに、coordination.k8s.io/v1APIバージョンを使用できます。[リソースの変更] IngressおよびIngressClassリソースの
networking.k8s.io/v1beta1およびextensions/v1beta1APIバージョンは廃止されています。 これらのAPIバージョンを使用して作成されたIngressは、サービスの公開には使用できません。 代わりに、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バージョンを使用して管理されるPriorityClassesは、ポッドの優先度の設定には使用できません。 代わりに、scheduling.k8s.io/v1バージョンを使用できます。Dockershimは廃止され、Kubernetes 1.22で削除されます。 詳細については、「EP-2221」と「cri-containerd」をご参照ください。
Kubernetes 1.22に更新する前に、次の手順を実行して、Dockerコンテナーで実行されるワークロードを他のコンテナーランタイムを実行するコンテナーに移行することを推奨します。
ノードの仕様を決定し、既存のDockerコンテナの数に基づいて、Docker以外のコンテナランタイムを実行するノードの数を計算します。
オフピーク時にクラスターに新しいノードを追加します。
Dockerランタイムを実行するノードを1つずつドレインします。 ノードがドレインされるたびに、別のノードをドレインする前に、ノード上のアプリケーションポッドが新しいノードに正常に移行されたことを確認します。
Dockerランタイムを実行するすべてのノードがドレインされ、ノードでポッドが実行されなくなったら、ノードを削除します。
[リソースの廃止] Kubernetes 1.22.10以降のバージョンでは、kube-proxyはNodePort Servicesのポートをリッスンしなくなりました。 この更新後、NodePortサービスのポート範囲 (APIサーバーのServiceNodePortRangeパラメーターで指定) が、
net.ipv4.ip_local_port_rangeカーネルパラメーターで指定されたポート範囲と競合すると、TCP接続が失敗することがあります。 これにより、ヘルスチェックが失敗し、ノードでサービス例外が発生する可能性があります。 クラスターのKubernetesバージョンを1.22.10以降に更新する前に、クラスター内のすべてのNodePort Servicesのポート範囲が、net.ipv4.ip_local_port_rangeカーネルパラメーターで指定されたポート範囲と競合しないようにしてください。 NodePortサービスのポート範囲を設定する方法の詳細については、NodePortサービスのポート範囲を設定するにはどうすればよいですか。 またはKubernetesコミュニティPR
機能強化
Kubernetes 1.21以降のバージョンでは、デフォルトでImmutableEphemeralVolumes機能が有効になっています。 この機能を使用して、ConfigMapsとSecretsを不変に設定できます。これにより、クラスターのKubernetes APIサーバーの負荷が大幅に軽減されます。 詳細については、「Secrets」および「ConfigMaps」をご参照ください。
Kubernetes 1.21以降のバージョンでは、デフォルトでIPv4/IPv6デュアルスタック (IPv6DualStack) 機能が有効になっています。 IPv4/IPv6デュアルスタックを使用するには、クラスターの作成時に適切なIPv4 CIDRブロックとIPv6 CIDRブロックを指定し、IPv4/IPv6デュアルスタックをサポートするContainer Network Interface (CNI) プラグインをインストールする必要があります。 詳細については、「IPv4/IPv6デュアルスタック」をご参照ください。
Kubernetes 1.21以降のバージョンでは、デフォルトでGracefulNodeShutdown機能が有効になっています。 この機能はLinuxノードのみをサポートします。 この機能を有効にすると、kubeletは発生しようとしているノードシャットダウンイベントを認識し、特定のシャットダウン期間内にノード上のポッドを追い出すことができます。 詳細については、「Graceful node shutdown」をご参照ください。
Kubernetes 1.21以降のバージョンでは、デフォルトでEfficientWatchResumption機能が有効になっています。 この機能により、APIサーバーの再起動後にKubernetes APIサーバーのウォッチキャッシュを効率的に再開できます。 この機能は、大規模なクラスタに適しています。 詳しくは、「KEP-1904」をご参照ください。
デフォルトでは、CSIStorageCapacity機能はKubernetes 1.22以降のバージョンで有効になっています。 この機能により、kube-schedulerは、ポッドが使用するボリュームを作成するのに十分なストレージ容量を持つノードにポッドをスケジュールできます。 詳細については、「ストレージ容量」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでDaemonSetUpdateSurge機能が有効になっています。 この機能を使用すると、
. spec.strategy.rollingUpdate.maxSurgeフィールドを使用して、DaemonSetのローリング更新中に予想ポッド数を超えるポッドを作成できる割合を指定します。 詳細については、「DaemonSetでのローリング更新の実行」をご参照ください。Kubernetes 1.22以降のバージョンでは、デフォルトでIndexedJob機能が有効になっています。 この機能では、を設定してインデックス付きジョブを作成できます。. spec.com pletionModeへインデックス付きジョブ設定で このようにして、アノテーションbatch.kubernetes.io/job-completion-indexとJOB_COMPLETION_INDEX環境変数が、Jobによって作成された各ポッドに追加されます。 詳細は、「Kubernetes」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでMemoryManager機能が有効になっています。 この機能はLinuxノードのみをサポートします。 この機能を使用して、非統一メモリアクセス (NUMA) 対応のメモリ管理を有効にできます。 この機能は、アプリケーションのパフォーマンスを大幅に向上させるためにメモリリソースの保証が必要なアプリケーションに適しています。 ACKはこの機能のメモリ予約を設定しません。 詳細については、「実行時のメモリマップ」および「NUMA対応メモリマネージャーの利用」をご参照ください。
Kubernetes 1.22以降のバージョンでは、PodAffinityNamespaceSelector機能がデフォルトで有効になっています。 この機能を使用すると、同じ名前空間内ではなく、名前空間全体にポッドアフィニティ設定のラベルセレクターを適用できます。 これにより、アフィニティベースのポッドスケジューリングが最適化されます。 詳しくは、「KEP-2249」をご参照ください。
デフォルトでは、PodDeletionCost機能はKubernetes 1.22以降のバージョンで有効になっています。 この機能を有効にすると、リソース使用率の低いポッドで発生するポッドの削除コストが低くなります。 詳細については、「ReplicaSet」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでPreferNominatedNodeが有効になっています。 この機能を有効にした後、kube-schedulerは指定されたノードにポッドをスケジュールします。 kube-schedulerは、指定されたすべてのノードがポッドと一致しない場合にのみ、他のノードを評価します。 詳しくは、「KEP-1923」をご参照ください。
ProbeTerminationGracePeriod機能は、Kubernetes 1.22以降のバージョンで有効になっています。 この機能は、livenessプローブのみをサポートします。 この機能を使用すると、プローブレベルまたはポッドレベルのteminationGracePeriodSecondsフィールドを設定して、ポッドがlivenessプローブに失敗した後にポッドが再起動するのを待つ必要がある時間を短縮できます。 詳細については、「ライブネス、準備、および起動プローブの設定」をご参照ください。
Kubernetes 1.22以降のバージョンでは、NetworkPolicyEndPort機能がデフォルトで有効になっています。 この機能により、NetworkPolicyでポート範囲を指定できます。 詳細については、「ネットワークポリシー」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでLogarithmicScaleDown機能が有効になっています。 この機能により、ポッドをスケールインするためのランダムなアプローチが提供されるため、ポッドトポロジの広がりの制約によって引き起こされる問題の影響が軽減されます。 詳細については、「ポッドトポロジスプレッドの制約を考慮してスケールダウン」とKEP-2185をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでSuspendJob機能が有効になっています。 この機能により、ユーザーはジョブのライフサイクルをより効率的に管理できます。 たとえば、この機能を使用してジョブを中断および再開できます。 詳細については、「中断されたジョブの導入」をご参照ください。
デフォルトでは、ServiceInternalTrafficPolicy機能はKubernetes 1.22以降のバージョンで有効になっています。 この機能を使用して、準備ができているノードローカルエンドポイントまたはクラスターで準備ができているすべてのエンドポイントに内部トラフィックをルーティングできます。 詳細については、「サービス」をご参照ください。
デフォルトでは、ServiceLoadBalancerClass機能はKubernetes 1.22以降のバージョンで有効になっています。 この機能を使用して、負荷分散をカスタマイズできます。 詳細については、「ロードバランサーの実装クラスの指定」をご参照ください。
デフォルトでは、ServiceLBNodePortControl機能はKubernetes 1.22以降のバージョンで有効になっています。 この機能を使用すると、LoadBalancerサービスのノードポート割り当てを無効にできます。. spec.allocateLoadBalancerNodePortsへfalseサービス設定で このように、サービスはトラフィックをポッドに直接ルーティングします。 詳細については、「ロードバランサーのNodePort割り当ての無効化」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでSizeMemoryBackedVolumes機能が有効になっています。 この機能はLinuxノードのみをサポートします。 この機能を使用して、emptyDir.sizeLimitフィールドを設定することで、メモリがバックアップされたemptyDirボリュームのサイズを指定できます。 これにより、ポッドスケジューリングの可観測性が向上する。 詳しくは、「KEP-1967」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでサーバー側の適用機能が有効になっています。 この機能を使用すると、リソース構成のフィールドの変更を追跡できます。 ソース、時間、操作など、変更に関する情報を追跡できます。 詳細については、「サーバー側の適用」をご参照ください。
CSIプラグインをWindowsコンテナーと統合する機能は、Kubernetes 1.22以降のバージョンで安定化されます。 この機能を使用すると、CSIプロキシを使用して、オペレーティングシステムが特権コンテナーをサポートしていないホスト (Windows Server 2019やWindows Serverバージョン2004など) でストレージ操作を実行できます。 この機能を使用するには、使用するCSIプラグインがこの機能をサポートしていることを確認してください。 詳細については、「CSIプロキシ」をご参照ください。
Kubernetes 1.22以降のバージョンでは、デフォルトでCSRDuration機能が有効になっています。 この機能を有効にすると、署名および発行される証明書の有効期間は、の値の間の小さい値に設定されます。. spec.expirationSecondsの値とCSRの値
-- cluster-signing-durationkube-controller-manager构成の ACKクラスターでは、kube-controller-manager設定の -- cluster-signing-durationのデフォルト値は10年です。 詳細については、「署名者」をご参照ください。Kubernetes 1.22以降では、BoundServiceAccountTokenVolume機能ゲートがGeneral Availability (GA) に到達します。 この機能ゲートが有効になっている場合、ポッドに予測ボリュームとしてマウントされていないサービスアカウントトークンのデフォルトの有効期間は1年です。 詳細については、「機能の詳細」をご参照ください。
新機能
ボリュームヘルスモニタリング機能は、Kubernetes 1.21以降のバージョンでサポートされています。 この機能は、CSIプラグインを使用してプロビジョニングされた永続ボリューム (PV) のヘルスステータスを検出するのに役立ちます。 これにより、異常なPVからデータが読み書きされるのを防ぎます。 デフォルトでは、この機能はCSIプラグインを使用するACKクラスターに対して有効になっています。 この機能を使用するには、使用するCSIプラグインがこの機能をサポートしていることを確認してください。 詳細については、「ボリュームヘルスモニタリング」をご参照ください。
cgroups v2に基づいて開発されたメモリQuality of Service (QoS) 機能は、Kubernetes 1.22以降のバージョンでサポートされています。 リソース要求のスパイクが発生するシナリオなど、コンピューティングリソースが不十分なシナリオでは、CPUリソースの可用性を確保するためにCPUスロットリングが実行されます。 ただし、メモリスロットリングはサポートされていません。 メモリスロットリングをサポートするために、オープンソースのLinuxカーネルはcgroupv2の特定のインターフェイスを最適化します。 デフォルトでは、ACKクラスターに対してメモリQoS機能が有効になります。 この機能はLinuxノードのみをサポートします。 この機能を使用するには、使用するLinuxノードのOSカーネルがこの機能をサポートしていることを確認します。 詳細については、「cgroup v1インターフェイスのMemcg QoS機能」および「2570-memory-qos」をご参照ください。
Windows特権コンテナは、Kubernetes 1.22以降のバージョンのHostProcessコンテナから作成できます。 既定では、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クラスターに対してポッドセキュリティポリシー機能が有効になっています。 Kubernetes 1.22のPSPリソースの代わりに、ACKポッドセキュリティポリシーを使用できます。 詳細については、「ポッドセキュリティの承認」および「PodSecurityPolicyの廃止: 過去、現在、未来」をご参照ください。
topologyKeysフィールドは、Kubernetes 1.21以降のバージョンでは廃止されました。 代わりに、トポロジ認識ヒント機能を使用して、サービストポロジ機能を有効にします。 デフォルトでは、ACKクラスターのサービストポロジ機能は無効になっています。 Serviceトポロジ機能がKubernetes 1.22のクラスターに対して有効になっている場合、topology Aware Hints機能を有効にして、topologyKeysフィールドと同じ効果を得ることができます。 詳細については、「トポロジ認識のヒント」をご参照ください。
Kubernetes 1.22の機能強化
可観測性
Kubernetes APIサーバーへのアクセスとリクエストに関するメトリクスが追加されました。 これにより、Kubernetes APIサーバーの可観測性が向上します。
ACK Lingjunクラスタについて、制御プレーンコンポーネントの主要なメトリックを収集することができる。 これは、制御平面コンポーネントの可観測性を改善する。
安定性
次の拡張機能は、すべてのタイプの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カーネルバージョンのconn_reuse_mode=1の設定>= v5.9」をご参照ください。
固定された問題
特定のシナリオでのEndpointSliceリークの問題は、kube-controller-managerで修正されました。 詳細については、「EndpointSliceミラーリングがサービスセレクタの遷移を処理する方法の修正」をご参照ください。