阿里云容器服务Kubernetes版(ACK)严格遵循社区一致性认证。本文介绍ACK发布Kubernetes 1.26版本所做的变更说明。
索引
版本升级说明
ACK针对Kubernetes 1.26版本提供组件的升级和优化。
核心组件 | 版本号 | 升级注意事项 |
Kubernetes | 1.26.15-aliyun.1、1.26.3-aliyun.1 |
|
etcd | v3.5.4 | 无 |
CoreDNS | 1.9.3.10-7dfca203-aliyun | 无 |
CRI | Containerd 1.6.20 | 仅支持Kubernetes 1.24.0及以上版本。 |
CSI | 升级至组件当前支持的最新版本。详细信息,请参见组件变更记录csi-plugin、csi-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功能的集群,请使用以下任意一种方式执行限制后,再将集群升级到更高版本。
使用ACK提供的策略管理功能。ACK能够提供更多符合Kubernetes应用场景的策略规则,在规则配置上也更加灵活简单。更多信息,请参见配置容器安全策略(新版)。
使用内置的Pod Security Admission,使用方式更加友好,更多信息,请参见Pod Security Admission。关于如何从PodSecurityPolicy迁移到内置的PodSecurity准入控制器,请参见从PodSecurityPolicy迁移到内置的PodSecurity准入控制器。
自行部署和配置使用第三方的准入插件。
在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
遵循scheme
和headers
字段配置,可以与探针行为保持一致,设定自定义的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-class
Annotation设置),会选择最新的一个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卷插件,移除 Flocker、 Quobyte和StorageOS 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/pod
和container.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版本,正式标记弃用 --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 |