ACK发布Kubernetes 1.26版本说明

阿里云容器服务Kubernetes版(ACK)严格遵循社区一致性认证。本文介绍ACK发布Kubernetes 1.26版本所做的变更说明。

索引

版本升级说明

ACK针对Kubernetes 1.26版本提供组件的升级和优化。

核心组件

版本号

升级注意事项

Kubernetes

1.26.15-aliyun.1、1.26.3-aliyun.1

  • Kubernetes 1.26版本做了大量优化,升级前请仔细阅读版本解读

  • Kubernetes 1.25和Kubernetes 1.26版本弃用了大量Beta版本的API,在使用新版本集群之前,需要先检查与Beta版本API交互的控制器或应用是否已经改造升级成使用推荐版本API。关于废弃API信息,请参见废弃的API信息

  • Kubernetes 1.26版本,将不支持CRI v1alpha2,且容器运行时必须支持CRI v1,因此Kubernetes 1.26最低要求使用Containerd 1.6。升级集群时,需先将Containerd升级到1.6.0及以上版本后,才能将节点升级到Kubernetes 1.26。

  • Kubernetes在1.21版本中弃用PodSecurityPolicy,在Kubernetes 1.25版本中彻底移除。PodSecurityPolicy使用方式复杂,容易授权比预期更大的权限,存在严重的可用性问题。请参见版本解读使用新的方案代替PodSecurityPolicy。

  • 1.26及以上版本的ACK集群不再默认开放kubelet容器监控只读端口(10255),统一使用鉴权安全端口(10250)。更多信息,请参见【产品变更】迁移低版本ACK集群监控端口至鉴权端口

etcd

v3.5.4

CoreDNS

1.9.3.10-7dfca203-aliyun

CRI

Containerd 1.6.20

仅支持Kubernetes 1.24.0及以上版本。

CSI

升级至组件当前支持的最新版本。详细信息,请参见组件变更记录csi-plugincsi-provisioner

CNI

Flannel v0.15.1.22-20a397e6-aliyun

Terway & TerwayControlplanev1.5.0 +

NVIDIA Container Runtime

v3.13.0

仅Kubernetes 1.26支持v3.13.0,其余版本仍然使用v3.7.0。

Ingress Controller

v1.6.4-aliyun.1

版本解读

重大变化

  • Kubernetes 1.25和Kubernetes 1.26版本弃用了大量测试版本的API,在使用新版本集群之前,需要先检查与测试版本API交互的控制器或应用是否已经改造升级成使用正式版本API的控制器或应用。更多信息,请参见废弃的API信息

  • Kubernetes 1.26版本将不支持CRI v1alpha2,且要求容器运行时必须支持CRI v1,因此Kubernetes 1.26不支持Containerd 1.5及更早的版本,最低要求使用Containerd 1.6。升级集群时,需先将Containerd升级到1.6.0及以上版本后,才能将节点升级到Kubernetes 1.26。

  • Kubernetes 1.21版本弃用了PodSecurityPolicy,在Kubernetes 1.25版本中彻底移除,是因为PodSecurityPolicy使用方式复杂,容易授权比预期更大的权限,存在严重的可用性问题。详细信息,请参见 PodSecurityPolicy 历史背景

    对于已经在使用PodSecurityPolicy功能的集群,请使用以下任意一种方式执行限制后,再将集群升级到更高版本。

  • 在1.26.15-aliyun.1版本中修复了以下CVE漏洞:

    • CVE-2023-45288

    • CVE-2024-3177

    • CVE-2024-24786

