You need to enable JavaScript to run this app.
导航

容器服务发布 Kubernetes 1.24 版本说明

最近更新时间2024.03.01 17:06:35

首次发布时间2023.03.01 21:14:00

火山引擎容器服务(VKE)严格遵循社区一致性认证。本文介绍容器服务发布 Kubernetes 1.24 版本所做的变更说明。

版本发布说明

表1:核心组件及说明

核心组件当前版本号注意事项
Kubernetes1.24.15
Containerd Runtime1.6.21
ETCD3.5.5
CoreDNS1.8.6

表2:Kubernetes 版本与容器服务版本对应关系

Kubernetes 版本VKE 版本发布说明

v1.24.15

vke.25

  • 强化 Kubelet,支持配置容器资源视图。
  • 强化 Kubelet,支持通过 Annotation 配置被驱逐 Pod 的优雅退出时间。
  • 修复扩展调度器负载感知调度异常问题。
v1.24.15vke.24修复 runc 容器逃逸漏洞 CVE-2024-21626

v1.24.15

vke.23

  • 强化 Kubelet,支持根据调度侧的分配结果进行设备分配。
  • 强化扩展调度器,支持 RDMA 网络拓扑感知调度。
v1.24.15vke.21增强弹性资源优先级调度功能,支持按比例调度和触发 Cluster Autoscaler 扩容。
v1.24.15vke.20修复扩展调度器配置 MultiPoint 插件时偶现 Pod 无法调度的问题。
v1.24.15vke.19强化 API Server 参数配置,保证与社区版本的一致性。
v1.24.15vke.18强化 API Server,优化参数配置方式。
v1.24.15vke.17强化 API Server,修复漏洞 CVE-2023-44487CVE-2023-39325
v1.24.15vke.16强化扩展调度器,避免缓存穿透 ETCD 特性。
v1.24.15vke.15修复升级 Kubelet 后卸载存储卷异常的问题。
v1.24.15vke.14强化扩展调度器,增强负载感知调度功能。

v1.24.15

vke.13

  • 强化扩展调度器,支持拓扑感知调度。
  • 修复扩展调度器重调度 Pod 真实负载同步异常问题。

v1.24.15

vke.12

  • 强化扩展调度器,支持根据热点负载进行打散重新调度。
  • 强化扩展调度器,支持调度过程中将节点信息注入到 Pod。
v1.24.10vke.11强化 Kubelet,优化节点网络插件初始化逻辑。
v1.24.10vke.10优化 Kubernetes 集群安装流程。
v1.24.10vke.9修复扩展调度器初始化异常问题。
v1.24.10vke.8优化扩展调度器配置。

v1.24.10

vke.7

  • 强化扩展调度器,支持 mGPU 跨卡共享功能。
  • 强化 Kubelet,修复 NetworkUnavailable Condition 问题。
v1.24.10vke.6强化 API Server,避免缓存穿透 ETCD。

v1.24.10

vke.5

  • 强化扩展调度器,支持负载感知调度。
  • 强化 API Server 细粒度请求观测能力。
  • 强化扩展调度器,支持 Capacity 调度。
  • 修复漏洞 CVE-2022-3162, CVE-2022-3294

Kubernetes 社区版本解读

