Container Service for Kubernetes (ACK) は、認定Kubernetes適合プログラムの条項を厳守します。 このトピックでは、Kubernetes 1.24をサポートするためにACKが行った変更の一覧を示します。
バージョン更新
コンポーネントは、Kubernetes 1.24をサポートするためにACKによって更新および最適化されます。
キーコンポーネント | バージョン | 説明 |
Kubernetes | 1.24.6-aliyun.1 |
|
etcd | 3.5.4 | なし |
CoreDNS | v1.9.3.6-32932850-aliyun | 更新はワークロードには影響しません。 次の新機能が提供されます。
|
CRI | containerd 1.5.13 | なし |
CSI | v1.20.7-aafce42-aliyun | なし |
CNI | フランネルv0.15.1.13-941db231-aliyun |
|
Terway | Terwayのバージョンは1.1.0以降である必要があります。 | |
NVIDIAコンテナーランタイム | 3.7.0 | なし |
Ingressコントローラ | v1.2.0-aliyun.1 |
|
バージョンの詳細
主な変更点
Dockershimは、Kubernetes 1.24以降のバージョンで削除されます。 したがって、DockerはKubernetes 1.24以降のバージョンではサポートされていません。 ただし、引き続きDockerイメージを使用できます。 新しいノードを作成するときは、containerdをコンテナランタイムとして使用することを推奨します。 詳細については、「Dockershimの削除に関するFAQ」をご参照ください。 Dockershim削除の影響とフィードバックの詳細については、「GitHubの問題」をご参照ください。
Kubernetes 1.24以降のバージョンでは、kube-apiserverで処理される99% のAPIリクエストのレスポンスレイテンシが10倍に短縮され、kube-apiserverの負荷が約25% 増加します。 これは、Kubernetes 1.24がGo 1.18でコンパイルされているためです。これにより、ガベージコレクションアルゴリズムが大幅に変更されました。 kube-apiserverのメモリ使用量の増加が許容できない場合は、GOGC環境変数を設定することで影響を軽減できます。 GOGC=63を指定すると、kube-aspiserverのメモリ使用量を元のレベルに戻すことができます。
Kubernetes 1.24以降のバージョンでは、データのセキュリティを確保するため、LegacyServiceAccountTokenNoAutoGeneration機能ゲートがデフォルトで有効になっています。 Secret APIは、サービスアカウントのトークンを格納するためのSecretsを自動的に作成しません。 サービスアカウントトークンを生成するには、TokenRequest APIを使用する必要があります。 セキュリティを強化するために、TokenRequest APIを使用して生成されたすべてのトークンには、デフォルトで有効期間があります。 有効期限が切れないトークンを生成するには、service-account-token-secretsを参照してください。
Kubernetes 1.24以降を実行するACK専用クラスターの作成中に、kubeadmはコントロールプレーンノードをクラスターに追加するときに
node-role.kubernetes.io /マスター
ラベルを追加しなくなります。 Kubeadmは、新しい制御プレーンノードにnode-role.kubernetes.io /制御プレーンラベル
のみを追加します。 ただし、node-role.kubernetes.io /マスター: NoSchedule
とnode-role.kubernetes.io /制御プレーン: NoSchedule
の両方のテイントが新しい制御プレーンノードに追加されます。 Kubernetes 1.25では、node-role.kubernetes.io/master:NoSchedule
のテイントが削除されます。
新機能
Kubernetes 1.23以降のバージョンでは、構造化ログ機能はパブリックプレビューで利用できます。 kube-schedulerやkubeletなどのコンポーネントのログ形式を構造化テキスト形式 (key="value") に変更します。 たとえば、
GET /healthz: (57.126µs) 200
はverb="GET" URI="/healthz" latency="57.126µs" resp=200
に変更されます。 非構造化ログの解析に正規表現は不要になりました。 ログは構造化テキスト形式またはJSON形式で印刷することを推奨します。 詳細については、「instructured-logs」をご参照ください。 デフォルトでは、JSON形式のログデータはstdout
ではなくstderr
に出力されます。Kubernetes 1.23以降のバージョンで、ポッドの
pod.Spec.OS
パラメーターを設定し、ノードのOSがpod.Spec.OSパラメーターの値と一致しないことを示すノードラベルを設定した場合、ノードのkubeletはポッドを拒否します。Kubernetes 1.23以降のバージョンでは、
. spec.minReadySeconds
パラメータはデフォルトでStatefulSetsでサポートされており、StatefulSetMinReadySeconds機能ゲートはパブリックプレビューで使用できます。 詳細については、「StatefulSetsの最小レディ秒」をご参照ください。Kubernetes 1.23以降のバージョンでは、Container Storage Interface (CSI) プラグインの
CSIDriver.Spec.StorageCapacity
パラメーターを変更できます。Kubernetes 1.23以降のバージョンでは、JobReadyPods機能が有効になっています。 この機能を有効にすると、ジョブのステータスフィールドに
[準備完了]
状態のポッドの数が表示されます。Kubernetes 1.23以降のバージョンでは、CustomResourceValidationExpressions機能ゲートがCustomResourceDefinitions (CRD) に対して有効になっています。 この機能ゲートは、x-kubernetes-validations拡張機能に基づいており、CRDを検証するためにCommon Expression Language (CEL) を使用します。
Kubernetes 1.23以降のバージョンでは、クライアント側のバイナリファイルをWindows用にARM64で生成できます。 これは、Go 1.17がARM64でWindowsをサポートしているためです。
Kubernetes 1.23以降のバージョンでは、client-goは次の新しいワークキュー状態を追加します。
処理
。 処理中の状態でワークキューをシャットダウンすると、ワークキュー内のすべての進行中のタスクが完了した後にシャットダウンプロセスが開始されます。Kubernetes 1.23以降のバージョンでは、
admission_webhook_request_total
メトリックが追加されます。 このメトリックには、ラベルとして次の情報が含まれます。webhook名、承認タイプ、要求された操作、HTTPステータスコード、要求が拒否されたかどうかに関する情報、および要求されたリソースの名前空間。Kubernetes 1.23以降のバージョンでは、Kubernetes APIサーバーのメトリックは、
controller_admission_duration_seconds
、step_admission_duration_seconds
、webhook_admission_duration_seconds
、apiserver_current_inflight_requests
、apiserver_response_
サイズに達します。 さらに、Kubernetes APIサーバーが受信したLISTリクエストを監視するための新しいメトリックが追加されます。Kubernetes 1.23以降のバージョンでは、スケジューラの次のメトリックがGAに到達できます。
pending_pods
,preemption_attempts_total
,プリエンプション_犠牲者
,schedule_attempts_total
,scheduling_attempt_duration_seconds
(以前はとして知られていました)e2e_scheduling_duration_seconds
),pod_scheduling_duration_seconds
,pod_scheduling_attements
,framework_extension_point_duration_seconds
,plugin_execution_duration_seconds
、およびqueue_incoming_pods_total
.Kubernetes 1.23以降のバージョンでは、すべてのコントローラがkube-controller-managerのヘルスチェックに含まれています。
Kubernetes 1.24以降のバージョンでは、CSIStorageCapacity APIを使用して、使用可能なストレージ容量を表示できます。 これにより、十分なストレージ容量を持つノードにポッドをスケジュールできるようになり、ボリューム作成の失敗やボリュームマウントの失敗によってポッドスケジューリングが遅れるのを防ぎます。 詳細については、「ポッドスケジューリングのストレージ容量制約」をご参照ください。
Kubernetes 1.24以降のバージョンでは、gRPCプローブはパブリックプレビューで使用でき、GRPCContainerProbe機能ゲートはデフォルトで有効になっています。 詳細については、「プローブの設定」をご参照ください。
Kubernetes 1.24以降のバージョンでは、CSIプラグインが最適化されています。 たとえば、ツリー内永続ボリューム (PV) 削除保護ファイナライザがサポートされ、組み込みストレージプラグインをツリー外CSIドライバに移行することができる。 詳細については、「In-tree Storage Plugin to CSI Migration Design Doc」をご参照ください。
Kubernetes 1.24以降のバージョンでは、以下のオプションがkube-proxyに追加されます。 このように、kube-proxyはWindowsで実行できます。
-- forward-healthcheck-vip
: サービスの仮想IPアドレス (VIP) 宛てのヘルスチェック要求をkube-proxyのヘルスチェックサービスに転送します。-- root-hnsendpoint-name
: ルートネットワーク名前空間のホストネットワークサービス (HNS) エンドポイントの名前を指定します。
Kubernetes 1.24以降のバージョンでは、CronJobsで
timeZone
という名前の新しいオプションパラメーターがサポートされています。 CronJobTimeZone機能を有効にすると、指定したタイムゾーンでCronJobsを実行できます。 この機能は、Kubernetes 1.25でパブリックプレビューされます。Kubernetes 1.24以降のバージョンでは、次のメトリクスが追加または更新されます。
webhook_fail_open_count
メトリックは、webhookの失敗を監視するために使用されます。kube-proxyの
sync_proxy_rules_no_local_endpoints_total
メトリックは、内部エンドポイントを持たないサービスの数を監視するために使用されます。kubeletの
kubelet_volume_stats_health_abnormal
メトリックは、ボリュームのヘルスステータスを監視するために使用されます。evictions_number
メトリックはevictions_total
に置き換えられます。
Kubernetes 1.24以降のバージョンでは、
maxUnavailable
パラメーターはStatefulSetsでサポートされています。 このパラメータを使用すると、ローリング更新中にポッドを以前よりも早く停止できます。Kubernetes 1.24以降のバージョンでは、OpenAPI V3はデフォルトで有効になっています。
Kubernetes 1.24以降のバージョンでは、SHA-1ハッシュアルゴリズムを使用して署名された証明書はデフォルトで検証できません。 これは、Kubernetes 1.24がGo 1.18でコンパイルされているためです。
Kubernetes 1.24以降のバージョンでは、kubeletはマングルテーブルにKUBE-IPTABLES-HINTという名前のiptablesチェーンを作成します。 ホストネットワーク名前空間でiptablesルールを変更する必要があるコンテナ化されたコンポーネントは、このチェーンを使用して、システムが
iptables-legacy
またはiptables-nft
をより信頼できる方法で使用しているかどうかを確認できます。Kubernetes 1.23と1.24では、kubectlが最適化され、新しいkubectlコマンドがサポートされ、ユーザーヘルプコマンドの読みやすさが向上し、コード補完とヒントによってfishとpowershellがサポートされます。
デフォルトでは、kubectl logsコマンドの出力に、ポッド内の最初のコンテナーのログが表示されます。
IngressClassesはkubectl describe ingressコマンドの出力に表示されます。
kubectl versionコマンドの出力には、埋め込みバージョンのKustomzeが表示されます。
リソース名のヒンティングはkubectl getコマンドでサポートされています。 たとえば、ポッド名のヒントは、
kubectl get pod pod1 <TAB>
コマンドを実行すると自動的に提供されます。
廃止された機能
Kubernetes 1.23以降のバージョンでは、FlexVolumeは非推奨であり、ツリー外のCSIドライバが推奨されます。 詳細については、「KubernetesボリュームプラグインFAQ For Storage Vendors」をご参照ください。
Kubernetes 1.23以降のバージョンでは、特定のklogコマンドラインフラグは廃止され、Kubernetesはコンポーネントログを段階的に簡素化します。 詳細については、「システムログ」をご参照ください。
Kubernetes 1.23以降のバージョンでは、
kubeadm init
、kubeadm join
、およびkubeadm upgrade
コマンドで-- experimental-patches
コマンドラインフラグが廃止されます。-- patches
と-- config
を同時に使用することはできません。Kubernetes 1.23以降のバージョンでは、kube-log-runnerはリリースのtarパッケージに含まれ、廃止された
-- log-file
パラメーターを置き換えます。 詳細については、「kube-log-runner」をご参照ください。Kubernetes 1.23以降のバージョンでは、
scheduler_volume_scheduling_duration_seconds
メトリックは非推奨です。Kubernetes 1.23以降のバージョンでは、廃止された
apiserver_longrunning_gauge
メトリックはapiserver_longrunning_requests
メトリックに置き換えられます。Kubernetes 1.23以降のバージョンでは、
kubectl -- dry-run
コマンドを実行するときに、-- dry-run=(server | client | none)
を指定する必要があります。Kubernetes 1.24以降のバージョンでは、
Service.Spec.LoadBalancerIP
パラメーターはIPv4/IPv6デュアルスタックをサポートしていないため、非推奨です。Kubernetes 1.24以降のバージョンでは、kube-apiserverの
-- address
、-- insecure-bind-address
、-- port
、-- insecure-port=0
オプションが削除されます。Kubernetes 1.24以降のバージョンでは、kube-controller-managerおよびkube-schedulerの起動オプション
-- port=0
および-- address
は削除されます。Kubernetes 1.24以降のバージョンでは、kube-apiserverの
-- audit-log-version
および-- audit-webhook-version
オプションは、audit.k8s.io/v1
値のみをサポートします。 さらに、audit.k8s.io/v1[alpha | beta]1
が削除され、audit.k8s.io/v1
のみがサポートされています。Kubernetes 1.24以降のバージョンでは、kubeletのスタートアップオプション
-- network-plugin
がDockershimとともに削除されます。 このオプションはDocker固有で、Dockerがコンテナランタイムとして使用されている場合にのみ有効です。Kubernetes 1.24以降のバージョンでは、動的ログのクリーンアップは廃止され、削除されます。 動的ログクリーンアップ機能では、すべてのKubernetesシステムコンポーネントのログに適用できるログフィルターが導入され、さまざまな種類の機密情報がログを通じて公開されないようにします。 この特徴は、ロギングプロセスをブロックし得る。 詳細については、「動的ログのサニタイズ」と「KEP-1753」をご参照ください。
VolumeSnapshot CRDのv1beta1 APIバージョン (Kubernetes 1.20では廃止) がKubernetes 1.24で削除されました。 v1 APIバージョンが使用されます。
Kubernetes 1.24以降のバージョンでは、Serviceアノテーション
tolerate-unready-endpoints
(Kubernetes 1.11では廃止) が削除され、Service.spec.publishNotReadyAddresses
に置き換えられます。Kubernetes 1.24以降のバージョンでは、
metadata.clusterName
パラメーターは非推奨です。 このパラメータは、次のリリースで削除されます。Kubernetes 1.24以降では、kube-proxyがNodePort Servicesでリッスンするロジックが削除されます。 ロジックが削除された後、NodePortサービスのポートが、カーネルパラメーターで指定されたポート範囲と競合する場合、TCP接続が失敗することがあります。
net.ipv4.ip_local_port_range
ノードの。 これにより、ノードでヘルスチェックの失敗やサービス例外が発生する可能性があります。 クラスターのKubernetesバージョンを1.24以降に更新する前に、クラスター内のすべてのNodePort Servicesのポートが、各ノードのカーネルパラメーターnet.ipv4.ip_local_port_range
で指定されたポート範囲と競合しないようにしてください。 詳細については、「Kubernetes community PR」をご参照ください。
APIの変更
Kubernetes 1.23以降のバージョンでは、以下の変更がKubernetes APIに適用されます。
rbac.authorization.k8s.io/v1alpha
APIのバージョンが削除され、rbac.authorization.k8s.io/v1
に置き換えられました。scheduling.k8s.io/v1alpha
APIバージョンが削除され、scheduling.k8s.io/v1
に置き換えられました。
Kubernetes 1.23以降のバージョンでは、HorizontalPodAutoscaler v2はGAに到達でき、autosaling /v2beta2 APIバージョンは非推奨になります。
Kubernetes 1.23以降のバージョンでは、IPv4/IPv6デュアルスタックサービスを作成または更新するときに、
Service.spec.ipFamilyPolicy
パラメーターが必要です。 IPv4/IPv6デュアルスタックサービスを使用する場合は、ipFamilyPolicy PreferDualStackまたはRequireDualStackを設定する必要があります。Kubernetes 1.23以降のバージョンでは、logr v1.0.0 APIを使用するには、LogFormatRegistryに基づいて構成されているコンポーネントのコードを更新する必要があります。 JSONログはgo-logr/zapr形式でエクスポートされます。 いくつかの問題は修正されています。
Kubernetes 1.24以降のバージョンでは、
client.authentication.k8s.io/v1alpha 1
のAPIバージョンが削除され、v1 APIバージョンに置き換えられます。Kubernetes 1.24以降のバージョンでは、
node.k8s.io/v1alpha 1
のAPIバージョンが削除され、v1 APIバージョンに置き換えられます。Kubernetes 1.24以降のバージョンでは、
CSIStorageCapacity.storage.k8s.io
APIはv1beta1 APIバージョンではなくv1 APIバージョンを使用します。 v1beta1 APIバージョンはKubernetes 1.27で削除されます。Kubernetes 1.24以降のバージョンでは、
networking.k8s.io/v1alpha 1
のAPIバージョンが削除されます。
機能ゲート
特徴は、アルファ、ベータまたはGA段階にあり得る。 アルファ機能はデフォルトで無効になっています。 ベータ機能はデフォルトで有効になっています。 GA機能は有効であり、無効にすることはできません。 新しいバージョンのKubernetesでは、GA機能を無効にできます。 詳細については、「機能ゲート」をご参照ください。 次のリストは、フィーチャゲートの主な変更点を示しています。
Kubernetes 1.23以降のバージョンでは、TTLAfterFinished機能ゲートはGAに達することができ、デフォルトで有効になっています。 この機能ゲートでは、TTL (time-to-live) コントローラーを使用して、実行が完了したリソースオブジェクトをクリアします。
Kubernetes 1.23以降のバージョンでは、StatefulSetAutoDeletePVC機能ゲートがサポートされており、StatefulSetポッドによって作成された永続ボリュームクレーム (PVC) の自動削除が可能です。
Kubernetes 1.23以降のバージョンでは、PodSecurity機能ゲートはパブリックプレビューで使用でき、デフォルトで有効になっています。 PodSecurity機能ゲートは、廃止されたPodSecurityPolicyアドミッションコントローラーを置き換えるために使用されます。
Kubernetes 1.23以降のバージョンでは、IPv4/IPv6デュアルスタックネットワーキング機能ゲートがGAに到達し、IPv6DualStack機能ゲートが削除されます。
Kubernetes 1.23以降のバージョンでは、NodeLease機能ゲートスイッチは削除され、NodeLease機能ゲートは常に有効になっています。 この機能ゲートは、Kubernetes 1.17でGAに達しました。
Kubernetes 1.23以降のバージョンでは、CSIVolumeFSGroupPolicy機能ゲートはGAに達することができ、デフォルトで常に有効になっています。
Kubernetes 1.23以降のバージョンでは、デフォルトでGenericEphemeralVolume機能ゲートが有効になっています。 この機能ゲートの使用方法の詳細については、「エフェメラルボリューム」をご参照ください。 共通ボリュームのすべての機能は、汎用エフェメラルインラインボリュームによってサポートされています。 汎用エフェメラルインラインボリュームは、永続ストレージをサポートするサードパーティのストレージドライバーを使用してプロビジョニングできます。 共通ボリュームは、サードパーティのストレージドライバーを使用してプロビジョニングでき、ボリュームスナップショットから復元できます。 共通ボリュームはストレージ容量の追跡をサポートします。
Kubernetes 1.23以降のバージョンでは、IngressClassNamespacedParamsフィーチャーゲートはGAに到達できます。 この機能ゲートにより、IngressClassesは名前空間スコープのパラメータを参照できます。
- scope
およびnamespace
フィールドは、IngressClass.spec.parameters
パラメーターに追加されます。Kubernetes 1.23以降のバージョンでは、PVまたはPVCがまだ使用されている場合、StorageObjectInUseProtection機能ゲートはPVまたはPVCの削除を延期します。 この機能ゲートはKubernetes 1.11でGAに達し、Kubernetes 1.25で削除されます。
Kubernetes 1.23以降のバージョンでは、ConfigurableFSGroupPolicyフィーチャーゲートがGAに到達し、
volume_fsgroup_recurs_apply
メトリックの名前がvolume_apply_access_control
に変更されます。 ボリュームをポッドにマウントするときは、ConfigurableFSGroupPolicy機能ゲートを使用して、fsGroupフィールドに一致するボリュームのボリューム権限と所有権変更ポリシーを設定できます。 詳細については、「https:// kubernetes.io/docs/tasks/configure-pod-container/security-context/#configure-volume-permission-and-ownership-change-policy-For-pod」をご参照ください。Kubernetes 1.23以降のバージョンでは、KubeletPodResourcesGetAllocatable機能ゲートはパブリックプレビューで使用でき、GetAllocatableResources機能はデフォルトで有効になっており、ノードリソースの割り当てを最適化します。 詳細については、「GetAllocatableResources gRPCエンドポイント」をご参照ください。
Kubernetes 1.23以降のバージョンでは、WindowsHostProcessContainers機能ゲートはパブリックプレビューで使用でき、Windows HostProcessコンテナはデフォルトでサポートされています。
Kubernetes 1.24以降のバージョンでは、NonPreemptingPriority機能ゲートはGAに到達できます。
Kubernetes 1.24以降のバージョンでは、ValidateProxyRedirectesおよびStreamingProxyRedirectes機能ゲートは非推奨です。
Kubernetes 1.24以降のバージョンでは、JobReadyPods機能ゲートはパブリックプレビューで使用でき、デフォルトで有効になっています。 この機能ゲートでは、ジョブによって作成された
準備完了
ポッドの数を追跡できます。 数はジョブのstatus
フィールドに記録されます。Kubernetes 1.24以降のバージョンでは、インデックスジョブ機能ゲートはGAに達する可能性があり、無効にすることはできません。
Kubernetes 1.24以降のバージョンでは、SuspendJob機能ゲートはGAに到達でき、Kubernetes 1.26で削除されます。 この機能により、ジョブを中断および再開できます。
Kubernetes 1.24以降のバージョンでは、RemoveSelfLink機能ゲートはGAに到達できます。 この機能ゲートでは、
. metadata.selfLink
フィールドをすべてのオブジェクトとコレクションの空の文字列に設定します。 このフィールドは、Kubernetes 1.16以降のバージョンでは廃止されました。 この機能ゲートを有効にすると、. metadata.selfLink
フィールドはまだKubernetes APIに属しています。Kubernetes 1.24以降のバージョンでは、PodAffinityNamespaceSelectorフィーチャーゲートはGAに到達でき、Kubernetes 1.26で削除されます。 この機能ゲートを使用すると、名前空間全体にポッドアフィニティ設定を適用できます。 これにより、アフィニティルールに基づくポッドスケジューリングのパフォーマンスが向上します。
Kubernetes 1.24以降のバージョンでは、AnyVolumeDataSource機能ゲートをパブリックプレビューで使用できます。 この機能により、カスタムリソースをPVCのデータソースとして使用できます。
Kubernetes 1.24以降のバージョンでは、CSRDuration機能ゲートがGAに到達し、CertificateSigningRequestリソースを使用してX.509証明書を申請できます。 CSRDuration機能ゲートを使用すると、
spec.expirationSeconds
というオプションのフィールドを使用して、発行する証明書の有効期間を指定できます。 有効な最小値は600です。Kubernetes 1.24以降のバージョンでは、ServerSideFieldValidation機能ゲートはパブリックプレビューで使用でき、デフォルトで有効になっています。 この機能ゲートは、クライアント側ではなくサーバー側でリソースの検証を実行します。 たとえば、
kubectl create
またはkubectl apply
コマンドを実行すると、サーバー側でリソースの検証が実行されます。Kubernetes 1.24以降のバージョンでは、DynamicKubeletConfigフィーチャーゲート (Kubernetes 1.22では廃止) が削除されます。
Kubernetes 1.24以降のバージョンでは、LegacyServiceAccountTokenNoAutoGeneration機能ゲートがデフォルトで有効になっています。 この機能ゲートを有効にすると、サービスアカウントのシークレットは自動的に生成されません。
Kubernetes 1.24以降のバージョンでは、SetHostnameAsFQDN、ImmutableEphemeralVolumes、およびNamespaceDefaultLabelName機能ゲートが削除されます。 これらの機能ゲートは、Kubernetes 1.22でGAに達しています。
Inweplotes 1.23と1.24では、次の機能ゲートがGAに到達できます。ConfigurableFSGroupfig、ControllerPodnodeJob PointedLeaderLink Priority、ClassimentAzureDisk、CSIMigrationOpenStack、CSIStorageCapacity、CSRDuration、CronJobGenericRespedContormes、EnqualMepsitedStack PerpedStack Sporm、ExpControlConvorm、ExpandProvauProdStack Informes これらの機能ゲートは有効で、無効にすることはできません。