新增功能

  • 临时容器在Kubernetes 1.23中为测试版本,在Kubernetes 1.25版本成为Stable版本。当需要检查一个已经崩溃或者缺乏调试工具不能使用kubectl exec的容器时,支持在现有Pod中运行临时容器来检查其状态并运行任意命令。更多信息,请参见临时容器

  • 在Kubernetes 1.25版本,Kubernetes对cgroups v2的支持进入Stable阶段,cgroups v2相较于cgroups v1做出了诸多改进。更多信息,请参见 cgroups v2文档

  • 在Kubernetes 1.25版本,继续优化Kubernetes对Windows系统的支持,例如,支持单元测试一致性测试为Windows Operational Readiness创建新的仓库

  • 在Kubernetes 1.25版本,容器镜像仓库k8s.gcr.io迁移到registry.k8s.io,流量也将重定向到registry.k8s.io。更多信息,请参见k8s.gcr.io Redirect to registry.k8s.io

  • 在Kubernetes 1.25版本,网络策略中的EndPort字段处于GA阶段。如果网络策略提供程序支持EndPort字段,可以在编写NetworkPolicy时使用该字段指定一个端口范围;如果网络策略提供程序不支持EndPort,则只会创建出单端口的网络策略。更多信息,请参见网络策略

  • 在Kubernetes 1.25版本,本地临时容器存储容量隔离迎来GA(正式发布)版本, 它提供了对Pod之间本地临时存储容量隔离的支持,例如EmptyDir, 因此,如果一个Pod对本地临时存储容量的消耗超过该限制,就可以通过驱逐Pod来硬性限制其对共享资源的消耗。更多信息,请参见本地临时容器存储容量隔离

  • 在Kubernetes 1.25版本,CSI临时数据卷升级为稳定版本,在临时使用的情况下,CSI临时数据卷不允许通过PV/PVC在Pod里直接指定CSI数据卷。更多信息,请参见CSI临时数据卷

  • 在Kubernetes 1.25版本,引入KMS v2 alpha1 API以提升性能,实现轮替与可观察性改进。 此API使用AES-GCM替代了AES-CBC,通过DEK实现静态数据加密(Kubernetes Secrets),此过程中无需您额外操作,且支持通过AES-GCM和AES-CBC进行读取。 更多信息,请参考使用 KMS provider进行数据加密指南

  • 在Kubernetes 1.25版本,Kubernetes对使用对象存储制定了一个新的标准接口,即容器对象存储接口(COSI),旨在标准化对象存储的使用,目前尚处于alpha(内测)阶段。

  • 在Kubernetes 1.25版本,如果在Pod的status字段中将PodHasNetwork状态设置为True,表示Pod运行时沙箱被成功初始化创建,并已配置了网络。因为PodHasNetwork设置为True后Kubelet才开始拉取镜像启动容器,所以这个字段可以用于反应Pod初始化延迟的指标(不包含拉取镜像快慢和应用负载等特征),利用PodHasNetwork可以准确生成服务水平指标(SLI)。由于PodHasNetwork尚处于内测阶段,如需使用需要在Kubelet上启动PodHasNetworkCondition特性门控。更多信息,请参见关于PodHasNetwork和Initialized区别

  • 在Kubernetes 1.25版本,StatefulSet的minReadySeconds进入稳定阶段,允许每个Pod等待一段预期时间来减缓StatefulSet的滚动上线。更多信息,请参见minReadySeconds

  • 在Kubernetes 1.25版本中,DaemonSet的maxSurge进入稳定阶段,允许DaemonSet工作负载在滚动上线期间在一个节点上运行同一 Pod的多个实例,有助于将DaemonSet的停机时间降到最低。DaemonSet不允许maxSurge和hostPort同时使用,因为两个活跃的Pod无法共享同一节点的相同端口。更多信息,请参见DaemonSet工作负载滚动上线

  • 在Kubernetes 1.25版本, 对使用user namespace运行Pod提供alpha支持,将Pod内的root用户映射到容器外的非零ID,使得从容器角度看是root身份运行,而从主机角度看是常规的非特权用户。目前尚处于内测阶段,需要开启特性门控UserNamespacesStatelessPodsSupport, 且要求容器运行时必须能够支持此功能。更多信息,请参见对使用user namespace运行Pod提供alpha支持

  • 在Kubernetes 1.25版本,新增一个特性门控RetroactiveDefaultStorageClass更改默认StorageClass被分配到PersistentVolumeClaim的方式。原本需要先创建StorageClass再创建PVC才会分配默认StorageClass,否则PVC的StorageClass会一直为nil,启用此特性后,未分配StorageClass的PVC不需要删除重建就可以自动更新分配默认的StorageClass。该特性在1.26进入Beta阶段,默认开启此功能。

  • 在Kubernetes 1.25版本,新增了JobPodFailurePolicy特性,允许配置Job根据容器退出码和Pod状况来指定Pod失效的处理方法,该特性在1.26进入Beta阶段。在Job定义podFailurePolicy字段配置Pod失效策略,为了避免不必要的Pod重试和忽略Pod驱逐。更多信息,请参见Pod失效策略

  • 在Kubernetes 1.25版本,修复PodTopologySpread功能在滚动更新期间出现Pod分布不均,不符合约束的情况。minDomains字段处于Beta版本。

  • 在Kubernetes 1.25版本,kube-proxy对于规模较大的集群提升了性能。例如集群有1000个Endpoints,不使用的Iptables规则会保留一段时间,保留的最长时间为Iptables规则的最大同步周期,因此不必每次同步都扫描旧的规则。对于较小规模的集群,不使用的Iptables规则仍然会立即删除。

  • 在Kubernetes 1.26版本,新增动态资源分配功能,用于Pod之间和Pod内部容器之间请求和共享资源,支持用户提供参数初始化资源。该功能尚处于alpha阶段,需要启用DynamicResourceAllocation特性门控和resource.k8s.io/v1alpha1 API组,需要为要管理的特定资源安装驱动程序。更多信息,请参见Alpha API For Dynamic Resource Allocation

  • 在Kubernetes 1.26版本,节点非体面关闭进入Beta阶段。当节点故障时,故障节点上的Pod会一直处于Terminating(停止)状态,也无法删除VolumeAttachments。如果是StatefulSet类型的Pod,因为Pod不允许同名,所以也不会在新节点上启动Pod。相比Kubelet检测节点关闭事件对节点体面关闭,节点非体面关闭要求手动给Node添加out-of-service污点触发,将Pod移动到新的运行节点,待节点恢复后还须手动移除污点。

  • 在Kubernetes 1.26版本,支持在挂载时将Pod fsGroup传递给CSI驱动程序,取代Kubelet去更改卷中文件和目录的权限,此功能对用户基本透明,如果您是CSI驱动程序开发者,请参见CSI 驱动程序 fsGroup 支持

  • 在Kubernetes 1.26版本,新增Pod调度门控功能,负责通知调度器何时可以开始调度Pod。当大量Pod因为外部事件阻塞导致长时间无法被调度的时候,会影响调度器的性能,调度门控允许声明新创建的Pod尚未准备好进行调度来解决这个问题。当Pod设置spec.schedulingGates时,调取程序会忽略该Pod,避免进行不必要的调度尝试。此功能需要一个外部的控制器负责确定Pod何时可以调度并清理门控。更多信息,请参见Pod调度门控

  • 在Kubernetes 1.26版本,CPU Manager达到GA状态,此功能早在Kubernetes v1.10就已经是Beta阶段,它属于Kubelet的一部分,负责实现给容器分配独占CPU。CPU Manager支持三个不同的策略选项。更多信息,请参见控制节点上的 CPU 管理策略

  • 在Kubernetes 1.26版本,对跨名字空间存储数据源的Alpha提供支持,允许在源数据属于不同的名字空间时,为PersistentVolumeClaim指定数据源。更多信息,请参见跨名字空间存储数据源

  • 在Kubernetes 1.26版本,允许PodDisruptionBudget配置不健康Pod的驱逐策略,通过设置.spec.unhealthyPodEvictionPolicy=AlwaysAllow来驱逐不健康Pod的行为不受PDB的干扰。目前处于Alpha阶段,使用该功能需要启用PDBUnhealthyPodEvictionPolicy特性门控。更多信息,请参见不健康Pod的驱逐策略

  • 在Kubernetes 1.26版本中,容器preStop和postStart生命周期函数httpGet遵循schemeheaders字段配置,可以与探针行为保持一致,设定自定义的Headers和使用HTTPS。如果本应该使用HTTP而使用了HTTPS,会出现错误提示,并在与之前保持逻辑兼容的同时自动回退使用HTTP。您可以通过Kubelet设定--feature-gates=ConsistentHTTPGetHandlers=false关闭该扩展功能。

  • 在Kubernetes 1.26版本,APF(API Priority and Fairness)支持从其他优先级借用一些席位,.spec.limited新增两个字段,其中lendablePercent标识可租借出去的百分比,borrowingLimitPercent标识可以从其他优先级级别中借多少资源。

  • 在Kubernetes 1.26版本,kube-controller-manager组件支持设置--concurrent-horizontal-pod-autoscaler-syncs来设定HPA(Horizontal Pod Autoscaler)控制器的Workers数。

  • 在Kubernetes 1.26版本,为HPA增加一个标签选择器校验,当多个HPA指向同一个Pod集或者同一个部署,这些HPA将不起作用,并提示事件AmbiguousSelector。

  • 在Kubernetes 1.26版本,当多个StorageClass被设置为默认值(通过storageclass.kubernetes.io/is-default-classAnnotation设置),会选择最新的一个StorageClass作为默认值,而不是抛出异常。