重大更新

  • 移除 Dockershim。
    在 v1.20 版本中被废弃后,Dockershim 组件在 Kubernetes v1.24 版本的 kubelet 中移除。关于 Dockershim 移除对 Docker 支持的更多信息,请参见 Dockershim Removal FAQ。关于移除 Dockershim 的影响及反馈,请参见 GitHub issue
  • 默认关闭 Beta API。
    新的 Beta API 默认不会在集群中启用。现有 Beta API 及其更新版本将默认继续被启用。
  • 签名发布制品。
    发布制品时使用 Cosign 进行签名并验证已签名容器镜像,以提高软件发布流程的安全性。
  • API Server 性能优化。
    截至 v1.24.10 版本,Kubernetes 采用 Go 1.19.5 编译,受益于 Go 垃圾回收算法优化,API Server P99 调用延迟大幅下降,可支持负载增加约 25%。
  • 结构化日志进入 Beta 阶段,kube-scheduler、kubelet 等组件切换为key="value"形式的结构化日志便于解析分析。详细信息,请参见 Introducing Structured Logs
  • 禁用自动创建 Secret。
    默认启用 LegacyServiceAccountTokenNoAutoGeneration,不再为 ServiceAccount 自动创建 Secret。
  • 默认开启 OpenAPI V3。
  • 支持通过 CSIStorageCapacity 对象显示可用存储容量,减少使用存储卷的 Pod 因创建、挂载 Volume 失败而产生的调度延迟。
  • NonPreemptingPriority 支持 Pod 优先级抢占,进入 GA 阶段。
  • CSI 存储 In-Tree 插件迁移持续推进。详细信息,请参见 In-tree Storage Plugin to CSI Migration Design Doc
  • gRPC 探针升级为 Beta,可通过特性门控参数 GRPCContainerProbe 启用,无需暴露 HTTP Endpoint 或执行额外的可执行文件即可为 gRPC 应用配置 Kubernetes 原生的配置启动、存活和就绪性探测。
  • Kubelet 配置镜像凭证提供者升级至 Beta 阶段,支持使用 exec 插件动态检索容器镜像仓库的凭据,而不是将凭据存储在节点的文件系统上。
  • 支持上下文日志记录功能 Contextual Logging
  • 允许为服务的静态 IP 地址分配软保留范围,避免 IP 分配给服务带来的冲突。
  • Kubelet 中移除动态 Kubelet 配置。
  • StatefulSet 默认支持 Pod 就绪的最小时间.spec.minReadySeconds;StatefulSetMinReadySeconds 进入 Beta 阶段。详细信息,请参见 Minimum Ready Seconds for StatefulSets
  • StatefulSet 支持配置maxUnavailable参数,便于滚动更新时可以更快地停止 Pods。
  • 默认开启 JobReadyPods 特性,支持在 Job Status 中显示处于Ready状态的 Pods 数量。
  • 当配置 OS 参数时,Kubelet 会默认拒绝.spec.OS与节点 OS 标签不匹配的 Pods。
  • 在创建和更新双协议栈的时候Service.spec.ipFamilyPolicy为必填项,使用双协议栈的 Service 必须指明ipFamilyPolicy“PreferDualStack”或者“RequireDualStack”
  • Client-go 在 Workqueue 中新增 Processing 状态,支持 Workqueue Shutdown 时等待队列中对象处理完成。
  • kube-controller-manager 的健康检查会包含每一个控制器的健康检查。
  • 默认不再支持 SHA-1 哈希算法验证证书签名。
  • Kubelet 会在 Mangle 表中添加一个名为 KUBE-IPTABLES-HINT 的 iptables 链,需要在主机网络命名空间里修改 iptables 规则的容器化组件,可以使用它来更好的确认系统要使用iptables-legacy还是iptables-nft
  • kube-proxy 新增如下 2 个参数以支持在 Windows 上运行 kube-proxy:
    • --forward-healthcheck-vip支持将到 Service VIP 的健康检查流量转发到 kube-proxy 的健康检查服务。
    • --root-hnsendpoint-name指定根网络命名空间的 HNS 端点的名称。
  • CronJob 新增可选字段timeZone,在开启特性 CronJobTimeZone 时,支持在特定的时区运行 CronJob。
  • 丰富各组件监控指标:
    • 新增指标webhook_fail_open_count指标用于监控 Webhook 失败。
    • 新增指标admission_webhook_request_total指标,支持监控 Webhook 信息,包括 Webhook 名称、Admission 类型、请求动作、HTTP 状态码、请求是否被拒绝、请求资源的 Namespace 等。
    • kube-proxy 新增指标sync_proxy_rules_no_local_endpoints_total,支持展示没有内部Endpoints 的服务数量。
    • kubelet 新增指标kubelet_volume_stats_health_abnormal用于记录 Volume 健康状态。
    • API Server 新增指标:controller_admission_duration_secondsstep_admission_duration_secondswebhook_admission_duration_secondsapiserver_current_inflight_requestsapiserver_response_sizes。除此之外,API Server 还新增了针对 LIST 请求的指标。
    • kube-scheduler 新增指标 :pending_podspreemption_attempts_totalpreemption_victimsschedule_attempts_totalscheduling_attempt_duration_seconds(原e2e_scheduling_duration_seconds )、pod_scheduling_duration_secondspod_scheduling_attemptsframework_extension_point_duration_secondsplugin_execution_duration_secondsqueue_incoming_pods_total
    • 使用evictions_total代替evictions_number指标。

废弃功能

  • 废弃 FlexVolume ,推荐使用 Out-of-tree CSI 驱动方式。详细信息,请参见 Kubernetes Volume Plugin FAQ
  • Klog 废弃部分命令行参数,Kubernetes 正在简化组件日志。详细信息,请参见 System Logs
  • Kubeadm 在initjoinupgrade命令中废弃了--experimental-patches参数,--patches--config不能混合使用。
  • kube-log-runner 包含在 Release 的 TAR 包中,代替被废弃的--log-file参数。详细信息,请参见 kube-log-runner
  • 废弃指标scheduler_volume_scheduling_duration_seconds
  • 使用apiserver_longrunning_requests指标代替废弃的指标apiserver_longrunning_gauge
  • kubectl --dry-run必须指定--dry-run=(server|client|none)
  • 由于无法适用于双栈协议,弃用Service.Spec.LoadBalancerIP
  • kube-apiserver 移除参数--address--insecure-bind-address--port--insecure-port=0
  • kube-controller-manager 和 kube-scheduler 移除启动参数--port=0--address
  • kube-apiserver 的启动参数--audit-log-version--audit-webhook-version仅支持audit.k8s.io/v1
  • Kubelet 移除启动参数--network-plugin,该启动参数仅当容器运行环境设置为 Docker 时才有效,会随着 Dockershim 一起删除。
  • 废弃并移除动态日志清理功能。详细信息,请参见 Dynamic log sanitizationKEP-1753
  • VolumeSnapshot v1beta1 CRD 在 Kubernetes 1.20 版本中被废弃,在 Kubernetes 1.24 版本中移除,需改用 v1 版本。
  • 移除自 Kubernetes 1.11 版本就废弃的service annotation tolerate-unready-endpoints,使用Service.spec.publishNotReadyAddresses代替。
  • 废弃metadata.clusterName字段,并将在下一个版本中删除。
  • 去除了 kube-proxy 监听 NodePort 的逻辑,在 NodePort 与内核net.ipv4.ip_local_port_range范围有冲突的情况下,会偶发的 TCP 无法连接的情况,导致健康检查失败、业务异常等问题。升级前,请确保集群没有 NodePort 端口与任意节点net.ipv4.ip_local_port_range范围存在冲突。详细信息,请参见Kubernetes 社区 PR
  • Master 节点废弃node-role.kubernetes.io/master Label,使用node-role.kubernetes.io/control-plane(在 Kubernetes 1.20 版本引入)替代。
  • Master 节点新增node-role.kubernetes.io/control-plane:NoSchedule Taint,旧Taint node-role.kubernetes.io/master:NoSchedule(在 Kubernetes 1.25 版本将被移除)保留。

