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

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

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

首次发布时间2023.08.29 19:45:13

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

版本发布说明

表1:核心组件及说明

核心组件当前版本号注意事项
Kubernetes1.26.10Kubernetes v1.25 和 v1.26 对测试版本 API 进行废弃和移除,使用新版本需进行兼容性检查。详情请参见本文下方 API 版本变更
Containerd Runtime1.6.16Kubernetes v1.26 Runtime 版本必须大于等于 1.6 版本。
ETCD3.5.5
CoreDNS1.9.3

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

Kubernetes 版本VKE 版本发布说明

v1.26.10

vke.12

  • 强化 Kubelet,支持配置容器资源视图。
  • 强化 Kubelet,支持通过 Annotation 配置被驱逐 Pod 的优雅退出时间。
  • 修复扩展调度器负载感知调度异常问题。
v1.26.10vke.11修复 runc 容器逃逸漏洞 CVE-2024-21626
v1.26.10vke.10增强弹性资源优先级调度功能,支持按比例调度和触发 Cluster Autoscaler 扩容。
v1.26.10vke.9修复扩展调度器配置 MultiPoint 插件时偶现 Pod 无法调度的问题。
v1.26.10vke.8强化 API Server 参数配置,保证与社区版本的一致性。
v1.26.10vke.7同步原生 Kubernetes 社区 v1.26.10 版本代码。
v1.26.6vke.6强化 API Server,修复漏洞 CVE-2023-44487CVE-2023-39325
v1.26.6vke.5强化扩展调度器,避免缓存穿透 ETCD 特性。
v1.26.6vke.4修复扩展调度器重调度 Pod 真实负载同步异常问题。
v1.26.6vke.3强化扩展调度器,支持调度过程中将节点信息注入 Pod。

Kubernetes 社区版本解读