弃用功能

  • 存储驱动的弃用和移除

    • 在Kubernetes 1.25版本,针对存储集成移除in-tree卷插件,CSI迁移是SIG Storage在之前多个版本中做出的持续努力,目标是将in-tree卷插件代码转移到out-of-tree的CSI (容器存储接口)驱动程序。 在Kubernetes 1.25版本,核心CSI迁移为稳定版。

    • 在Kubernetes 1.25版本,弃用GlusterFS Portworx in-tree卷插件,移除 FlockerQuobyteStorageOS in-tree卷插件。In-tree vSphere 卷驱动将不支持任何早于7.0u2的vSphere版本。

    • 在Kubernetes 1.26版本,移除GlusterFS in-tree驱动,移除已弃用的 OpenStack in-tree存储集成(Cinder卷类型)。

  • 清理iptables链的所有权

    Kubernetes通常创建Iptables链来确保这些网络数据包到达, 这些Iptables链及其名称属于Kubernetes内部实现的细节,仅供内部使用场景,目前有些组件依赖于这些内部实现细节,Kubernetes总体上不希望支持某些工具依赖这些内部实现细节。详细信息,请参见Kubernetes 的IPtables链不是API

    在Kubernetes 1.25版本后,Kubelet通过IPTablesCleanup特性门控分阶段完成迁移,是为了不在NAT表中创建Iptables链,例如KUBE-MARK-DROP、KUBE-MARK-MASQ、KUBE-POSTROUTING。

    关于清理IPTables链所有权的信息,请参见清理IPTables链的所有权

  • 移除树内凭证管理代码

    在Kubernetes 1.26版本后,原本内嵌的特定供应商Azure和Google Cloud身份验证代码将从client-go和kubectl中移除,可以选择使用身份验证插件机制替代。更多信息,请参见身份验证插件机制

  • kube-proxy移除部分

    • 在Kubernetes 1.26版本,Userspace代理模式已被移除,已弃用的Userspace代理模式不再受Linux或Windows支持。Linux用户应使用Iptables或IPVS,Windows用户应使用Kernelspace,现在使用--mode userspace会失败。

    • Windows winkernel kube-proxy不再支持Windows HNS v1 APIs。

  • Kubectl弃用--prune-whitelist标志

    在Kubernetes 1.26版本,为了支持 Inclusive Naming Initiative--prune-whitelist标志将被弃用,并替换为--prune-allowlist,该标志在未来将彻底移除。

  • 移除动态Kubelet配置

    DynamicKubeletConfig特性门控移除,通过API动态更新节点上的Kubelet配置。在Kubernetes 1.24版本中从Kubelet移除相关代码,在Kubernetes 1.26版本从APIServer移除相关代码,移除该逻辑有助于简化代码提升可靠性,推荐方式是修改Kubelet配置文件然后重启Kubelet。更多信息,请参见在Kubernetes 1.26版本从APIServer移除相关代码

  • 移除命令行参数

    • 在Kubernetes 1.25版本, kubeadm UnversionedKubeletConfigMap已经GA,默认使用kube-system或kubelet-config代替kube-system或kubelet-config-x.yy。

    • 在Kubernetes 1.25版本,kubeadm不会再给controlplane节点打上node-role.kubernetes.io/master:NoSchedule标签,且使用kubeadm upgrade apply的时候还会移除这个标签。

    • 在Kubernetes 1.25版本,不再支持Seccomp annotations seccomp.security.alpha.kubernetes.io/podcontainer.seccomp.security.alpha.kubernetes.io,建议使用SeccompProfile 代替。更多信息,请参见使用 seccomp 限制容器的系统调用

    • 在Kubernetes 1.25和Kubernetes 1.26版本,kube-controller-manager废弃和移除部分启动参数。

      • 移除了deleting-pods-qps、deleting-pods-burst、register-retry-count。

      • 废弃了experimental-cluster-signing-duration和pod-eviction-timeout,使用cluster-signing-duration替代。

      • 在Kubernetes 1.27版本,pod-eviction-timeout和enable-taint-manager将一起被移除。

    • 在Kubernetes 1.26版本,将移除一些与日志相关的命令行参数,这些参数在之前的版本已被弃用

    • 在Kubernetes 1.26版本,正式标记弃用 --master-service-namespace 命令行参数,它对APIServer没有任何效果。

    • 在Kubernetes 1.26版本,kubectl run未使用的几个子命令将被标记为弃用,并在未来某个版本移除,包括--cascade--filename--force--grace-period--kustomize--recursive--timeout--wait等这些子命令。