API 版本变更

在 Kubernetes v1.23 版本后

  • 移除rbac.authorization.k8s.io/v1alpha1,使用rbac.authorization.k8s.io/v1
  • 移除scheduling.k8s.io/v1alpha1,使用scheduling.k8s.io/v1
  • 废弃autoscaling/v2beta2,HorizontalPodAutoscaler v2 进入 GA 阶段。
  • 移除client.authentication.k8s.io/v1alpha1,使用client.authentication.k8s.io/v1
  • 废弃 CSIStorageCapacity.storage.k8s.io/v1beta1,使用CSIStorageCapacity.storage.k8s.io/v1
  • 移除networking.k8s.io/v1alpha1网络 API。

在 Kubernetes v1.22 版本后

  • MutatingWebhookConfiguration 和 ValidatingWebhookConfiguration 资源不再支持admissionregisration.k8s.io/v1beta1版本 API,使用该版本创建的 WebhookConfiguration,需尽快替换为admissionregisration.k8s.io/v1版本,否则会导致配置创建失败。
  • CustomResourceDefinition 不再支持apiextensions.k8s.io/v1beta1版本 API,使用该版本创建的自定义资源需尽快替换为apiextensions.k8s.io/v1版本,否则会导致自定义控制器调谐失败。
  • APIService 资源不再支持apiregistration.k8s.io/v1beta1版本 API。使用该版本创建的 APIService 资源,需尽快替换为apiregistration.k8s.io/v1版本,否则会导致扩展 API 服务失败。
  • TokenReview 资源不再支持authentication.k8s.io/v1beta1版本 API。使用该版本创建的资源需尽快使用authentication.k8s.io/v1版本替代,否则会导致授权验证失败。
  • SubjectAccessReview 资源不再支持authorization.k8s.io/v1beta1版本 API。使用该版本创建的资源需尽快使用authorization.k8s.io/v1版本替代,否则会导致授权验证失败。
  • CertificateSigningRequest 资源不再支持certificate.k8s.io/v1beta1版本 API。使用该版本创建的资源需尽快使用certificate.k8s.io/v1版本替代,否则会导致授权验证失败。
  • Lease 资源不再支持coordination.k8s.io/v1beta1版本 API。使用该版本创建的资源需尽快使用coordination.k8s.io/v1版本替代,否则会导致选主失败,影响服务正常工作。
  • Ingress 和 IngressClass 资源不再支持networking.k8s.io/v1beta1extensions/v1beta1版本 API。使用该版本创建的资源需尽快使用networking.k8s.io/v1版本替代,否则会影响应用对外暴露服务。
  • ClusterRole、ClusterRoleBinding、Role 和 RoleBinding 资源不再支持rbac.authorization.k8s.io/v1beta1版本 API。用该版本创建的 RBAC 资源需尽快使用rbac.authorization.k8s.io/v1版本替代,否则会影响应用集群内的权限服务。
  • CSIDriver、CSINode、StorageClass 和 VolumeAttachment 资源不再支持storage.k8s.io/v1beta1 版本 API。用该版本创建的 CSI 资源需尽快使用storage.k8s.io/v1版本替代,否则会影响集群内的存储服务提供,使得集群内无法正常使用 CSI。
  • PriorityClass 资源不再支持scheduling.k8s.io/v1beta1版本 API。用该版本创建的PriorityClass 资源需尽快使用scheduling.k8s.io/v1版本替代,否则会导致操作失败。

在 Kubernetes v1.21 版本后

  • 废弃容器组安全策略(PodSecurityPolicy,PSP)并计划在 v1.25 版本中完全移除。
  • 废弃通过Service topologKeys字段实现服务流量拓扑感知的特性,由拓扑感知特性取代。

参考链接

关于 Kubernetes 1.24 版本的性能和功能演进的更多信息,请参见: