抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

总结 1.19~1.32 版本的新功能特性,给集群升级提供参考。

  1. 资源管理增强
    • CPU和内存管理优化:引入strict-cpu-reservation选项,在CPU管理器静态策略下,能隔离系统守护进程的预留CPU,避免BestEffort和Burstable类型的Pod占用,提升对延迟敏感的电信/网络功能虚拟化(NFV)工作负载的可靠性和性能一致性 。内存管理器功能从beta版升级为稳定版,为QoS类为Guaranteed的Pod提供更好的内存对齐和分配 ,新增memory_manager_pinning_requests_total等指标,用于监控内存分配情况 。
    • Pod级资源配置扩展:允许在Pod级别指定资源请求和限制,扩展了Pod API 。这一特性与容器级资源设置兼容,且能与拓扑管理器、内存管理器、垂直Pod自动扩缩(VPA)等功能协同工作,便于更精细地管理Pod资源 。
  2. 安全相关新特性
    • 服务帐户令牌改进:在服务帐户令牌声明中加入节点名称,用户可在授权和准入(验证准入策略)过程中使用该信息,防止服务帐户凭据成为节点权限提升的途径 。
    • 增强审计与凭证跟踪能力:X.509证书生成唯一的凭证ID,JWT令牌支持jti(JWT ID)声明,可更详细地跟踪认证事件,提升审计能力 。
    • 细粒度kubelet API授权(Alpha):新增细粒度的kubelet API授权检查,针对kubelet/configz/healthz/pods API,用户无需向调用者授予nodes/proxy资源权限,而是分别授予nodes/configznodes/healthznodes/pods权限,即可访问kubelet API 。
  3. 调度功能改进异步抢占(Alpha):调度器引入异步抢占机制,高优先级的Pod可通过并行驱逐低优先级的Pod获取所需资源,减少集群中其他Pod的调度延迟,提升调度效率 。
  4. 存储功能升级
    • 自动删除StatefulSet创建的PVC(稳定):StatefulSet创建的PersistentVolumeClaims(PVC)在不再需要时可自动删除,简化了有状态工作负载的存储管理,降低了孤立PVC的风险,同时确保在StatefulSet更新和节点维护期间数据的持久性 。
    • 支持调整内存卷大小(稳定):可根据Pod资源限制动态调整内存支持的卷大小,提升了工作负载的可移植性和节点资源利用率 。
    • 卷扩容失败恢复(Beta):放宽了PVC对象的API验证,允许在卷扩容失败时减小请求的容量大小进行重试 。为防止恶意用户滥用配额系统,配额计算会使用max(pvc.spec.capacity, pvc.status.allocatedresources),且只有在先前的扩展因终端故障失败后,resize-controller才会减少pvc.status.allocatedresources
    • 新的卷源类型(Alpha):引入新的volume source类型,支持挂载OCI图像和/或工件,简化了Pod中容器间的文件共享过程,并提供了工件文件和目录的挂载运行时指南 。
  5. 日志与监控优化
    • Kubelet的OpenTelemetry跟踪(Beta):Kubelet为其发起的协调循环以及对kubelet认证的HTTP服务器、CRI、CNI和CSI接口的传入/传出请求生成和导出跨度(span) 。跟踪数据可用于诊断相关流程中的延迟问题,帮助监控、检测和解决与Kubelet相关的问题 。
    • 核心组件状态端点(Alpha):为kube-scheduler和kube-controller-manager等核心组件新增/statusz/flagz两个HTTP状态端点 。/statusz端点有助于排查性能问题,方便检查依赖冲突或版本不匹配;/flagz端点可帮助用户动态检查运行中的Kubernetes组件的活动标志 。
    • 分离容器的标准输出和标准错误日志流(Alpha):使API服务器能够返回容器的特定日志流,用户可获取容器的特定日志流,增强了日志查看的便利性和针对性 。
  6. 应用编排相关特性
    • Job的managed-by字段(Beta):Job的managed-by字段升级到beta阶段,允许外部控制器(如Kueue)管理Job同步,便于在多集群环境中进行作业调度,使在管理集群中创建的作业能在工作集群中镜像 。
    • 为StatefulSet和Job创建的Pod新增标签和注解:为StatefulSet和Job创建的Pod新增标签,用于标记自身索引;为从CronJob派生的Job对象添加新注解batch.kubernetes.io/cronjob-scheduled-timestamp,方便跟踪和管理相关作业 。
  7. API功能拓展
    • 自定义资源字段选择器(稳定):开发者可为自定义资源添加字段选择器,实现对自定义资源更高效、精确的过滤,促进更好的API设计实践,功能与Kubernetes内置对象的字段选择器类似 。
    • 结构化授权配置(稳定):API服务器可配置多个授权器,形成结构化的授权决策链,并支持在Webhook中使用CEL匹配条件,实现更细粒度的访问控制 。
    • 鉴权属性扩展(Beta):鉴权属性扩展到包括列表、监视和删除集合中的字段选择器和标签选择器,使授权者在做出授权决定时可使用这些选择器,增强了授权的灵活性和精确性 。
    • 环境变量支持特殊字符(Beta):允许环境变量中使用特殊字符,为应用配置提供了更大的灵活性 。
  8. 节点管理提升
    • Kubelet健康检查与重启优化:借助systemd看门狗功能,在Kubelet健康检查失败时重启Kubelet,并限制给定时间内的最大重启次数,增强了Kubelet的可靠性 。
    • 改进镜像拉取错误消息:当出现镜像拉取回退错误时,Pod状态中显示的消息更加人性化,在status.containerStatuses[*].state.waiting.message字段中添加错误原因(imagepullbackoff),帮助用户更快速地定位问题根源 。
    • 支持Windows节点优雅关机:为Kublet添加了优雅关闭Windows节点的功能,确保Windows节点上运行的Pod能被优雅地终止,工作负载可在不中断的情况下重新调度,使Windows节点在Pod生命周期管理方面与Linux节点保持一致 。
  9. 其他特性
    • 自动重试资源创建请求(稳定):当使用generateName创建资源时,如果生成的名称与现有资源名称冲突,kube-apiserver会自动重试,最多重试7次 。
    • 自定义kubectl debug配置文件(稳定):在kubectl debug命令的预定义配置文件基础上,添加了新的自定义配置文件功能,使kubectl debug pod/node或临时容器规范可配置,方便用户根据具体需求进行调试 。
  1. 安全相关

    • AppArmor支持(稳定):全面支持AppArmor,允许在API中为容器或Pod指定AppArmor配置文件,由容器运行时应用该配置文件 。通过限制容器的权限,减少潜在的安全风险,统一的配置方式也简化了安全策略的管理 。配置时使用appArmorProfile.type字段,例如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    apiVersion: v1
    kind: Pod
    metadata:
    name: mypod
    spec:
    containers:
    - name: mycontainer
    image: myimage
    securityContext:
    appArmorProfile: "runtime/default"
    • 具有不健康Pod驱逐策略的PodDisruptionBudget(稳定):为PodDisruptionBudget(PDB)引入Pod健康策略,允许用户在保持Pod可用性的同时,对健康但未就绪的Pod指定操作 ,对Pod驱逐过程提供更精细的控制,确保在资源稀缺时只有强大的Pod免于被驱逐,减少干扰 。
    • ServiceAccountTokenNodeBinding(Beta):默认启用,允许创建直接绑定到节点的ServiceAccount Token 。当Token过期或者关联的节点或ServiceAccount被删除时,Token将失效,增强了Token的安全性和有效性 。
  2. 资源管理

    • Pod级资源限制(Alpha):允许在Pod级别定义资源使用上限,即使单个容器的资源使用情况不同,Pod的总资源消耗也不能超过指定限制 。在Pod的spec中,除了容器的资源限制外,还可设置Pod级别的资源限制,例如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    apiVersion: v1
    kind: Pod
    metadata:
    name: my-pod
    spec:
    containers:
    - name: my-container
    image: my-image
    resources:
    limits:
    cpu: "2"
    memory: "2gi"
    limits:
    cpu: "4"
    memory: "4gi"
    • kubelet并行拉取镜像限制(Beta):可在节点级别设置并行拉取镜像的数量限制。通过在kubelet配置中添加maxParallelImagePulls字段,结合serialize-image-pulls字段,实现对镜像拉取的控制 。若两者都未设置,serialize-image-pulls默认值为truemaxParallelImagePulls默认值为1;若serialize-image-pulls未设置而maxParallelImagePulls设置了,则serialize-image-pulls取决于maxParallelImagePulls;若两者都设置了,则需满足:当serialize-image-pullstrue时,maxParallelImagePulls应为nil1;当serialize-image-pullsfalse时,maxParallelImagePulls应大于0
    • 就地更新Pod资源(Beta):允许在不重启Pod或其容器的情况下更新Pod的资源请求和限制 。使PodSpec在资源方面可变,Pod状态能反映分配给Pod的资源以及实际应用到Pod及其容器的资源信息 。
  3. 流量管理

    • 多个服务CIDR(Beta):引入新的分配器逻辑,使用ServiceCIDRIPAddress两个新API对象,允许用户动态增加可用的服务IP数量 。服务可以分配多个CIDR块,以在更大的IP地址范围内实现负载平衡 。创建ServiceCIDR后不可变,只有在没有可分配IP时才能删除,允许重叠的ServiceCIDR ,API服务器会确保存在默认的ServiceCIDR ,所有IP地址必须属于已定义的ServiceCIDR ,每个具有clusterIP的服务都必须有一个关联的IPAddress对象 。
    • 调度提示(Beta):kube - scheduler现在支持VolumeRestriction插件调度提示,可向调度程序提供有关Pod所需卷类型的建议,调度程序尝试根据这些建议将Pod调度到具有相关卷类型的节点上 。
    • 随机Pod选择算法(稳定):在缩减ReplicaSet规模时,采用随机算法选择要删除的Pod ,避免了确定性方法导致的Pod亲和性问题,提高了集群整体利用率,有助于在反复缩放后维持故障域之间的平衡 。
  4. 应用编排

    • 允许StatefulSet控制开始副本序号(稳定):通过.spec.ordinals字段配置每个Pod的整数序号,可实现StatefulSet应用的逐步迁移 。如果.spec.ordinals.start被设置,Pod将被分配从.spec.ordinals.start.spec.ordinals.start + replicas - 1的序号,便于在不同命名空间、集群或分段之间迁移StatefulSet,且不会中断应用 。
    • 具有可重试和不可重试的Pod故障的作业(稳定):增强了作业处理能力,根据Pod的退出代码或删除情况来决定作业是否重试 。Job API进行了扩展,使用更友好的语法基于失败Pod的最终状态终止作业 。
    • 弹性索引作业(稳定):对于索引作业,在更新后的spec.completions值等于spec.parallelism时,允许变更spec.completions ,而对于未更改spec.completions的作业,其成功和失败语义保持不变,实现了动态工作负载修改 。
    • Job成功/完成策略(Beta):允许为Indexed Job配置成功策略,用户可以基于声明的策略标记作业为成功,当作业满足成功标准时,终止剩余的Pod 。这对于像MPI和PyTorch这样的批处理工作负载很有用,以前只有所有索引都成功时,索引作业才会被标记为完成,现在可以根据领导者索引等条件判断作业成功 。
  5. 存储功能

    • 持久卷回收策略增强(稳定):支持在PersistentVolume上添加Finalizer,确保仅在删除对应的底层存储资源后才删除具有Delete回收策略的PersistentVolume 。默认启用HonorPVReclaimPolicy,新引入的kubernetes.io/pv - controllerexternal - provisioner.volume.kubernetes.io/finalizer终结器仅添加到动态配置的卷中 。
    • 持久卷最后阶段转换时间(稳定):PersistentVolume新增status.lastTransitionTime字段,记录持久卷最后一次转换到不同阶段的时间戳,帮助集群管理员在卷状态转换时采取适当行动,监控存储资源性能,为设置和监控存储服务的SLO提供数据支持 。可以使用kubectl get pv -o custom-columns=NAME:.metadata.name,STATUS:.status.phase,LAST:.status.lastTransitionTime命令进行监控 。
    • 支持OCI兼容的图像卷(稳定):允许直接将OCI图像作为卷挂载到Pod,简化了AI/ML工作流中数据和模型的访问和管理,加速模型和算法的部署和测试 ,例如:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    apiVersion: v1
    kind: Pod
    metadata:
    name: mypod
    spec:
    containers:
    - name: mycontainer
    image: myimage
    volumes:
    - name: myvolume
    ociImage:
    kind: oci
  6. 网络功能增强Ingress连接(稳定):通过kube - proxy更好地管理Ingress连接,提高了在终止节点和kube - proxy不健康节点上的端点的Ingress连接可靠性,减少流量丢失,确保服务在节点维护期间的连续性和稳定性,自v1.30起默认启用该特性 。

  7. CLI工具改进

    • kubectl debug自定义配置文件(Beta)kubectl debug支持配置自定义模板(Profile)调试Pod,允许在调试容器中挂载数据卷和其他资源,解决了在调试基于无壳基础镜像构建的应用时遇到的挑战,在不牺牲调试能力的情况下,鼓励采用更安全的无壳基础镜像 。
    • 从SPDY转换到WebSockets(Beta):Kubernetes客户端(如kubectl)中用于kubectl cpkubectl attachkubectl execkubectl port-forward命令的流式传输协议更新为WebSocket流式传输协议,该协议更现代、更灵活 。
  8. 其他功能

    • MatchLabelKeysInPodAffinity特性门控(Beta)podAffinitypodAntiAffinity默认支持更为精细的配置字段matchLabelKeysmismatchLabelKeys,解决了调度器在Deployment滚动更新期间无法区分新老Pod,继而导致调度结果不符合亲和性和反亲和性预期的问题 。
    • DisableNodeKubeProxyVersion(Beta):默认启用,不再在节点的status.nodeInfo.kubeProxyVersion字段中显示kube - proxy版本,因为该字段所显示的值不准确,无法正确提供kube - proxy的实际版本信息 。
    • RecursiveReadOnlyMounts(Beta):默认启用,允许在Pod的卷挂载上设置递归的只读属性,即以此种方式挂载的卷及其内部的所有子目录和文件都将被设置为只读状态 。
    • API Server一致性读(Beta):API Server提供从缓存中实现一致性读的能力,减少将请求透传到etcd,提升了List请求的效率 。
  1. 稳定版功能升级
    • 容器资源指标的Pod自动扩缩:基于容器资源指标的水平Pod自动扩缩功能升级为稳定版,聚焦于单个容器的指标,优化了水平Pod自动扩缩器的能力,使应用在不同负载条件下能更平稳运行 。
    • Pod调度可用性:该功能在v1.27升级为测试版,v1.30成为稳定版。通过设置或删除Pod的.spec.schedulingGates,可控制Pod的调度时机,避免在集群资源未准备好时调度Pod,减轻调度器负担,节省成本,还能实现配额机制、安全控制等自定义功能 。
    • PodTopologySpread的minDomains参数:此参数在v1.30稳定,用于定义最小的域数,与集群自动缩放器配合使用。当域数量不足时,Pod会被标记为无法调度,自动缩放器会提供新节点,最终实现Pod在足够域中的分布 。
    • kubelet重启后VolumeManager的稳健重建:卷管理器重构,使kubelet在启动时能填充现有卷挂载的额外信息,增强了kubelet重启或机器重启后的卷清理能力 。该功能通过功能流程和功能开关“NewVolumeManagerReconstruction”实现,稳定后功能开关锁定不可禁用。
    • 防止卷还原时未经授权的卷模式转换:在Kubernetes 1.30中,控制平面会阻止未经授权的卷模式更改。若集群管理员需要在还原时允许此类更改,需授予相关身份主体权限 。
    • KMS v2支持的静态加密:KMS v2的静态加密功能达到稳定,提供性能优化、密钥轮换、健康检查与状态监控等功能,为Kubernetes集群资源加密提供可靠方案 。KMS v1功能门默认关闭,若继续使用需手动开启。
  2. beta版特性演进
    • 节点日志查询:在v1.27引入的获取节点上服务日志的功能,在v1.30升级为测试版。使用时需启用NodeLogQuery功能门,并将kubelet的“enableSystemLogHandler”和“enableSystemLogQuery”配置选项都设置为true 。在Linux上可通过journald获取日志,Windows上可从应用程序日志提供程序获取,也可读取指定路径文件获取。
    • CRD验证棘轮:启用CRDValidationRatcheting功能门后,Kubernetes对CustomResourceDefinitions实施验证棘轮。API服务器允许更新部分无效但未更改无效部分的资源,同时不允许将有效资源更新为无效资源 ,方便CRD作者添加新验证,用户也可安全更新模式。
    • 上下文日志记录:为开发人员和运维人员提供了将可定制、可关联的上下文详细信息(如服务名称和事务ID)注入日志的能力,通过WithValues和WithName方法实现。这有助于跨分布式系统关联和分析日志数据,提高故障排查效率 。
    • 结构化授权配置:该功能进入beta阶段且默认启用,支持创建具有多个webhook的授权链,可通过结构化文件进行精细控制,如定义请求验证顺序、设置失败时的显式拒绝等。还能通过CEL规则预过滤请求,减少不必要的webhook调用,且API服务器会在配置文件修改时自动重新加载授权链 。
    • 基于容器资源的Pod自动缩放:之前为alpha功能,在v1.30升级到beta。它允许基于容器资源指标进行Pod自动缩放,使水平Pod自动缩放器可依据单个容器的资源使用情况进行更精准的扩缩容决策 。
    • JobBackoffLimitPerIndex特性门控:进入Beta阶段,默认为true。允许在索引作业中指定每个索引的最大重试次数,避免单个索引持续失败影响整个作业,提高作业执行的可靠性 。
    • LoadBalancerIPMode特性门控:允许为LoadBalancer类型的Service新增.status.loadBalancer.ingress.ipMode字段,用于指定负载均衡器IP的转发行为,但需在指定.status.loadBalancer.ingress.ip字段时才能使用 。
    • ImageMaximumGCAge:允许kubelet配置未使用镜像被垃圾回收前的最大存活时间,默认值为“0s”(不设置时间限制)。达到指定时间且未被使用的镜像可被垃圾收集机制清理 。
  3. alpha版新特性引入
    • 结构化参数的动态资源分配:作为v1.26引入的动态资源分配功能的扩展,构建了支持使资源请求参数更透明的框架。驱动程序可使用Kubernetes预定义的“结构化模型”管理和描述资源,让相关组件(如调度器)无需与第三方控制器频繁交互即可对资源进行决策 。
    • 支持Pod中的用户命名空间:该功能进入beta阶段,支持在Pod中使用用户命名空间,能更好地隔离Pod,预防或缓解如CVE - 2024 - 21626等高风险漏洞。支持带或不带卷的Pod、自定义uid/gid范围等 。
    • 更细粒度的作业Pod失败策略原因:为作业的Pod失败策略添加可定制的原因字段,每个规则触发时可设置不同的机器可读原因,方便高层API更精确地响应作业失败情况,尤其可将失败与特定容器退出代码关联 。
    • 作业成功/完成策略:为索引作业扩展了Job API,允许基于预定义条件声明作业成功。解决了部分批处理工作负载(如使用MPI或PyTorch的作业)中,仅当所有索引成功才标记作业完成的局限性 。
    • Pod亲和性和反亲和性的matchLabelKeys和mismatchLabelKeys支持:PodAffinity和PodAntiAffinity新增对matchLabelKeys和mismatchLabelKeys的支持,解决了调度器在Deployment滚动更新期间无法区分新老Pod,导致调度结果不符合亲和性和反亲和性预期的问题 。
    • 新增UserNamespacesPodSecurityStandards特性门控:支持将用户命名空间集成到Pod安全标准中,开启时允许在Pod的安全上下文中以非root用户或指定用户身份运行容器 。目前该特性门控处于Alpha阶段,默认为false。
    • 新增DisableNodeKubeProxyVersion特性门控:弃用status.nodeInfo.kubeProxyVersion字段,禁止设置Node端的kubeProxyVersion字段。由于kubelet不一定能准确识别kube - proxy的版本,该字段存在不准确问题 。此特性门控当前为Alpha阶段,默认为false。
  1. 稳定版特性升级
    • readwriteoncepod持久卷访问模式:在v1.22版本作为CSI卷的alpha特性引入,到v1.29版本已普遍可用。该模式确保整个集群中只有一个Pod能对特定的PersistentVolumeClaim(PVC)进行读写操作,适用于对数据安全要求较高、需限制写入者数量的场景 。
    • 节点卷扩展时对CSI驱动程序的secret支持:在v1.25版本引入的CSINodeExpandSecret功能,到v1.29版本成为稳定特性。它允许在NodeExpandVolumeRequest中传递可选的secret字段,供CSI驱动在底层存储系统上进行节点卷扩展操作时使用,如在处理加密块存储扩展时提供访问凭据 。
    • KMSv2静态加密功能:KMSv2在v1.29版本稳定上线,带来性能提升、密钥轮换、健康检查与状态监控以及可观测性方面的多项改进,为Kubernetes集群中所有资源的加密提供了可靠方案 。KMSv1的功能门默认关闭,若要继续使用需主动开启 。
    • 基于CEL的CRD规则验证:基于通用表达式语言(CEL)的CRD验证能力在v1.29版本达到GA(General Availability,通用可用)阶段。该功能可直接在CRD声明文件中编写验证规则,无需使用准入Webhook或自定义验证器,简化了CRD的开发和维护成本 。它足够轻量和安全,可直接在kube-apiserver中运行。
    • 为动态和静态分配保留NodePort端口范围:此功能达到稳定状态。它为NodePort类型的Service引入可选范围的动态和静态保留,提供自动随机生成和手动设置两种端口配置方法。kube-apiserver可通过--service-node-port-range标志控制NodePort的端口范围,默认是30000 - 32767 。通过特定计算方法划分静态和动态端口段,降低了使用固定端口创建NodePort类型Service时发生冲突的风险,提高了集群稳定性 。
  2. beta版特性更新
    • 调度器QueueingHint功能:该功能为提升重新排队的效率带来了新思路,能够显著降低无效的调度重试次数,优化了调度器的吞吐量 。
    • 节点生命周期与污点管理分离:将执行基于污点的Pod驱逐的TaintManager从NodeLifecycleController中分离,形成两个独立的控制器:NodeLifecycleController负责向不健康的节点添加污点,TaintManager负责删除带有NoExecute效果的污点节点上的Pod 。同时推出了pod deletion totalpod deletion duration seconds两项新指标,用于统计删除的Pod数量和删除操作所花费的时间 。
    • 清理基于Secret的遗留ServiceAccount令牌:为减少攻击面,LegacyServiceAccountTokenCleanup功能将长时间未使用(默认为1年)的遗留自动生成的基于Secret的令牌标记为无效,在被标记为无效后若再经过长时间(默认另外1年)未尝试使用,则自动将其移除 。
    • Sidecar容器特性:Sidecar容器在v1.28版本为alpha特性,v1.29版本升级为beta并默认启用。通过将Sidecar容器定义为Pod规范中init容器的一部分,并规定其遵守“始终重新启动”策略,增强了Sidecar容器的生命周期管理 。在Pod删除时,Sidecar容器的停止顺序将按照它们在Pod规范中定义的相反顺序进行,且在主容器完全终止前,Sidecar容器会继续运行,确保其能持续为Pod中的其他容器提供服务 。
  3. alpha版新特性引入
    • 使用MatchLabelKeys定义Pod的亲和性或反亲和性:在PodAffinity/PodAntiAffinity中引入该增强功能,通过在Pod清单文件的specpodAffinity子类别下指定matchLabelKeys及相应键值,提高了在滚动更新过程中计算的准确性 。
    • nftables作为kube-proxy的后端:为解决iptables存在的性能问题,引入基于nftables的kube-proxy新后端 。管理员需要启用nftablesProxyMode特征门控,并使用--proxy-mode=nftables标志来运行kube-proxy 。不过,使用该后端可能需要对某些CNI插件和NetworkPolicy实现进行更新,可能存在兼容性问题 。
    • 用于管理服务IP地址范围的API:通过使用ServiceCIDRIPAddress两个新的API对象,实现了新的分配器逻辑,允许用户在不重启kube-apiserver的情况下,动态增加可用的服务IP数量,解决IP耗尽或IP重新编号等问题 。
    • 为containerd/kubelet/CRI添加支持,允许根据运行时类别拉取镜像:新增根据Pod的runtimeClass拉取容器镜像的功能,但在v1.29版本下默认关闭 。
    • Transition SPDY to WebSockets:该特性旨在弃用SPDY,转而使用WebSockets进行Kubernetes API Server通信 。WebSockets提供了更现代、可扩展的协议,有助于提高整体的可靠性和可维护性 。
  1. 版本管理与兼容性:将版本偏差策略从n - 2扩展到n - 3,即允许控制平面和节点之间的版本差异增大到3个小版本 。如控制平面为v1.28时,节点版本可为v1.28、v1.27、v1.26和v1.25。这减少了节点升级次数和对业务的影响,使节点年度升级更可行,契合年度支持策略 。
  2. 安全增强
    • Kubelet TLS引导自动化:新的Kubelet TLS引导功能可自动创建TLS证书,便于Kubelet与控制平面安全通信,提升集群安全性 。
    • 非优雅节点关闭恢复(稳定):该功能已稳定,当节点意外关闭或处于不可恢复状态(如硬件故障)时,能让有状态工作负载在不同节点上成功重启 。通过为节点打上out-of-service污点,可强制删除相关Pod和VolumeAttachments,在健康节点上创建新Pod 。
  3. 性能和资源管理优化
    • 拓扑管理器改进:拓扑管理器功能得到优化,可基于硬件拓扑(如NUMA架构)更好地分配资源 ,提升复杂硬件环境下的资源利用效率 。
    • 支持更多的节点内存交换(Beta):NodeSwap能力进阶至Beta版本,默认关闭,需使用NodeSwap门控打开 。可为Linux节点上的Kubernetes工作负载逐个节点地配置内存交换 ,满足节点管理员性能调优和应用程序开发人员的需求 。
  4. API和自定义资源增强
    • CRD验证规则改进(Beta):通用表达式语言(CEL)用于CRD验证达到Beta阶段,可直接在CRD模式中添加验证表达式,避免使用验证Webhook 。新增的reasonfieldPath字段,在验证失败时能指定失败原因和字段路径 。
    • 验证准入策略(Beta):验证准入策略(ValidatingAdmissionPolicy)进入Beta阶段,可作为验证准入Webhooks的替代方案,使用CEL表达式验证资源请求 。API Server会验证请求是否符合CEL表达式 ,还增加了对“authorizer”变量的正确处理、对messageExpression字段的类型检查等新功能 。
    • 准入Webhooks匹配条件(Beta):准入Webhooks的匹配条件功能升级为Beta,默认启用 。validatingwebhookconfiguration和mutatingwebhookconfiguration的matchcondition字段为CEL表达式,只有表达式为true的准入请求才会被发送到Webhook,缩小了远程HTTP调用范围 。
    • 混合版本代理(Alpha):在API服务器的聚合层中启用混合版本代理(Alpha特性) 。当集群中有多个混合版本的API服务器时,该代理能将本地API服务器无法识别但其他API服务器支持的请求,代理到兼容的API服务器,对客户端透明 。
  5. 开发者工具和灵活性提升
    • Kubectl调试增强:新的kubectl debug工具允许在现有Pod内创建临时调试容器,简化了调试流程 。
    • Sidecar容器支持(Alpha):新增SidecarContainers特性门控(Alpha阶段,默认关闭),在Init容器中添加restartPolicy字段来标识Sidecar容器 。Sidecar容器启动时,Kubelet不会等待其完成,仅等待启动完成;失败时会重启(除非Pod的restartPolicynever);主容器运行时它持续运行,主容器完成后终止 。
  6. 数据备份和恢复功能新增:引入新的卷快照和恢复功能,便于数据管理和恢复 。PersistentVolumeClaim(PVC)的.status.resizeStatus字段替换为.status.allocatedResourceStatus Map结构字段,用于表示调整PVC大小时的状态 。
  7. 作业相关优化
    • 作业替换策略(Alpha):JobPodReplacementPolicy(Alpha特性门控)控制只有Pod达到Failed阶段(status.phase: Failed)才被替换,而非在处于终止过程(有deletionTimestamp)时替换,避免两个Pod同时占用索引和节点资源 。可在Job的Spec中定义podReplacementPolicy,目前仅可设置为Failed 。
    • 作业重试回退限制(Alpha):JobBackoffLimitPerIndex(Alpha特性门控)通过配置.spec.backoffLimitPerIndex,限制Indexed Job中一些索引的失败重试次数,避免单个索引持续失败导致整体Job失败 。
  8. 存储功能改进:可追溯的默认StorageClass赋值进入GA阶段 。PV控制器会自动为未设置storageClassName的未绑定PVC分配默认的StorageClass;API服务器中的PVC准入验证机制允许将值从未设置状态更改为实际的StorageClass名称 。
  9. 日志和监控功能增强:动态审计功能可用,可即时创建审计策略,能更灵活地适应不断变化的安全需求和合规标准 。
  10. 其他功能
    • 支持设备注入(Alpha):支持CDI(容器设备接口)注入到容器的Alpha特性,为向容器中注入复杂设备提供了标准化方式 。
    • API Server优化:改进了在缓存上执行GetList时的内存消耗;修复仅剩一个API Server副本时Kubernetes Service的Endpoint未摘除的问题;将OpenAPI v2控制器设置为惰性聚合CRD信息,减少CPU和内存消耗,提升大量CRD安装时的性能(但客户端首次请求会变慢) 。
    • Kube Controller Manager配置更新:Kube Controller Manager新增--concurrent-cron-job-syncs配置CronJob控制器的并发度,新增--concurrent-job-syncs配置Job控制器的并发度 。
  1. 安全方面
    • Seccomp默认启用(稳定):Seccomp达到稳定版并默认激活,运行时默认的Seccomp配置文件成为所有工作负载的默认配置 。可在节点启动脚本或模板中用--kubelet-extra-args --seccomp-default标志为节点上的容器设置默认配置文件。启用Seccomp可能影响部分工作负载,不过可通过禁用或创建自定义配置文件解决,如使用安全配置文件操作符管理自定义配置文件。
    • 镜像仓库切换k8s.gcr.io仓库被冻结,registry.k8s.io成为新的Kubernetes镜像仓库 ,用户需更新所有清单和配置以适应此变化,避免因镜像拉取失败导致集群故障。
  2. 资源管理方面
    • Pod资源的纵向弹性伸缩(稳定):支持原地调整Pod资源大小,解决了横向弹性冷启动问题 。在1.25版本引入相关支持的基础上,Pod的容器中添加了resizepolicy字段,控制资源变更时容器是否重启;容器状态中增加allocatedresourcesresources字段,分别描述分配和实际应用的资源;Pod状态中添加resize字段,记录请求调整Pod大小的状态。
    • 增强Kube API QPS和KubeAPIBurst限制:Amazon EKS的Kubelet的Kube API QPS限制从每秒10次提升到50次,KubeAPIBurst限制从每秒20次提升到100次 。这一调整由Amazon EKS优化的AMI采用,能加快Pod启动时间,使Kubelet在集群规模扩展时更高效地处理Pod启动任务。
  3. 网络方面
    • 优化kube-proxy的iptables模式性能(Beta)minimizeiptablesrestore功能在1.26版本引入,1.27版本升级为Beta并默认启用 。该功能改善了大型集群中kube-proxy的iptables模式性能,若遇到服务信息未正确同步到iptables的问题,可通过设置--feature-gates=minimizeiptablesrestore=false禁用,并可查看sync_proxy_rules_iptables_partial_restore_failures_total指标监控规则同步失败次数。
    • 多服务CIDR(Alpha):重新设计了内部IP分配方式,移除了一些限制 。在查询集群资源时能提供更清晰的信息,方便集群管理员管理大型集群的内部IP,提升了集群网络管理的灵活性。
  4. 存储方面
    • Volume Group快照(Alpha):允许对Pod的所有卷同时进行快照 ,这对容灾备份和故障恢复意义重大,也为安全研究带来变革,使排查问题时可对照快照和Pod状态 。该功能的API定义维护在https://github.com/kubernetes-csi/external-snapshotter
    • StatefulSet PVC自动删除功能(Beta):在v1.23中引入的StatefulSet自动删除PVC功能在1.27版本升级为Beta并默认开启 。用户可配置whendeletedwhenscaled阶段触发retaindelete行为,默认是retain,即只有配置了delete策略的StatefulSet被删除时,才会触发对应PVC的删除操作。
  5. 日志与监控方面
    • API Server和Kubelet的Tracing功能(Beta):API Server Tracing升级为Beta状态并默认启用,目前支持kube-apiserver和etcd组件的Tracing,未来会添加对client-go及其他组件的支持 。kube-apiserver的Tracing需指定配置文件和接收端才能启用;Kubelet和容器运行时通过CRI调用的Tracing也默认开启,但同样需配置接收端。
    • 上下文日志(持续推进):上下文日志帮助用户理解日志上下文,提升日志可观测性 。kube-controller-manager已完成相关迁移工作,kube-scheduler的迁移工作将在1.28版本完成。
    • Kubectl访问节点日志:Kubectl支持获取节点日志,通过kubelet的新API端点和kubectl的相应实现 ,用户可使用kubectl get --raw "/api/v1/nodes/node-1.example/proxy/logs/?query=kubelet"之类的命令获取节点日志,方便诊断和排查kubelet问题。
  6. API方面
    • 多项API弃用:多个Beta API和功能被弃用,如kubeadm v1beta2(可使用kubeadm config migrate迁移到v1beta3) 、resource.k8s.io/v1alpha1.podscheduling(使用resource.k8s.io/v1alpha2.podscheduling context)、dynamicresource management v1alpha1(使用v1alpha2) 、csi storage capacity: storage.k8s.io/v1beta1(使用v1)等 。此外,还有一些注释、插件和功能也被弃用或移除,如特定的Seccomp注释、securitycontext deny admission插件、service.kubernetes.io/topology-aware-hints注释(使用service.kubernetes.io/topology-mode替代) 以及k8s.gcr.io仓库(使用registry.k8s.io替代) 。同时,部分功能门控也被移除,如ipv6 dual stack expand csi volumes等 。
  7. 其他方面
    • Pod调度就绪态功能增强(Beta):在v1.26作为Alpha功能引入的Pod调度就绪态功能在v1.27升级为Beta并默认开启 。通过在Pod对象中引入.spec.schedulinggates字段定义Pod是否允许开始调度,适用于批量调度场景。对于受schedulinggate限制处于悬停状态的Pod,新版本允许修改其nodeaffinitynodeselector,但仅允许缩小节点范围(即添加新策略,不能删除或修改已有策略) 。
    • Kubectl插件改进:从1.27版本开始,开发者可通过插件在Kubectl中提供子命令 ,在不影响Kubectl代码库的情况下增加功能,提升用户体验。
    • 默认容器运行时变更:自1.24版本起,Amazon EKS的默认容器运行时为containerd,1.27版本移除了kubelet的--container-runtime命令 。用户需要从所有节点创建脚本和工作流程中删除该参数,如在terraform和eksctl的配置中进行相应修改。
  1. 网络功能
    • 服务内部流量策略(稳定):丰富了服务API,新增内部流量策略字段,有“cluster”(默认,随机分配请求到所有可用端点)和“local”(仅将请求发送到节点本地端点,同一节点无可用实例时丢弃请求)两个选项 ,“local”选项对发送指标或日志到作为DaemonSet运行的代理很有用。
    • 保留服务IP范围用于动态和静态IP分配(稳定):将服务IP范围分为两部分,避免动态IP分配和静态IP分配的服务之间发生冲突 。通过“–service-cluster-ip-range”(使用CIDR表示法)配置Kubernetes API服务器,方便管理服务的虚拟ClusterIP 。
    • 负载均衡器类型服务的混合协议支持(稳定):允许在同一服务定义中定义多种协议(如UDP、TCP) ,可在同一端口(如443)上为不同协议的服务提供支持,如为DNS或SIP服务器同时提供UDP和TCP请求服务 。
  2. 安全功能
    • kubelet凭证提供者(稳定):kubelet内置的容器镜像注册表凭证获取机制达到稳定版,原生支持从Azure、谷歌云、AWS容器镜像注册表动态获取凭证 ,并为未来的可扩展插件创建了API,替代了原有的in-tree实现 。
    • 签名发布工件(Beta):自1.24版本以Alpha特性引入的Kubernetes发布工件签名在1.26版本升级到Beta ,使用cosign进行无密钥签名,可验证二进制工件与镜像,增强了Kubernetes发布过程的软件供应链安全性,减少中间人攻击风险。
    • 减少基于Secret的服务账户令牌(Beta):进一步优化服务账户令牌管理,处于Beta阶段的该功能消除了自动生成基于Secret的服务账户令牌的需求 ,Kubernetes会对使用自动创建的基于Secret的服务账户令牌发出警告,并清理未使用的令牌 。
    • Windows特权容器(稳定)和主机网络(Alpha):Windows环境中特权容器的支持升级到稳定版,确保在Windows和Linux环境中特权容器具有相同的安全和操作体验;同时新增对Windows Pod主机网络的Alpha支持 ,拓展了Windows容器的网络功能。
  3. 资源管理功能
    • 动态资源分配(Alpha):引入新的Alpha功能,为高级硬件提供扩展的资源管理 ,带有用户友好的API用于描述资源请求。支持pod使用网络附加资源、在多个容器或pod间共享资源,还可自定义资源申请大小和初始化方式 ,加速了Kubernetes在科学研究、边缘计算等领域的应用。
    • 改进拓扑管理器中的多numa对齐:针对高性能计算工作负载,进一步优化了基于NUMA(非统一内存访问)的pod调度 ,允许根据不同的工作负载和CPU架构进行更精细的定制,使开发人员能够将工作负载与内存中的数据存储位置更高效地匹配,提升性能 。
  4. 组件监控功能Kubernetes组件健康SLI(服务级别指标):可配置Kubernetes组件二进制文件的SLI指标 ,启用后在“/metrics/slis”端点公开这些指标,无需Prometheus exporter即可获取,方便创建健康仪表板和配置PromQL警报,提升集群监控水平,确保集群稳定性 。
  5. 存储功能跨命名空间快照配置卷(Alpha):允许用户跨命名空间从VolumeSnapshot创建PersistentVolumeClaim ,打破了之前两个对象需在同一命名空间的限制,方便在不同命名空间的应用和服务间进行数据备份、保存数据库检查点等操作 。
  6. 应用编排功能
    • 允许StatefulSet控制开始副本序号(Alpha):用户可自定义StatefulSet副本的启动序号 ,为跨命名空间甚至跨集群迁移StatefulSet副本提供了更大的灵活性,支持无停机滚动迁移,简化了集群管理员管理多集群时的操作 。
    • Pod调度准备(Alpha):添加了让pod“等待调度”的功能,通过设置schedulingGates字段,控制pod的调度时机,当删除该字段中的内容时,pod会马上被调度 。
  7. 准入控制功能CEL用于准入控制(稳定):基于Kubernetes 1.25中的验证表达式语言的实际应用,通过将准入控制器的规则定义为Kubernetes对象,简化了集群设置,减少对webhook的管理,使实施Kubernetes安全性更加容易 。
  8. 容器统计功能无cAdvisor、全CRI的容器和Pod统计(Alpha):提供了一种替代方案,通过丰富CRI(容器运行时接口)API来收集容器的CPU、内存等指标 ,减少对cAdvisor的依赖,在从Kubernetes代码中删除cAdvisor的路线上更进一步 。在过渡期间,cAdvisor将不再生成CRI API中已有的指标,避免指标重复和不一致 。
  9. API相关变动:弃用了一些beta API和功能,包括树内GlusterFS驱动程序、<代码开始>kubectl –prune-whitelist<代码结束>(用<代码开始>–prune-allowlist<代码结束>代替)、若干个未使用的<代码开始>kubectl run<代码结束>选项(如<代码开始>–cascade<代码结束>、<代码开始>–filename<代码结束>等)、CLI flag <代码开始>pod-eviction-timeout<代码结束>、<代码开始>apiserver_request_slo_duration_seconds<代码结束>指标(用<代码开始>apiserver_request_sli_duration_seconds<代码结束>代替 ),以及Azure和Google Cloud的旧版身份验证 。
  1. 安全相关特性
    • Pod安全准入稳定:正式移除PodSecurityPolicy,PodSecurity admission升级到稳定版。它通过评估Pod的安全控制(PSS),在集群和命名空间级别应用安全标准,分为privileged、baseline、restricted三个级别 ,通过命名空间标签配置enforce、audit、warn等模式来实现安全策略。
    • 用户命名空间支持(Alpha):经过近六年的发展,终于在1.25版本以Alpha版本呈现。它能放宽对工作负载的一些约束,让原本被认为不安全的功能得以使用,同时增加了攻击者的入侵难度。
    • 容器检查点(Alpha):允许创建特定容器的快照,用于容器的取证分析。在容器被销毁前捕获快照,可对其进行分析和调查,改变了Kubernetes的取证方式,也为相关安全工具和事件响应带来新变革。
    • SELinux挂载卷改进:在挂载卷时对SELinux进行了优化,提升了安全性和稳定性,保障了容器存储相关的安全设置。
    • 节点扩展密钥:为节点扩展提供了更安全的密钥管理,增强了节点扩展过程中的安全性。
    • CVE提要改进:对官方CVE提要进行了优化,能更好地跟踪和处理容器漏洞,及时发现和应对安全问题 。
    • Seccomp默认启用(Beta):自1.22版本以来的Alpha功能Seccomp在1.25版本升级为Beta。默认启用Seccomp为容器增加了一层安全防护,防止CVE和0-day漏洞攻击 。
  2. 存储功能增强
    • CSI迁移接近完成:CSI迁移进入最终阶段,众多in-tree卷插件迁移到外部CSI驱动程序,如AWS EBS、GCE PD、vSphere等。同时,GlusterFS、Portworx被弃用,Flocker、Quobyte和StorageOS被移除 。这一变化有助于简化Kubernetes代码维护,推动存储功能的进一步发展。
    • 临时卷支持(稳定):支持本地临时存储的容量隔离,Pod和容器可对共享分区进行容量隔离,通过配置ephemeral-storage的请求和限制来管理资源 。这使得Kubernetes能在容器资源使用超限时进行Pod驱逐,调度器在调度时也会考虑存储需求,管理员还能设置资源配额和限制范围 。
    • 追溯默认存储类分配(Alpha):侧重于更改Kubernetes行为,使其对没有任何存储类的PVC具有追溯性。默认存储类主要由集群管理员在集群创建期间配置,当存储提供者或业务需求变化时,该功能方便管理员更改默认存储类。
  3. 网络功能优化
    • 网络策略端口范围支持(稳定):NetworkPolicy新增endPort字段,可轻松声明端口范围,改变了以往需逐个声明端口的繁琐方式,提升了网络策略配置的便捷性 。
    • 多ClusterCIDR(Alpha):创建新资源ClusterCIDRConfig,允许通过节点分配器控制CIDR段,使集群管理员能更灵活地扩展Kubernetes集群的PodCIDR,如添加网络范围段、增加节点可分配Pod数量、提供不连续范围等 。
    • 清理IPTables链所有权(Alpha):随着1.24版本Dockershim的移除,清理了kubelet在IPTables中创建的相关链。明确kube-proxy创建的链归属于kubelet,避免kubelet创建不必要的资源,使集群管理更加简洁 。
  4. API与资源管理改进
    • CRD验证表达式语言(稳定):CRD validation using expression language升级到稳定版,可使用Google Project CEL的表达式语言验证自定义资源,为自定义资源定义(CRD)提供了一种新的验证机制,与基于webhook的现有机制互补。简化了开发过程,相关信息可集中管理,还提供了cel_compilation_duration_seconds和cel_evaluation_duration_seconds两个新指标跟踪编译和评估时间。
    • 作业失败策略(Alpha):作业规范中的podFailurePolicy新增字段,可根据退出代码或与Pod删除相关的原因影响重试策略。区分基础设施错误和应用程序错误导致的作业失败,避免因应用程序错误而进行不必要的重试,提高了Kubernetes作业的效率,增强了作业对Pod驱逐的可靠性,减少管理员对失败作业的调查工作 。
    • Cron Job时区支持(Beta):Cron Job资源新增spec.timeZone字段,用户创建新作业时可定义时区,改变了以往作业创建时使用kube controller manager运行时区的情况,满足了用户对作业时间更灵活的设置需求 。
    • StatefulSets添加minReadySeconds字段:为StatefulSets添加minReadySeconds字段,用于定义新Pod准备就绪的最短时间。Pod在所有容器无崩溃且都准备好时才被视为可用和就绪,默认值为0。此前该字段已在Deployments、DaemonSets、Replica Sets和Replication Controllers中存在,此次扩展到StatefulSets,有助于更精细地管理StatefulSets中Pod的可用性 。
  5. 其他功能改进
    • KMS v2改进(Alpha):KMS v2alpha1 API增强,使加密密钥管理更轻松,减少手动操作步骤,加快密钥相关操作速度。支持自动处理密钥轮换,改进了KMS插件健康检查和API服务器与KMS之间操作的可观察性 。
    • 临时容器支持(增强):支持kubectl debug启动临时容器,用于观察运行中Pod内容器的状态,为基于distroless镜像的容器调试提供了便利 ,因为distroless镜像通常不包含shell或调试工具,临时容器可解决其调试困难的问题。
    • cgroups v2支持(稳定):全面采用cgroups v2,容器工作负载将更安全地运行,包括无根容器,并且能更可靠地使用最新的内核功能 ,在进程层次结构管理和资源限制方面具有优势 。
    • Windows支持改进:提升了Windows的操作准备度,进行了使用containerd的Windows一致性测试,优化了Windows在Kubernetes中的运行支持 。
    • 容器注册表迁移:Kubernetes的容器注册表从k8s.gcr.io迁移到registry.k8s.io,为容器镜像的管理和使用提供了新的基础环境 。
    • kube-proxy迁移到distroless镜像:kube-proxy迁移到distroless镜像,有助于减少镜像体积,提高安全性和性能 。
  1. 架构与运行时调整:移除dockershim组件,不再将其包含在kubelet中,结束对Docker Engine作为容器运行时的直接支持 。用户需使用如containerd或CRI-O等其他受支持的运行时 ,若依赖Docker,可选用cri-dockerd 。这一改变是为适应容器运行时接口(CRI)的发展,简化开发与集群维护工作 。
  2. API相关新特性
    • 新Beta API默认关闭:避免因Beta API存在缺陷影响大量部署集群,提高稳定性 。若需使用,可手动开启 。
    • OpenAPI v3支持(Beta):默认开启,kube-apiserver可提供OpenAPI v3格式的对象 ,改进了Kubernetes OpenAPI生成器,能识别标记为+enum的类型并自动检测枚举可能值 ,优化API规范定义与交互。
    • Efficient Watch Resumption(稳定版):kube-apiserver重启后能更快初始化watch cache ,提升集群监控与资源变更响应速度,保障系统实时性与一致性 。
    • ServerSideFieldValidation(稳定版):使用kubectl –validate=true可使指定未知字段的请求失败 ,在kube-apiserver上实现更严格的验证机制,增强API请求的规范性与安全性 。
  3. 存储功能增强
    • CSIStorageCapacity API稳定:通过CSIStorageCapacity对象展示当前可用存储容量 ,借助后期绑定增强使用CSI卷的Pod编排能力 ,让调度器在分配Pod时能更好地考虑存储资源 ,提高存储资源利用效率 。
    • 卷扩展(GA):正式支持调整现有永久卷大小 ,只要底层CSI驱动程序支持,即可动态扩展卷,满足不断变化的存储需求 ,减少重新配置存储的复杂操作 。
    • CSI卷健康监控(Alpha):可加载边车检查持久卷健康状况 ,帮助集群管理员对如在Kubernetes外删除持久性卷等事件做出快速反应,提升集群存储可靠性 。
  4. 网络功能改进
    • 网络策略状态:在网络策略中添加状态子资源 ,不同CNI对网络策略的实现存在差异,该状态子资源便于用户排查网络相关问题 ,提高网络管理的可观测性与问题定位效率 。
    • 混合协议支持(Beta):LoadBalancer类型的服务在Beta版本中默认启用混合协议 ,可在同一端口上提供不同协议(如TCP和UDP) ,增加网络服务配置的灵活性 。
  5. 节点管理变化
    • kubeadm控制平面节点标签变更:新建集群时,kubeadm为控制平面节点只添加node-role.kubernetes.io/control-plane标签 ,不再添加node-role.kubernetes.io/master标签 ,但Taint里node-role.kubernetes.io/master:NoSchedule和node-role.kubernetes.io/control-plane:NoSchedule会同时存在,计划在1.25版本后移除前者 。
    • 节点优雅关闭(Beta):区分终止节点上运行的常规Pod和关键Pod ,为停止Pod提供额外时间 ,减少因节点关闭导致的服务中断,保障业务连续性 。
  6. 安全相关更新:Secret API不再自动为ServiceAccount创建存放Token的Secret对象 ,默认启用LegacyServiceAccountTokenNoAutoGeneration特性门控 。如需获取Token,需使用TokenRequest API ,获取的Token具备过期时间,增强安全性 。若要创建永不过期的Token,可参考特定文档操作 。
  7. 日志功能优化:引入上下文日志记录(Alpha) ,函数调用者可控制日志记录的输出格式、详细程度、附加值和名称等方面 ,使日志输出更具针对性和可读性 ,方便调试与系统监控 。此外,结构化日志在1.23版本进入Beta后,在1.24版本继续发展,许多组件(如kube-scheduler、kubelet等)日志采用结构化格式(key=”value”形式) ,便于解析 ,且JSON格式日志信息默认使用stderr输出代替stdout 。
  8. 其他功能升级与改进
    • gRPC探针(Beta):在Kubernetes 1.24中进入测试阶段且默认可用 ,可直接为gRPC应用程序原生配置启动、活动和就绪探测器 ,无需暴露HTTP端点或使用额外可执行文件 ,简化gRPC应用在Kubernetes中的部署与健康检查配置 。
    • 镜像凭证提供者(Beta):kubelet对镜像凭证提供者的支持从Alpha升级到Beta ,允许kubelet使用exec插件动态检索容器镜像注册中心的凭证 ,避免将凭证存储在节点文件系统上,提升安全性 。
    • PodOverhead(稳定版):默认启用,使Kubernetes调度容器时能考虑容器基础设施资源(在容器请求和限制之外) ,利用定义开销字段的Runtime类,优化资源分配 。
    • 存储容量跟踪(稳定版):使Kubernetes调度器在放置Pod前了解节点关联存储的容量 ,过滤掉存储不足的节点,减少无效调度尝试,提高调度效率 。
    • ServiceAccount的Token管理变化:Secret API不再自动为ServiceAccount创建存放Token的Secret对象,默认启用LegacyServiceAccountTokenNoAutoGeneration特性门控,需要使用TokenRequest API获取具有过期时间的Token,增强了安全性。若要创建永不过期的Token,可参考特定文档操作。
  1. 性能优化
    • kubelet TCP和HTTP探针优化:通过将连接的TIME-WAIT状态缩短至1秒(原为60秒),使kubelet能更有效地利用网络资源,如释放socket、conntrack条目和临时端口 。
    • Go版本升级:Kubernetes 1.23版本先后使用Go 1.17.8 - 1.19.6等多个版本进行构建,这带来了一系列性能改进和安全修复,提升了整体运行效率和稳定性 。
    • gzip压缩调整:kube - apiserver将gzip压缩级别从4调整为1,以增加网络带宽使用(提高10 - 50%)为代价,改善大列表调用延迟,避免非常大的无分页列表调用超过请求超时限制 。
  2. 安全性提升
    • 修复多个安全漏洞:修复了包括CVE - 2022 - 3162(未经授权读取自定义资源)、CVE - 2022 - 3294(节点代理时地址验证问题)、CVE - 2022 - 41723(修复Golang.org/x/net库相关漏洞)、CVE - 2022 - 3172(聚合API服务器重定向导致SSRF漏洞)、CVE - 2021 - 25749(Windows容器runAsNonRoot逻辑绕过漏洞)等安全漏洞,增强了集群的安全性 。
    • 权限检查改进:更新kubelet在Windows节点上的权限检查,从检查进程所有者是否在Administrators组改为检查进程是否提升,提高了权限管理的准确性和安全性 。
  3. API改进
    • API Server相关调整:kube - apiserver默认将GOGC设置为63,以近似Go 1.17在高负载API服务器中的垃圾回收内存性能;默认将GODEBUG x509sha1设置为x509sha1 = 1,以匹配Go 1.17对sha1证书的支持 。
    • Protobuf序列化修正:对metav1.MicroTime时间戳的Protobuf序列化进行修正,将其截断为微秒精度,以匹配文档行为和JSON/YAML序列化,从etcd读取现有持久化数据时也会截断为微秒 。
    • EndpointSlice API相关:EndpointSlices标记为删除后在协调过程中会被忽略;修复了EndpointSlice更新时可能导致节点名称信息丢失的问题 。
    • 其他API变动:修正了v1beta1 PodDisruptionBudget处理“strategic merge patch”类型API请求中selector字段的回归问题;使STS(StatefulSet)的可用副本字段可选 。
  4. 存储功能增强
    • CSI卷健康监测(Alpha):支持对PV进行监视,当卷或节点出现异常时,控制器会向PV所属的PVC以及使用该PVC的Pod发送异常事件,保障数据读写安全 。
    • CSI存储容量跟踪(Beta):默认开启,用于跟踪CSI存储容量,确保Pod调度到有足够存储容量的节点上,但需要CSI驱动程序实现对应的接口 。
    • 通用临时卷(Generic Ephemeral Volume,Beta):类似emptydir卷但更灵活,存储可为本地或网络存储,有固定大小,支持卷快照、克隆、扩展等操作,且可能包含初始数据 。
    • 卷相关问题修复:修复了CSI临时卷的重建问题;确保自动挂载的子路径挂载源已挂载;修正了kubelet对原始块CSI卷的错误调用,避免重复执行NodeStageVolume操作 。
  5. 网络功能改进
    • 服务拓扑感知提示(Topology Aware Hints,Alpha):取代弃用的服务字段topologykeys及相关alpha特性,EndpointSlice控制器会填充提示字段,kube - proxy等组件可利用这些提示进行请求路由 。
    • 服务负载均衡器类(Service LoadBalancerClass,Alpha):允许一个集群中运行多个负载均衡器实现,Service可通过spec.loadbalancerclass指定使用的负载均衡器 。
    • kube - proxy优化:kube - proxy在检测到节点分配的pod.Spec.PodCIDRs发生变化时会重启;减少Windows kube - proxy在核空间模式下同步代理规则的时间 。
  6. 节点管理优化
    • 优雅节点关闭(Graceful Node Shutdown,Beta):kubelet能通过systemd检测到系统即将关闭,并通知正在运行的Pod,使其尽可能优雅地终止 。
    • 内存控制策略(Memory Control Policy,Alpha):kubelet新增–memory - manager - policy配置项,支持none(默认,等同于未开启)和static(为Pod分配numa内存并确保guaranteed Pod预留足够内存)两种策略 。
    • Pod删除成本(Pod Deletion Cost,Alpha):允许用户设置删除Pod的优先级,通过给Pod增加annotation “controller.kubernetes.io/pod - deletion - cost”来指定删除成本,值越小越优先删除 。
    • 节点相关问题修复:修复了kubelet执行探针超时的问题;修正了kubelet中GetAllocatableCPUs方法;确保Pod日志在使用–timestamps时能正确显示;kubelet不再报告已终止容器的指标;kubeadm允许在预检查中使用RSA和ECDSA格式的密钥 。
  7. 其他功能更新
    • Job API增强:为Job API增加suspend字段,可设置.spec.suspend=true挂起Job;修复了JobTrackingWithFinalizers相关问题,如在计算所有创建的Pod之前声明Job完成、导致Pod和Job删除时被阻塞等,但该功能默认仍处于禁用状态 。
    • 临时容器API变化:临时容器功能现为alpha版且默认禁用,API发生变化,旧有API不再响应客户端请求,kubectl v1.21及更早版本无法支持新API 。
    • kubectl变化:–record flag从kubectl中弃用,被http请求头替代;kubectl get pods输出中添加last restart列 。
    • StatefulSets API增强:StatefulSets API在spec和status中增加minreadyseconds和available replicas字段 。
    • 依赖项更新:多个依赖项进行了版本更新,如github.com/yuin/goldmark、golang.org/x/crypto、golang.org/x/mod等,以获取新功能、修复漏洞和提升性能 。
  1. API变更:删除一系列已弃用API,如beta版的validatingwebhookconfiguration、mutatingwebhookconfiguration、customresourcedefinition等。需在升级集群前借助kubectl convert命令完成API版本转换,避免应用中断 。
  2. 核心功能升级
    • Server - side Apply特性GA:将逻辑从kubectl apply转移到kube - apiserver,跟踪对象字段更改,支持通过API完成声明式配置,可解决所有权冲突问题,还能直接通过curl等工具实现相关操作 。
    • 客户端凭证插件GA:从1.11版本开始处于beta阶段的client - go凭据插件,在1.22版本正式GA。修复了诸多缺陷,完善了交互式登陆流程,部分云厂商凭据插件切换到独立实现 。
    • etcd更新至3.5.0:Kubernetes默认后端存储etcd升级,改进了安全性、性能、监控及开发者体验,修复多项bug,新增结构化日志记录与内置日志轮替等功能,并提出后续发展路线图 。
  3. 存储与网络优化
    • 内存资源QoS(beta):借助cgroups v2 API实现内存的分配和隔离,为Pod提供内存QoS,计算方法涉及容器请求内存与cgroups v2相关参数的转换,提升了内存管理能力 。
    • CSI Windows和CSI Service Account Token GA:CSI Windows通过csi proxy让插件以非特权容器部署到windows节点;CSI Service Account Token使CSI插件使用与pod绑定的服务帐户令牌,还可控制卷重新发布以刷新令牌 。
  4. 安全强化
    • PodSecurityPolicy替代:引入内置的PodSecurity admission控制器和PodSecurity Standards标准替代PodSecurityPolicy。支持在命名空间级设置三种策略:privileged(无限制策略)、baseline(最低限度限制策略)、restricted(严格限制策略) ,可通过配置文件控制,包括enforce、audit、warn三种模式 。
    • 默认Seccomp配置(alpha):kubelet新增seccomp default的alpha特性,开启后将runtimedefault作为默认Seccomp策略应用到所有pod,增强系统安全性 。
    • 服务账户令牌卷GA:服务账户准入控制器添加类似configmap的卷来获取服务账户令牌,包含从kube - apiserver获取令牌、用于验证连接的ca bundle以及引用pod命名空间等关键元素 。
    • 审计日志修复:Kubernetes API创建新审计日志文件的访问模式为0600;当API无法到达验证准入webhook时会记录审计日志条目 。
  5. 节点管理改进
    • 节点交换支持(alpha):允许节点在需要时使用交换内存,管理员可在Linux节点配置交换,将块存储用作额外虚拟内存,需在Node中启用swap、开启kubelet的NodeMemorySwap特性、设置–fail - on - swap=false等 。
    • 以非root用户运行组件(alpha):kubeadm控制平面组件可通过启用特定的RootlessControlPlane feature gate以非root用户身份运行,降低安全风险;所有Kubernetes节点组件(如kubelet、kube - proxy与容器运行时)也能以非root用户身份运行(alpha功能) 。
  6. 其他新特性
    • Job API增强:为Job API增加suspend字段,可设置.spec.suspend=true挂起Job;Job Topology Spread Constraints特性可更好地控制Job在集群中的分布 。
    • 临时容器API变化:临时容器功能现为alpha版且默认禁用,API发生变化,旧有API不再响应客户端请求,kubectl v1.21及更早版本无法支持新API 。
    • kubectl变化:–record flag从kubectl中弃用,被http请求头替代;kubectl get pods输出中添加last restart列 。
    • StatefulSets API增强:StatefulSets API在spec和status中增加minreadyseconds和available replicas字段 。
  1. API升级:Cron Jobs、Pod Disruption Budgets、Sysctls、RootCA ConfigMap、EndpointSlice、ServiceAccount Issuer Discovery、CRI Container Log Rotation等功能升级到稳定版。其中,Cron Jobs用于执行定期计划操作,如备份、报告生成;Pod Disruption Budgets可限制同时处于down状态的Pod数量,在滚动升级集群时,能确保部分集群保持在线 。
  2. 存储功能增强
    • CSI Volume健康监测(Alpha):支持对PV进行监视,当卷或节点出现异常时,控制器会向PV所属的PVC以及使用该PVC的Pod发送异常事件,工作负载可据此保护数据读写安全 。
    • CSI存储容量跟踪(Beta):默认开启,用于跟踪CSI存储容量,确保Pod调度到有足够存储容量的节点上,但需要CSI驱动程序实现对应的接口 。
    • 通用临时卷(Generic Ephemeral Volume,Beta):类似emptydir卷但更灵活,存储可为本地或网络存储,有固定大小,支持卷快照、克隆、扩展等操作,且可能包含初始数据 。
  3. 网络功能拓展
    • IPv4/IPv6双栈支持(Beta):默认启用,kubeadm支持创建双栈集群,Kubernetes服务和Pod可同时分配IPv4和IPv6地址,改善了工作负载的伸缩限制 。
    • 服务拓扑感知提示(Topology Aware Hints,Alpha):取代弃用的服务字段topologykeys及相关alpha特性,EndpointSlice控制器会填充提示字段,kube - proxy等组件可利用这些提示进行请求路由 。
    • 服务负载均衡器类(Service LoadBalancerClass,Alpha):允许一个集群中运行多个负载均衡器实现,Service可通过spec.loadbalancerclass指定使用的负载均衡器 。
  4. 节点管理优化
    • 优雅节点关闭(Graceful Node Shutdown,Beta):kubelet能通过systemd检测到系统即将关闭,并通知正在运行的Pod,使其尽可能优雅地终止,避免Pod异常关闭带来的问题 。
    • 内存控制策略(Memory Control Policy,Alpha):kubelet新增–memory - manager - policy配置项,支持none(默认,等同于未开启)和static(为Pod分配numa内存并确保guaranteed Pod预留足够内存)两种策略 。
    • Pod删除成本(Pod Deletion Cost,Alpha):允许用户设置删除Pod的优先级,通过给Pod增加annotation “controller.kubernetes.io/pod - deletion - cost”来指定删除成本,值越小越优先删除 。
  5. 安全相关变更
    • PodSecurityPolicy弃用:从1.8版本开始的beta特性PodSecurityPolicy被弃用,计划在1.25版本删除,后续将有新的内置机制“PSP替换策略”,也可使用Open Policy Agent、Kyverno、K - rail等工具替代 。
    • 不可变Secrets和ConfigMaps(稳定):为Secrets和ConfigMaps添加新字段,设置后可拒绝更改,避免错误配置传播,提升伸缩性,但更改时需创建新资源并部署新Pod 。
  6. 任务调度创新
    • Indexed Jobs(Alpha):为每个任务分配数值索引,并通过annotation “batch.kubernetes.io/job - completion - index”暴露给Pod,在Job spec中设置completionMode:indexed即可使用,适用于分布式任务场景 。
    • 暂停/恢复作业(Suspend/Resume Jobs,Alpha):允许暂停和恢复作业,暂停作业会移除相关元数据和状态,也可在作业上线前进行依赖注入等操作 。
  7. 其他新特性
    • 外部客户端凭证提供程序(External Client - go Credential Providers,稳定):可使用外部辅助程序进行用户身份验证,但使用时需注意kubeconfig文件安全,防止恶意代码执行 。
    • 减少构建维护:整合多个构建系统,降低新贡献者门槛,增强社区维护能力 。
  1. 节点与调度优化
    • 第三方设备监控插件稳定:支持第三方设备监控插件达到稳定阶段,为集群管理员提供容器级设备指标。设备供应商能借此提供特定指标,且无需向核心Kubernetes贡献代码,增强了设备管理的灵活性与扩展性 。
    • 慢启动容器探针延迟:针对慢启动容器,添加了“pod-startup liveness-probe holdoff”机制。在容器启动完成前,它能延迟其他探针的执行,避免容器在启动阶段被误判为不健康,提高了容器启动的稳定性 。
    • PID资源限制稳定:支持对PID资源进行限制,实现了pod到pod、节点到节点的PID资源隔离。这能防止某个Pod耗尽PID资源,影响其他Pod或节点上的守护进程(如容器运行时、kubelet),提升了系统稳定性 。
    • Kubelet功能调整:着手弃用“disable acceleratorusage metrics”功能,并计划用“podresources api”替代。同时,修复了kubelet执行探针超时的问题,若未指定“timeoutSeconds”,默认超时时间为1秒,也可通过配置“execprobetimeout”特性门恢复旧行为 。
    • 节点拓扑管理器机制优化:为了在包含CPU和硬件加速器的混合系统中优化性能,节点拓扑管理器提供了协调细粒度硬件资源分配的机制,能更好地满足不同组件对硬件资源的需求 。
    • Pod拓扑分布配置升级:“add a configurable default constraint to podtopologyspread”功能在1.19版本引入,1.20版本升级到beta阶段。集群操作员可借此为集群中的工作负载设置默认的分布约束,优化Pod的分布策略 。
    • Cron Jobs功能升级:Cron Jobs(此前的scheduled jobs)用于在Kubernetes集群中运行周期性任务,在1.20版本升级到beta阶段,功能得到进一步完善,有望在后续版本达到稳定 。
  2. 存储功能拓展
    • 卷快照功能稳定:长期处于alpha阶段的卷快照/恢复功能在1.20版本稳定。它提供了“volume snapshot content”和“volume snapshot” API,让集群管理员具备卷快照能力,为数据备份和恢复提供了标准的操作方法 。
    • 卷快照对象验证增强:新增对卷快照对象的额外验证功能,在挂载时可跳过卷所有权和权限的更改。这对那些对权限位变化敏感的应用有利,也能避免在处理大量文件的卷时,因递归更改权限导致的缓慢或超时问题 。
    • CSI驱动支持拓展:CSI驱动新增“csi driver.spec.fsgroup policy”字段,允许驱动定义是否支持通过“fsgroup”修改卷所有权,增强了CSI驱动在卷管理方面的灵活性 。
  3. 网络功能升级
    • Pod主机名设置拓展:支持用户将Pod的主机名设置为其完全限定域名(FQDN),为容器网络配置提供了更多的灵活性,有助于实现更复杂的网络架构和服务发现机制 。
    • SCTP协议支持稳定:从Kubernetes 1.12版本以alpha形式引入的SCTP协议支持,在1.20版本达到稳定。Pod、端点和网络策略现在除了支持TCP和UDP协议外,也支持SCTP协议,丰富了网络通信协议的选择 。
    • 应用协议定义标准化:引入“appprotocol”概念,允许为每个端口指定应用协议。该功能在1.20版本升级到稳定阶段,为Kubernetes中应用协议的标准化表示提供了支持 。
  4. API与认证改进
    • SelfLink字段弃用推进:弃用并删除“selfLink”字段的功能在1.20版本进入beta阶段,预计在1.21版本稳定。这一操作旨在消除设置“selfLink”带来的性能影响 。
    • 内置API类型默认值增强:通过为当前内置的Go IDL添加“// + default”标记,将其转换为OpenAPI默认字段,再路由到默认值函数,实现声明式的默认值设置,简化了API对象默认值的管理 。
    • API服务器请求优先级与公平性优化:在1.17版本引入的API服务器请求优先级和公平性功能,在1.20版本升级到beta阶段。“kube-apiserver”可按优先级对传入请求进行分类,避免某类请求负载占用过多资源,影响其他请求 。
  5. 调试与故障排查功能强化:“kubectl alpha debug”升级为“kubectl debug”并进入beta阶段,支持多种调试场景。可创建使用其他容器镜像或命令的Pod副本,排查启动时崩溃的工作负载;添加带调试工具的新容器或使用临时容器,排查distroless容器故障;还能创建在主机命名空间运行的容器,访问主机文件系统进行节点故障排查 。
  6. 其他功能变化
    • Dockershim弃用:Dockershim被正式弃用,Kubernetes对Docker运行时的支持将在后续版本移除。不过,由于Docker镜像遵循OCI规范,仍可在符合CRI的运行时中使用 。
    • IPv4/IPv6双栈支持改进(Alpha):重新实现了IPv4/IPv6双栈支持,允许为单个服务分配IPv4和IPv6的服务集群IP地址,也支持服务在单IP栈和双IP栈之间转换 。
    • 优雅关机节点(Alpha):“GracefulNodeShutdown”功能处于Alpha阶段,它使kubelet能感知节点系统关机,从而在关机期间正常终止Pod,保障工作负载的正常运行 。
  1. 延长支持窗口:从1.19版本起,Kubernetes支持窗口从9个月延长至1年。之前,用户需每9个月升级以保持版本受支持,但很多用户难以在该期限内完成升级。调查显示,延长支持期至12 - 14个月,约80%的用户能使用受支持版本,更契合年度规划周期,不过这也增加了Kubernetes各工作组的压力 。
  2. 存储相关新特性
    • 存储容量追踪(Alpha):传统调度器未考虑存储容量对Pod调度的影响。此版本为CSI驱动程序添加报告存储容量的API,调度器选择节点时会参考该信息,为本地卷和其他容量受限卷类型的动态预配置提供支持 。
    • 通用临时存储(Alpha):允许将支持动态供应的存储驱动程序用作临时卷,并将其生命周期与Pod绑定。可提供不同于根磁盘的临时存储,支持所有卷供应的StorageClass参数及PersistentVolumeClaims的功能,如容量跟踪、快照还原和卷大小调整,简化了配置文件 。
    • CSI Volume健康监测(Alpha):使CSI驱动程序能与Kubernetes共享底层存储系统的异常卷状况,作为事件报告在PVC或Pod上,为程序检测和解决单个卷健康问题奠定基础 。
  3. 日志记录改进
    • 新的klog方法:为klog库引入新方法,如InfoS、ErrorS,通过结构化接口格式化日志消息,将日志消息作为首参数,键值对列表作为可变参数,便于逐步采用结构化日志记录,无需一次性全面转换 。
    • 支持JSON日志输出:通过传递--log - format=json标志,支持Kubernetes组件以JSON格式输出日志,使日志解析、处理、存储、查询和分析更方便 。
  4. 认证相关升级:kubelet客户端TLS证书轮转功能稳定。kubelet使用私钥和证书向kube - apiserver认证,自1.8版本起集群有证书轮转流程,在1.19版本该流程稳定。kubelet启动时会扫描文件系统获取证书/密钥对,临近到期时,证书管理器负责更新 。
  5. API管理优化
    • Ingress升级为GA:Ingress API自1.1版本以Beta版存在,在1.19版本升级为GA,并添加到networking v1 apis。v1 ingress对象有架构和验证方面的变化,如pathtype字段不再有默认值,必须指定 。
    • API过渡策略变更:规定Beta增强功能的新策略,Beta功能在9个月(三个版本)内若未达到GA标准或无新Beta版本替代,将被弃用。例如,1.19版本引入的Beta API不迟于1.22版本弃用,不迟于1.25版本移除 。
    • 弃用API警告机制(Beta):API服务器在用户使用弃用API调用时,会在响应中添加警告头,包含API弃用信息,如可用时间、弃用时间和移除时间等,还可记录审计事件和更新指标,帮助用户和管理员提前规划升级 。
  6. 网络相关更新:Pod拓扑分布功能优化,在1.18版本Beta版的基础上,1.19版本自动对拓扑进行加权,更好地区分节点和区域,使Pod布局更均衡 。
  7. 安全功能提升
    • Seccomp达到GA:Seccomp是Linux内核用于限制应用程序系统调用的安全机制。在1.19版本Seccomp达到GA阶段,为Pod和容器安全上下文对象添加新的Seccomp配置文件字段,同时弃用现有注解(1.22版本移除) 。
    • TLS 1.3支持:增加对TLS 1.3密码套件的支持,提升通信安全性,满足Kubernetes安全审计建议 。
    • 服务账户凭据权限增强:默认的服务账户凭据卷挂载设置了更安全的文件权限,提高非根容器运行时的安全性 。
  8. 其他新特性
    • 节点调试(Alpha)kubectl alpha debug命令可创建并运行在主机操作系统命名空间中的新Pod,用于节点故障排查,可在不重启Pod和进入容器的情况下检查文件系统、执行调试工具或发起网络请求,减少对SSH的依赖 。
    • 准入Webhook警告(Beta):准入Webhook可向API客户端返回非致命警告,便于用户和管理员识别有问题的API使用,包括来自kubectl等客户端的弃用API使用 。
    • 术语变更:采用更具包容性的语言,对相关术语进行了变更 。
    • kubeadm配置补丁(Alpha):支持使用补丁定制kubeadm配置,针对不同环境(生产、开发、测试)进行配置,简化基础设施启动流程 。

评论