重大更新

  • 在 Kubernetes v1.25 中移除 PodSecurityPolicy,对于已经使用 PodSecurityPolicy 的集群,可考虑使用内置的 Pod Security Admission。详情请参见 Pod Security Admission从PodSecurityPolicy迁移到内置的PodSecurity准入控制器
  • 临时容器特性进入 Stable 阶段,该特性支持在由于容器崩溃(Crash)或容器镜像不包含调试工具而导致 kubectl exec 无用时,在现有 Pod 中运行临时容器。详情请参见 临时容器特性
  • cgroups v2 进入 Stable 阶段,该特性用来约束分配给进程的资源。详情请参见 cgroups v2文档
  • 在 Kubernetes v1.25,进一步优化 Kubernetes 对 Windows 系统的支持。
  • 在 Kubernetes v1.25,容器镜像仓库k8s.gcr.io迁移到registry.k8s.io。详情请参见 k8s.gcr.io Redirect to registry.k8s.io
  • 在 Kubernetes v1.25,网络策略中的 EndPort 字段进入 GA 阶段。详情请参见 网络策略端口范围
  • 在 Kubernetes v1.25,本地临时容器存储容量隔离进入 GA 阶段,支持配置 Pod 与本地临时存储的容量隔离。详情请参见 本地临时容器存储容量隔离
  • 在 Kubernetes v1.25 ,CSI 临时数据卷升级为稳定版本,CSI 临时数据卷不允许通过 PV/PVC 在 Pod 里直接指定 CSI 数据卷。详情请参见 CSI 临时数据卷
  • 在 Kubernetes v1.25,引入 KMS v2 alpha1 API 以提升性能,实现密钥轮换与可观察性改进。 此 API 使用 AES-GCM 替代了 AES-CBC,通过 DEK 实现静态数据加密(Kubernetes Secrets),且支持通过 AES-GCM 和 AES-CBC 进行读取。详情请参见 使用 KMS provider 进行数据加密指南
  • 在 Kubernetes v1.25,新增标准接口:容器对象存储接口(COSI),目前处于 Alpha 阶段。详情请参见 容器对象存储接口(COSI)
  • 在 Kubernetes v1.25,如果Pod Status字段将PodHasNetwork置为True,表示 Pod 运行时沙箱被成功初始化创建,并已配置网络。当PodHasNetwork置为True后,Kubelet 才会开始拉取容器镜像,因此该字段可用于更准确地反映容器初始化延迟的服务水平指标(SLI)。详情请参见 PodHasNetwork 和 Initialized Condition 的区别
  • 在 Kubernetes v1.25,StatefulSet 的 minReadySeconds 特性进入 Stable 阶段,允许每个 Pod 等待一段预期时间来减缓 StatefulSet 的滚动上线。详情请参见 MinimumReadySeconds
  • 在 Kubernetes v1.25,DaemonSet 的 maxSurge 特性进入 Stable 阶段,允许 DaemonSet 在滚动更新期间,在一个节点上运行同一 Pod 的多个实例,进一步减少更新过程中 DaemonSet 的停机时间。详情请参见 DaemonSet滚动更新
  • 在 Kubernetes v1.25,对使用 User Namespace 运行 Pod 提供 Alpha 支持,将 Pod 内的 root 用户映射到容器外的非零 ID,使得从容器角度看是 root 身份运行,而从主机角度看是常规的非特权用户。详情请参见 对 user namespace 运行 Pod 提供支持
  • 在 Kubernetes v1.25,新增 RetroactiveDefaultStorageClass 特性门控,用于更改默认 StorageClass 被分配到PersistentVolumeClaim 的方式,启用此特性后,未分配 StorageClass 的 PVC 会被自动更新分配对应的 StorageClass,不再需要删除重建。
  • 在 Kubernetes v1.25,新增 JobPodFailurePolicy 特性,允许配置 Job 根据容器退出码和 Pod 状况来指定 Pod 失效的处理方法,该特性在 v1.26 进入 Beta 阶段。详情请参见 Job 配置 Pod 失效策略
  • 在 Kubernetes v1.25,修复 PodTopologySpread 特性在滚动更新期间 Pod 预期外约束分布不均的情况。
  • 在 Kubernetes v1.25,不再创建规则链KUBE-MARK-DROPKUBE-MARK-MASQKUBE-POSTROUTING,优化 kube-proxy 大规模下的性能。详情请参见 Cleaning up IPTables Chain OwnershipKubernetes’s IPTables Chains Are Not API
  • 在 Kubernetes v1.26 不再支持 CRI v1alpha2 且要求容器运行时必须支持 CRI v1,即 Kubernetes v1.26 最低要求使用 Containerd 1.6,升级集群节点时,需要先将 Containerd 升级到 1.6.0 及以上版本。
  • 在 Kubernetes v1.26,新增动态资源分配功能,用于 Pod 之间和 Pod 内部容器之间请求、共享资源,支持用户提供参数初始化资源。该功能处于 Alpha 阶段,需要启用 DynamicResourceAllocation 特性门控和resource.k8s.io/v1alpha1 API 组,需要为待管理的特定资源安装驱动程序。详情请参见 Alpha API For Dynamic Resource Allocation
  • 在 Kubernetes v1.26,节点非优雅关闭进入 Beta 阶段,需要启用 NodeOutOfServiceVolumeDetach 特性门控。当节点故障时,故障节点上的 Pod 会一直处于 Terminating(停止)状态,也无法删除 VolumeAttachments。节点非优雅关闭要求用户手动为 Node 添加out-of-service污点,将 Pod 移动到新的运行节点。待节点恢复后还需要手动移除该污点。
  • 在 Kubernetes v1.26,支持在挂载时将 Pod fsGroup 传递给 CSI Driver,取代 Kubelet 去更改卷中文件和目录的权限。详情请参见 CSI Driver fspGrou Support
  • 在 Kubernetes v1.26,新增 Pod Scheduling Readiness 特性门控,该特性支持配置 Pod 被调度器何时开始调度的时间。当 Pod 配置 SchedulingGated 后,调度器会忽略该 Pod,不再调度该 Pod。
  • 在 Kubernetes v1.26,CPU Manager 进入 GA 阶段,Kubelet 通过 CPU Manager 给容器分配独占 CPU,支持三个不同的策略选项。详情请参见控制节点上的 CPU 管理策略
  • 在 Kubernetes v1.26,支持跨 Namespace 的存储数据源进入 Alpha 阶段,允许为 PersistentVolumeClaim 指定属于不同的 Namespace 数据源。
  • 在 Kubernetes v1.26,支持为 PodDisruptionBudget 配置不健康 Pod 的驱逐策略,通过设置.spec.unhealthyPodEvictionPolicy=AlwaysAllow来驱逐不健康 Pod 的行为不受 PDB 干扰。该特性处于 Aplha 阶段,需要启用 PDBUnhealthyPodEvictionPolicy 特性门控。详情请参见 不健康 Pod 的驱逐策略
  • 在 Kubernetes v1.26,APF prioritylevelconfigurations 资源加了两个spec字段,支持从其他优先级的规则借用限流槽位。详情请参见 PriorityLevelConfigurati ons
  • 在 Kubernetes v1.26,容器 preStop 和 postStart 生命周期函数中 httpGet 将遵循schemeheaders字段配置,支持设定自定义的 Headers 和使用 HTTPS,可以在 Kubelet 配置--feature-gates=ConsistentHTTPGetHandlers=false以关闭该功能。
  • 在 Kubernetes v1.26,支持通过 Annotations:"storageclass.kubernetes.io/is-default-class"设置多个 StorageClass,Admission Plugin 会选择出最新的 StorageClass 作为默认值而不再抛出异常。
  • 在 Kubernetes v1.26,kube-controller-manager 支持设置--concurrent-horizontal-pod-autoscaler-syncs来设定 HPA(Horizontal Pod Autoscaler)控制器的 Workers 数。
  • 在 Kubernetes v1.26,新增 HPA 标签选择器校验,当多个 HPA 标签选择器指向同一个 Pod 负载时,这些 HPA 将失效并上报AmbiguousSelector 事。