废弃的API信息

在Kubernetes 1.25和Kubernetes 1.26版本废弃了部分API,如下所示。更多信息,请参见已废弃API

  • CronJob

    在Kubernetes 1.25版本后,开始不再提供batch/v1beta1 API版本的CronJob(定时任务),但可以使用batch/v1 API版本,此API从Kubernetes 1.21版本开始可用。

  • EndpointSlice

    在Kubernetes 1.25版本后,开始不再提供discovery.k8s.io/v1beta1 API版本的EndpointSlice(端点切片),但可以使用discovery.k8s.io/v1 API版本,此API从Kubernetes 1.21版本开始可用。

    discovery.k8s.io/v1中值得注意的变更如下所示。

    • 使用每个Endpoint的NodeName字段,而不是已被弃用的topology["kubernetes.io/hostname"]字段。

    • 使用每个Endpoint的Zone字段,而不是已被弃用的topology["kubernetes.io/zone"]字段。

    • Topology字段被替换为deprecatedTopology字段,并且在API的v1版本中不可写入。

    重要

    集群升级后,请检查CoreDNS Pod是否出现failed to list *v1beta1.EndpointSlice报错。如有,请立即重启或升级CoreDNS组件。更多信息,请参见为什么CoreDNS正在使用废弃的API?

  • Event

    在Kubernetes 1.25版本后,开始不再提供events.k8s.io/v1beta1 API版本的Event,但可以使用events.k8s.io/v1 API版本,此API从Kubernetes v1.19版本开始可用。

    events.k8s.io/v1中值得注意的变更如下所示。

    • type字段只能设置为Normal或Warning。

    • involvedObject字段被更名为regarding。

    • 在创建新的events.k8s.io/v1版本Event时,action、reason、reportingController和reportingInstance都是必需的字段。

    • 使用eventTime字段而不是已被弃用的firstTimestamp字段。firstTimestamp字段已被更名为deprecatedFirstTimestamp,且不允许出现在新的events.k8s.io/v1 Event对象中。

    • 使用series.lastObservedTime字段而不是已被弃用的lastTimestamp字段。lastTimestamp字段已被更名为deprecatedLastTimestamp,并且不允许出现在新的events.k8s.io/v1 Event对象中。

    • 使用series.count字段而不是已被弃用的count字段。count字段已被更名为deprecatedCount,且不允许出现在新的events.k8s.io/v1 Event对象中。

    • 使用reportingController字段而不是已被弃用的source.component字段。source.component字段已被更名为 deprecatedSource.component,且不允许出现在新的events.k8s.io/v1 Event对象中。

    • 使用reportingInstance字段而不是已被弃用的source.host字段。 source.host字段已被更名为deprecatedSource.host,且不允许出现在新的events.k8s.io/v1 Event对象中。

  • PodDisruptionBudget

    在Kubernetes 1.25版本后,开始不再提供policy/v1beta1 API版本的PodDisruptionBudget(Pod中断预算),但可以使用policy/v1 API版本,此API从Kubernetes 1.21版本开始可用。

    policy/v1中值得注意的变更是:在policy/v1版本的PodDisruptionBudget中将spec.selector设置为空({})时,会选择名字空间中的所有 Pods,即在policy/v1beta1版本中,空的spec.selector不会选择任何Pods。如果spec.selector未设置,则在两个API版本下都不会选择任何 Pods。

  • PodSecurityPolicy

    在Kubernetes 1.25版本后,开始不再提供policy/v1beta1 API版本中的PodSecurityPolicy(Pod安全策略),并且PodSecurityPolicy准入控制器也会被删除,请将PodSecurityPolicy迁移到Pod Security Admission或第三方准入Webhook。

    有关迁移指南的更多信息,请参见从PodSecurityPolicy迁移到内置PodSecurity准入控制器。 有关弃用的更多信息,请参见PodSecurityPolicy弃用:过去、现在和未来

  • RuntimeClass

    在Kubernetes 1.25版本后,开始不再提供node.k8s.io/v1beta1 API版本中的RuntimeClass(运行时类),但可以使用node.k8s.io/v1 API版本,此API从Kubernetes 1.20版本开始可用。

  • HorizontalPodAutoscaler

    • 在Kubernetes 1.25版本后,开始不再提供autoscaling/v2beta1 API版本的HorizontalPodAutoscaler(Pod水平自动伸缩)。

    • 在Kubernetes 1.26版本后,开始不再提供autoscaling/v2beta2 API版本的HorizontalPodAutoscaler,但可以使用autoscaling/v2 API版本, 此API从Kubernetes 1.23版本开始可用。

  • Flow control resources

    在Kubernetes 1.26版本后,开始不再提供flowcontrol.apiserver.k8s.io/v1beta1 API版本的FlowSchema和PriorityLevelConfiguration,但此API从Kubernetes 1.23版本开始,可以使用flowcontrol.apiserver.k8s.io/v1beta2;从Kubernetes 1.26版本开始,可以使用flowcontrol.apiserver.k8s.io/v1beta3。

特性门控

关于特性门控一般有三个阶段,Alpha阶段默认禁用、Beta阶段一般默认启用、GA阶段将一直默认启用,且不能禁用(会在后续版本中删除这个开关功能),以下列举部分主要变化。更多信息,请参见Feature Gates

  • 在Kubernetes 1.25版本,SeccompDefault升级为Beta状态。关于如何使用SeccompDefault,请参见使用seccomp限制容器的系统调用

  • 在Kubernetes 1.25版本,CRD验证表达式语言升级为Beta状态,CustomResourceValidationExpressions默认启用。使用通用表达式语言(CEL)验证自定义资源比使用Webhook更加方便高效。更多信息,请参见验证规则指导

  • 在Kubernetes 1.25版本,ServerSideFieldValidation特性门控已升级为Beta状态,默认开启ServerSideFieldValidation。APIServer支持对未知字段的验证,使得后续考虑移除Kubectl上的该功能。更多信息,请参见APIServer支持对未知字段的验证

  • 在Kubernetes 1.25版本,新增ContainerCheckpoint Alpha特效,启动Kubelet Checkpoint API。更多信息,请参见Kubelet Checkpoint API

  • 在Kubernetes 1.25版本,新增PodHasNetworkCondition Alpha特性,使得Kubelet能给对Pod标记PodHasNetwork的状况。更多信息,请参见PodHasNetwork

  • 在Kubernetes 1.25版本,新增UserNamespacesStatelessPodsSupport Alpha特性,为无状态的Pod启用用户名字空间的支持。

  • 在Kubernetes 1.25版本,新增JobPodFailurePolicy Alpha特性,允许配置Job根据容器退出码和Pod状况来指定Pod失效的处理方法,该特性在Kubernetes 1.26版本进入Beta阶段。

  • 在Kubernetes 1.25版本,新增了MultiCIDRRangeAllocator Alpha特性,启动NodeIPAM支持多个ClusterCIDRs,kube-controller-manager通过配置--cidr-allocator-type=MultiCIDRRangeAllocator来启动控制器支持。

  • 在Kubernetes 1.25版本中,StatefulSetMinReadySeconds进入GA状态,StatefulSet默认支持minReadySeconds字段,且不能禁用。

  • 在Kubernetes 1.25版本,CronJobTimeZone进入Beta阶段,默认启用CronJob可使用TimeZone字段,且不能禁用。

  • 在Kubernetes 1.25版本,DaemonSetUpdateSurge进入GA阶段,默认可使用DaemonSet MaxSurge字段,且不能禁用。

  • 在Kubernetes 1.25版本,IdentifyPodOS进入GA阶段,默认启用spec.podOS字段,且不能禁用。

  • 在Kubernetes 1.25版本,CSIInlineVolume进入GA阶段,默认启用支持CSI内联卷支持,且不能禁用。

  • 在Kubernetes 1.25版本,EphemeralContainers进入GA阶段,默认启用支持临时容器,且不能禁用。

  • 在Kubernetes 1.25版本,新增CSINodeExpandSecret特性,允许在添加节点时将Secret身份验证数据传递到CSI驱动以供后者使用。

  • 在Kubernetes 1.25版本,CSIMigration进入GA阶段,默认启用该特性,不能禁用。

  • 在Kubernetes 1.25版本,CSIMigrationPortworx进入Beta阶段。

  • 在Kubernetes 1.25版本,ProbeTerminationGracePeriod依然处于Beta阶段, 但是默认值变为True。更多信息,请参见探针层面的terminationGracePeriodSeconds

  • 在Kubernetes 1.26版本,JobTrackingWithFinalizers处于GA阶段,默认启动Job完成情况追踪代替计算剩余Pod来判定Job完成情况。更多信息,请参见使用Finalizers追踪Job

  • 在Kubernetes 1.26版本,新增了PDBUnhealthyPodEvictionPolicy Alpha特性,支持PodDisruptionBudget指定不健康的Pod驱逐策略。

  • 在Kubernetes 1.26版本,启动动态资源分配API支持,对具有自定义参数和独立于Pod生命周期的资源,提供管理和使用的支持。

  • 在Kubernetes 1.26版本,新增StatefulSetStartOrdinal Alpha特性,支持配置StatefulSet启始序号。

  • 在Kubernetes 1.26版本,ServiceInternalTrafficPolicy处于GA阶段,允许Service使用internalTrafficPolicy字段配置服务内部流量策略。默认启用该特性,不能禁用。更多信息,请参见服务内部流量策略

  • 在Kubernetes 1.26版本,新增ValidatingAdmissionPolicy Alpha特性,通过CEL表达式实现可扩展的准入控制器。

  • 在Kubernetes 1.26版本,MixedProtocolLBService处于GA阶段,允许在同一LoadBalancer类型的Service实例中使用不同的协议。

  • 在Kubernetes 1.26版本,EndpointSliceTerminatingCondition处于GA阶段,允许使用EndpointSlice的Terminating和Serving状况字段,不能禁用。

  • 在Kubernetes 1.26版本,APIServerIdentity进入Beta阶段,默认启用在kube-system下,为每个活跃的APIServer创建Lease。

  • 在Kubernetes 1.26版本,DelegateFSGroupToCSIDriver处于GA阶段,不能禁用。

  • 在Kubernetes 1.26版本,NodeOutOfServiceVolumeDetach进入Beta阶段,默认启用该特性。当使用node.kubernetes.io/out-of-service污点将节点标记为停止服务时,不能容忍该污点的Pod将被强制删除,并且该在节点上被终止的Pod将立即进行卷分离操作。

  • 在Kubernetes 1.26版本,ServiceIPStaticSubrange处于GA阶段,启用服务ClusterIP分配策略,从而细分ClusterIP的范围。

  • 在Kubernetes 1.26版本,CPUManager和DevicePlugins处于GA阶段,默认启用该特性,不能禁用。

  • 在Kubernetes 1.26版本,新增ComponentSLIs Alpha特性,在kubelet、kube-scheduler、kube-proxy、kube-controller-manager、cloud-controller-manager等Kubernetes组件上启用/metrics/slis端点,从而允许抓取健康检查指标。

  • 在Kubernetes 1.26版本,WindowsHostProcessContainers处于GA阶段,默认启用对Windows HostProcess容器的支持。

  • 在Kubernetes 1.26版本,ExpandedDNSConfig进入Beta阶段,允许使用更多的DNS搜索域和搜索域列表,需要运行时支持。

  • 在Kubernetes 1.26版本,LegacyServiceAccountTokenNoAutoGeneration处于GA阶段,停止基于Secret自动生成服务账号令牌。默认启用该特性,不能禁用。

  • 在Kubernetes 1.26版本,ProxyTerminatingEndpoints进入Beta阶段,默认启用该特性,当ExternalTrafficPolicy=Local时, 允许kube-proxy来处理终止过程中的端点。

  • 在Kubernetes 1.26版本,新增LegacyServiceAccountTokenTracking Alpha特性,默认关闭该特性,Secret serviceaccount token添加一个标签kubernetes.io/legacy-token-last-used显示到期时间。

  • 在Kubernetes 1.26版本,PodDisruptionConditions特性进入Beta阶段且默认启用。您可以为Pod Status添加一个DisruptionTarget Condition,表明Pod因为发生干扰而被删除,并在reason字段中进一步查询Pod终止的原因。更多信息,请参见Pod disruption conditions

ACK对Kubernetes 1.26版本的增强

安全增强

ACK进一步加固了节点上下列Kubernetes相关敏感文件的访问权限。

文件路径

加固后的访问权限

/etc/kubernetes/admin.conf

600

/etc/kubernetes/kube.conf

600

/etc/kubernetes/controller-manager.conf

600

/etc/kubernetes/kubelet.conf

600

/etc/kubernetes/scheduler.conf

600

/etc/kubernetes/manifests/*.yaml

600

/etc/kubernetes/pki/*.key

600

/etc/kubernetes/pki/*.crt

600

/etc/kubernetes/pki/dashboard/*.crt

600

/etc/kubernetes/pki/etcd/*.pem

600

/var/lib/etcd/cert/*.pem

600

/var/lib/etcd/cert/*.csr

600

/var/lib/kubelet/pki/*.crt

600

/var/lib/kubelet/config.yaml

600

/usr/lib/systemd/system/etcd.service

600

/etc/systemd/system/kubelet.service

600

/etc/systemd/system/kubelet.service.d/10-kubeadm.conf

600

参考链接