废弃和移除功能

  • 在 Kubernetes v1.25, in-tree 核心插件 迁移使用 CSI 进入稳定版本,弃用 GlusterFSPortworx in-tree卷 插件,移除 FlockerQuobyteStorageOS 的 in-tree 卷插件。
  • 在 Kubernetes v1.25,Kubelet 通过 IPTablesCleanup 特性门控对 IPTables 链所有权进行清理,详情请参见 清理 IPTables 链所有权
  • 在 Kubernetes v1.25,kube-controller-manager 命令行参数移除deleting-pods-qpsdeleting-pods-burstregister-retry-count参数。
  • 在 Kubernetes v1.25 ,kube-apiserver 移除--service-account-api-audiences启动参数,替换为--api-audiences
  • 在 Kubernetes v1.26,移除 GlusterFS 驱动,移除已经迁移使用 CSI 的 OpenStack 存储(Cinder 卷类型)in-tree 插件代码。
  • 在 Kubernetes v1.26,从 client-go 和 kubectl 中移除内嵌的特定云厂商身份验证代码,可选使用 身份验证插件机制 替代。
  • 在 Kubernetes v1.26,kubectl 开始废弃--prune-whitelist参数,替换为--prune-allowlist
  • 在 Kubernetes v1.26,移除 动态 kubelet 配置 特性门控及其在 kube-apiserver 中的代码。
  • 在 Kubernetes v1.26,kube-apiserver 命令行参数开始废弃--master-service-namespace参数。
  • 在 Kubernetes v1.26,kubectl run 命令行参数正式标记弃用,包括:--cascade--filename--force--grace-period--kustomize--recursive--timeout--wait
  • 在 Kubernetes v1.26,移除 kube-proxy userspace 模式,已弃用一年多的userspace代理模式不再受 Linux 或 Windows 支持(详情请参见 Remove kube-proxy userspace modes)。Linux 用户应使用iptablesipvs,Windows 用户应使用kernelspace,当前使用--mode userspace会失败。Windows winkernel kube-proxy 不再支持 Windows HNS v1 APIs。

API 版本变更

  • 在 Kubernetes v1.25,移除batch/v1beta1版本 API 的 CronJob(定时任务),继续提供 Kubernetes v1.21 版本开始可用batch/v1版本 API。
  • 在 Kubernetes v1.25,移除discovery.k8s.io/v1beta1版本 API 的 EndpointSlice(端点切片),继续提供 Kubernetes v1.21 版本开始可用discovery.k8s.io/v1版本 API。
  • 在 Kubernetes v1.25,移除events.k8s.io/v1beta1版本 API 的 Event,继续提供 Kubernetes v1.21 版本开始可用batch/v1版本 API,具体字段变更如下:
    • type字段只能设置为NormalWarning之一。
    • involvedObject字段被更名为regarding
    • actionreasonreportingControllerreportingInstance字段,在创建新的events.k8s.io/v1 版本 API 的 Event 中都是必需的字段。
    • 使用eventTime,而不是已被弃用的firstTimestamp字段(该字段已被更名为deprecatedFirstTimestamp,且不允许出现在新的events.k8s.io/v1 Event 对象中)。
    • 使用series.lastObservedTime,而不是已被弃用的lastTimestamp字段(该字段已更名为deprecatedLastTimestamp,且不允许出现在新的events.k8s.io/v1 Event 对象中)。
    • 使用series.count,而不是已被弃用的count字段(该字段已更名为deprecatedCount,且不允许出现在新的events.k8s.io/v1 Event 对象中)。
    • 使用reportingController,而不是已被弃用的source.component字段(该字段已更名为deprecatedSource.component,且不允许出现在新的events.k8s.io/v1 Event 对象中)。
    • 使用reportingInstance,而不是已被弃用的source.host字段(该字段已被更名为deprecatedSource.host,且不允许出现在新的events.k8s.io/v1 Event 对象中)。
  • 在 Kubernetes v1.25,移除 HorizontalPodAutoscaler 的autoscaling/v2beta2版本 API。
  • 在 Kubernetes v1.25 ,移除 PodDisruptionBudget 的policy/v1beta1版本 API,继续提供policy/v1版本 API。
  • 在 Kubernetes v1.25 ,移除 RuntimeClass 的node.k8s.io/v1beta1版本 API,继续提供node.k8s.io/v1版本 API。
  • 在 Kubernetes v1.26,移除 FlowSchema 和 PriorityLevelConfiguration 的flowcontrol.apiserver.k8s.io/v1beta1版本 API,继续提供flowcontrol.apiserver.k8s.io/v1beta2flowcontrol.apiserver.k8s.io/v1beta3
  • 在 Kubernetes v1.26,kubeconfig 中加入DisableCompression字段,默认关闭。

参考链接

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