Kubernetes v1.36 版本演进全解:从 CHANGELOG-1.36 看调度、DRA 与集群升级要点
本指南以仓库 CHANGELOG/CHANGELOG-1.36.md 为骨架,系统梳理 Kubernetes v1.36 正式版及其后 4 个补丁版本(v1.36.0 → v1.36.4)在调度器、Dynamic Resource Allocation(DRA)、存储、节点、认证、网络、可观测性与依赖方面带来的全部关键变化,并给出"升级前必读"的可执行检查项。读者通读后可快速判断 v1.36 对自己的集群意味着什么、哪些默认行为被改变、哪些指标与 API 需要迁移、哪些新能力值得开启,并可从 调度器框架、Feature Gate 注册表 等源码位置进一步追查实现细节。
一、版本家族与发布节奏概览
CHANGELOG-1.36 记录了自 v1.35.0 起整个 v1.36 迭代周期的全部变更,覆盖 alpha → beta → rc → GA → 补丁的完整发布链路:
| 版本 | 定位 | 主要变化密度 |
|---|---|---|
| v1.36.0-alpha.1 / alpha.2 | 功能冻结前的试验特性 | 引入 Workload/PodGroup API、PreBind 并行化、KubeletPSI GA 等 |
| v1.36.0-beta.0 / rc.0 / rc.1 | 特性固化与稳定化 | 大量 Feature Gate 转正、指标升级 Beta、DRA 子特性批量转 Beta |
| v1.36.0 | 正式发布 | 大版本核心变更(见下文各专题) |
| v1.36.1 | 首个补丁 | 修复 ZFS 上 kubelet 启动失败、Windows HNS 陈旧端点清理等 |
| v1.36.2 | 补丁 | Go 1.26.4 构建、SSA/调度指令/CSI 挂载等回归修复 |
| v1.36.3 | 补丁 | Go 1.26.5 构建、kubelet 内存泄漏与 cri-api JSON 编码修复 |
| v1.36.4 | 补丁 | DRA 结构化分配器计数错误、抢占竞态、golang.org/x 系列安全更新 |
从源码结构看,v1.36 的关键特性大多集中在三个目录中:
- 调度与工作负载:新引入的 Workload/PodGroup 调度逻辑贯穿 pkg/scheduler/framework/interface.go(新增
PreBindPreFlight、PlacementGenerate、PlacementScore、PlacementFeasible等扩展点)与pkg/scheduler/framework/plugins/下的各插件; - 特性开关:几乎全部新能力都以 Feature Gate 形式注册在 pkg/features/kube_features.go,如
TopologyAwareWorkloadScheduling、DRAAdminAccess、DRAConsumableCapacity、InPlacePodLevelResourcesVerticalScaling等; - client-go 基础库:informer 行为变更由
AtomicFIFO、UnlockWhileProcessingFIFO等 gate 控制,定义于 staging/src/k8s.io/client-go/features/known_features.go。
二、发布物与获取方式
每个小版本均按 Source / Client / Server / Node / Container Images 分类发布。源码包为 kubernetes.tar.gz 与 kubernetes-src.tar.gz;Client 二进制覆盖 darwin(amd64/arm64)、linux(386/amd64/arm/arm64/ppc64le/s390x)、windows(386/amd64/arm64);Server 与 Node 二进制覆盖 linux amd64/arm64/ppc64le/s390x(Node 另有 windows-amd64)。每个文件均附带 sha512 哈希用于完整性校验。
容器镜像以 manifest list 形式发布,同一镜像名支持多架构,也可通过给镜像名追加 -amd64、-arm64、-ppc64le、-s390x 后缀直接拉取特定架构。v1.36 各版本的镜像清单包括:
registry.k8s.io/kube-apiserver:v1.36.xregistry.k8s.io/kube-controller-manager:v1.36.xregistry.k8s.io/kube-scheduler:v1.36.xregistry.k8s.io/kube-proxy:v1.36.xregistry.k8s.io/kubectl:v1.36.xregistry.k8s.io/conformance:v1.36.x(用于运行 conformance 测试)
例如校验某版本源码包:sha512sum kubernetes.tar.gz,并与 CHANGELOG 中对应条目比对。拉取镜像示例:docker pull registry.k8s.io/kube-apiserver:v1.36.4。
三、升级前必读:v1.36 的 Action Required 清单
CHANGELOG 中明确标记为 "ACTION REQUIRED / (No, really, you MUST read this before you upgrade)" 的变更必须在你升级前完成评估:
1. 两个指标改名(涉及监控告警迁移)
- kube-controller-manager:
volume_operation_total_errors→volume_operation_errors_total。基于旧指标的仪表盘与告警规则必须更新。 - apiserver/etcd:
etcd_bookmark_counts→etcd_bookmark_total。
这体现了 v1.36 在可观测性规范化上的整体取向:多个计数器型指标被统一为 <name>_total 命名(详见"可观测性"章节)。
2. 调度器 PreBind 插件并行化(插件作者必须适配)
v1.36 在调度框架中新增了"PreBind 前检查"(PreBindPreFlight)扩展点,使 PreBind 阶段可以并行执行以降低绑定延迟:
- 插件可在
PreBindPreFlight方法中返回AllowParallel: true选择并行执行; - 插件实现必须将返回值改为
*PreBindPreFlightResult;返回nil则维持原有串行行为。
该接口已落地于源码:框架层通过 pkg/scheduler/framework/runtime/framework.go 的 RunPreBindPreFlights 批量调度各插件的 PreBindPreFlight,接口定义见 pkg/scheduler/framework/interface.go。内置插件中,DRA 动态资源插件 与 卷绑定插件 均已在 PreBindPreFlight 中返回 AllowParallel: true,使 DRA 分配与 CSI 卷绑定成为首批受益于并行化的 PreBind 工作。
3. kubeadm 移除 flex-volume 内置支持
SIG Storage 自 v1.22 起就建议从 flexVolume 迁移到 CSI。v1.36 中 kubeadm 不再自动为 KCM static pod 挂载 flexVolume 插件目录。若仍要使用 flexVolume,必须自行:
- 使用非 distroless 基础镜像的自定义 KCM 镜像;
- 给 KCM 传
--flex-volume-plugin-dir; - 通过 kubeadm 的
extraVolumes机制把/usr/libexec/kubernetes/kubelet-plugins/volume/exec挂载进 KCM static pod。
4. DRA 资源状态更新的细粒度 RBAC(Beta)
启用 DRAResourceClaimGranularStatusAuthorization(v1.36 进入 Beta)后,更新 ResourceClaim 状态所需的权限被收紧:
- 调度器与控制面控制器须被授予
resourceclaims/binding上的update/patch; - DRA 驱动须被授予
resourceclaims/driver上的associated-node:update或arbitrary-node:update(或其 patch 等价),并按resourceNames限制到自己的 claim。
不满足上述 RBAC 的调度器/控制器/驱动将无法正常回写 claim 状态。
5. 审计日志轮转默认值调整(防止磁盘被写满)
kube-apiserver 的三个审计参数默认值发生变化:--audit-log-maxsize=0 现在表示关闭按大小轮转(默认仍为 100 MB);--audit-log-maxage 默认变为 366(保留 1 年);--audit-log-maxbackup 默认变为 100。如需永久保留全部轮转日志,需显式传 --audit-log-maxage=0 --audit-log-maxbackup=0。
6. 抢占(Preemption)语义相关提示
- PostFilter 扩展点结果类型扩展:
PostFilterResult现在携带被抢占 Pod 列表,PostFilter 插件实现需更新为从PostFilter方法返回被抢占 Pod;返回nil表示未抢占任何 Pod。 - 在
PreBind阶段被抢占的 Pod 改为重新进入 backoff 队列,而不是通过 API server 删除,抢占处理更平滑。
四、调度与工作负载:Workload/PodGroup API 与拓扑感知调度
v1.36 是"以组(group)为单位调度"的里程碑版本,CHANGELOG 的 API Change 条目大量围绕此主题。
1. Workload 与 PodGroup API 演进
- 引入
scheduling.k8s.io/v1alpha2的 Workload 与 PodGroup API,用于表达工作负载级调度需求,并移除 v1alpha1 Workload API; - Workload 与 PodGroup API 与 Job 控制器集成,支持 gang scheduling(整组调度);
- 新增准入插件,校验 PodGroup 引用的 Workload 存在且匹配声明的 PodGroupTemplate spec;
- PodGroup 对象新增删除保护机制;
- 调度成功后 kube-scheduler 更新 PodGroup 状态,写入
PodGroupScheduledcondition,反映整组已调度或不可调度; - 为支持 workload-aware 抢占,Workload 与 PodGroup API 新增
DisruptionMode、PriorityClassName、Priority字段(受WorkloadAwarePreemptiongate 控制); - 破坏性改动:
PodGroupInfo重命名为PodGroupState,使用Handle.WorkloadManager的自定义调度插件可能受影响; - 新插件
PodGroupPodsCount:在组内优先为 Pod 数量更高的 placement 打分。
2. Topology-Aware Workload Scheduling(TAS,Alpha)
在 TopologyAwareWorkloadScheduling Feature Gate 之后新增了整套 TAS 能力:
- PodGroup 上可表达
SchedulingConstraints拓扑约束; - 调度器新增
PlacementGenerate扩展点用于生成候选 placement,新增PlacementScore扩展点用于给 placement 打分,并将MinNodeScore/MaxNodeScore弃用为MinScore/MaxScore; - 新增
TopologyPlacement插件实现PlacementGenerate,调度 PodGroup 时把约束纳入考量; - PodGroup 调度周期内加入 TAS 逻辑,支持把 PodGroup 调度到拓扑域匹配的节点上;
NodeResourcesFit插件被扩展以实现PlacementScore;- 主调度循环新增 PodGroup 调度周期,使一个 PodGroup 内所有 Pod 在单个周期内完成调度。
3. 抢占行为细化
WorkloadAwarePreemption开启后,PodGroup 找不到 placement 时会对整组执行 workload-aware 抢占,而非对每个 Pod 执行默认抢占;- 处于
WaitOnPermit的 Pod 被抢占时进入 backoff 队列而非标记为不可调度; scheduler_preemption_victims指标在异步/同步抢占两种模式下口径统一(均表示被选为 victims 的 Pod 数量)。
上述扩展点(PreBindPreFlight、PlacementGenerate、PlacementFeasible 等)的接口均定义于 pkg/scheduler/framework/interface.go,可供自定义插件作者查阅与实现。
五、DRA(Dynamic Resource Allocation):主版本推进最密集的子系统
v1.36 中 DRA 相关的 API Change/Feature 条目数量最多,整体呈现"核心能力全面 Beta/GA、周边新能力持续 Alpha"的态势。汇总如下:
| 能力 | v1.36 状态 | 备注 |
|---|---|---|
| DRA API 稳态化 | Stable | 更新 API 注释以反映 DRA 已稳定 |
DRAAdminAccess |
GA | 允许 admin 对任意 claim/设备操作 |
DRAPrioritizedList |
GA | 优先级列表分配 |
DRAConsumableCapacity |
默认开启 | 可消费容量/共享计数器 |
| DRA 扩展资源(extended resource) | Beta | 配额语义同时加固(修复了绕过管理员配额的口子) |
DRAPartitionableDevices |
Beta | 可分区设备 |
| Device Binding Conditions(KEP #5007) | Beta,默认开启 | 设备绑定条件 |
| Device taints / tolerations(KEP #5055) | Beta | ResourceSlice 中 DeviceTaints 默认开启;DeviceTaintRules 需启用 resource.k8s.io/v1beta2 与 gate;修改 effect 时 taint 的 TimeAdded 自动更新 |
DRAListTypeAttributes(KEP-5491) |
Alpha(默认关闭) | 设备属性支持 list 类型 |
DRANodeAllocatableResources |
Alpha | ResourceSlice 新增 NodeAllocatableResourceMappings 映射设备到节点可分配资源 |
DRAResourcePoolStatus |
Alpha | 新增 ResourcePoolStatusRequest API(v1alpha1)供外部调度器查询各 pool 设备可用性 |
DRAResourceClaimGranularStatusAuthorization |
Beta | 细粒度 RBAC(见升级清单) |
值得展开的 Alpha 新特性:
- List 类型属性(KEP-5491,
DRAListTypeAttributes):驱动可在 ResourceSlice 的设备属性中使用bools/ints/strings/versionslist 字段,单设备属性值(含标量与 list)总数上限 48;matchAttribute约束在候选设备 list 值交集非空时匹配,distinctAttribute(受ConsumableCapacity控制)要求各候选设备 list 值两两不相交,标量被隐式视为单元素集合;新增 CEL 函数.includes,例如device.attributes["dra.example.com"].model.includes("model-a"),便于驱动在标量与 list 类型之间平滑迁移。 - PodGroup 共享 claim(突破 256 Pod 上限):PodGroup 可通过
spec.resourceClaims引用 ResourceClaim/ResourceClaimTemplate;由 PodGroup 发起的 claim 为整组保留而非单 Pod,从而支持超过 256 个 Pod 共享同一个 ResourceClaim;PodGroup 引用的 ResourceClaimTemplate 会复制为专属该组的 ResourceClaim。 - kubeletplugin 发布设备元数据:DRA 驱动可在 Pod 的 CDI 挂载中发布设备元数据(对应 CDI spec 升级到 v0.5.0)。
ReconcilePoolWithName:ResourceSlice 控制器新增按 pool 粒度协调的可选接口,无需在 slice 上设置 NodeName;"全节点可见"不再是默认值,需要显式声明集群级资源。
DRA 调度器内置实现位于 pkg/scheduler/framework/plugins/dynamicresources/(含测试 dynamicresources_test.go),其 PreBindPreFlight 已并行化。v1.36 还对其分配算法做了一系列正确性修复(详见第九节),例如结构化分配器(structured allocator)在探索候选时对共享计数器计数错误、同设备被双分配给不同 claim 的竞态、allocationMode: All 与 PrioritizedList 组合失效等。
六、存储与节点(Node/Kubelet/CSI/Volume)变化
1. 存储相关
- ImageVolume 转 Stable,并新增
ImageVolumeWithDigest:容器状态中包含镜像卷的 digest; VolumeAttributesClassgate 锁定为 true,首选存储版本升到storage.k8s.io/v1;git-repo卷插件默认禁用且无法再开启(deprecation);- 移除 in-tree Portworx 卷插件:删除 GA gate
CSIMigrationPortworx(v1.33 起锁定)与 alpha gateInTreePluginPortworxUnregister,全部操作转向 CSI; MutableCSINodeAllocatableCount转 GA(gate 锁定启用);- CSI 卷调度新行为可选择性开启(opt-in scheduling behavior for CSI volumes);
- 新增 alpha(
PersistentVolumeClaimUnusedSinceTimegate):PVC 保护控制器在无非终止 Pod 引用 PVC 时把Unused=True(含lastTransitionTime)写入 PVC status 的Unusedcondition,便于外部自动化回收闲置存储; SnapshotMetadataService升到v1beta1,移除 v1alpha1;- KCM pv-controller 减少对 CSI 卷的 get PV 请求;
- CRD/Snapshot:
HonorPVReclaimPolicyGA gate 删除(v1.33 起锁定)。
2. 节点与 kubelet
- Feature Gate 转正/升 Beta:
UserNamespacesSupport→ GA;NodeLogQuery→ GA(Windows 上亦生效);ProcMountType→ GA;KubeletPSI→ GA(kubelet 通过 Summary API 暴露 Linux cgroup PSI 指标,含 CPU/内存/I/O 的 CPU/IO/内存压垮信息),并修复不支持 PSI 的 OS 上误报 0 值的问题;InPlacePodLevelResourcesVerticalScaling→ Beta(默认开启):支持 Pod 级 CPU/内存资源原地 resize,修复 Pod 创建时误报 resize-in-progress 的缺陷;RestartAllContainersOnContainerExits→ Beta(默认开启):单容器 Pod 可快速重启,重启容器日志保留,lastTerminationStatus匹配该动作;禁止对非 sidecar initContainer 设置RestartContainerresize 策略(其 resize 从未被支持);PLEGOnDemandRelist:保持在 Beta 但默认关闭;ReloadKubeletClientCAFile(默认开启):运行中更新--client-ca-file后,向 TLS 客户端宣告的受信 CA 立即生效。
- MemoryQoS(cgroup v2,KEP-2570):新增分层内存保护——Guaranteed Pod 用
memory.min、Burstable Pod 用memory.low,并配套节点级指标与回滚协调;KubeletConfiguration新增MemoryReservationPolicy选项;当计算出的 requests 为 0 时显式写入memory.min=0。 - Pod 级资源与拓扑/CPU/内存管理器联动:Topology、CPU、Memory 管理器可识别并作用于
pod.spec.resources,支持"混合容器 + Pod 级共享资源池"两种灵活模型。 - 其他 kubelet 行为修复:ZFS 上因缺少 cadvisor 插件导致启动失败;修复 mirror pod 在
NodeDeclaredFeatures开启时更新导致的空指针;server 证书按 IP 拨号时热加载;PodReadyToStartContainers条件在 sandbox 创建后立即置位(不再等镜像拉取);CRI runtime handlers 排序输出避免无谓 Node 更新;插件管理器对注册失败改用指数退避重试(初值 500ms、每次翻倍、上限约 2 分钟)。 - CRI 与流式传输:新增 RuntimeService 流式 RPC(
StreamPodSandboxes、StreamContainers、StreamContainerStats、StreamPodSandboxStats、StreamPodSandboxMetrics)与 ImageServiceStreamImages;kubelet 新增提供节点上 Pod 信息的 gRPC 服务;cri-api 的PullImageResponse.image_id字段一度新增后又被回退。
七、API Machinery 与 client-go:informer 模型与序列化演进
v1.36 对 client-go 的 informer 核心做了多年少见的大改,全部以 Feature Gate 包裹:
AtomicFIFO(默认开启):默认 informer 行为改为——在逐个调用 handler 的OnDelete/OnAdd/OnUpdate之前,先用 list/relist 中的全部对象更新 store 状态,保证 handler 内观察到的 store 快照对应服务器某个 resourceVersion 的真实对象集合;同时改进 resync 处理,降低 store 锁竞争。需要时可关闭以临时恢复旧行为。UnlockWhileProcessing(默认开启):informer 在排队事件处理期间即可入队新 watch 事件,避免事件突发时因慢处理竞争而丢 watch。LastStoreSyncResourceVersion:store 跟踪自己已同步到的 resourceVersion,并提供LastStoreSyncResourceVersion()获取(未同步时返回空串,依赖AtomicFIFO)。相关 gate 常量定义见 staging/src/k8s.io/client-go/features/known_features.go。InOrderInformers/RealFIFOGA:通过 RealFIFO 落实顺序化 informer;内部实现将逐步用 RealFIFO 取代DeltaFIFO。- 其他 client-go 修复:修复 informer 启动期罕见死锁;修复 Reflector 在收到 resourceVersion "0" 合成 ADDED 事件时对 watch 重启版本的误判;修复
StartEventWatcher的 goroutine 热循环。
序列化与对象管理方面:
metav1.FieldsV1的Raw字段直接访问被弃用,迁移到NewFieldsV1(string)、GetRawBytes()、GetRawString()、SetRawBytes()访问器;k8s.io/apiREST 类型移除临时 build-tag 的ProtoMessage()标记方法(protobuf 序列化应使用k8s.io/apimachinery/pkg/runtime/serializer/protobuf);- 新增 staging 模块
k8s.io/streaming与k8s.io/cri-streaming,承载流式传输与 CRI 流式服务端;apimachinery/pkg/util/httpstream(含 spdy/wsstream)保留为不推荐使用的兼容包装;抽出的 SPDY roundtripper 保留NO_PROXY/no_proxy的 CIDR 匹配; - CRD 校验严格化:schema 声明数值格式(
int32/int64/float/double)时强制范围检查,存量越界对象通过 validation ratcheting 保留; - 服务端应用(SSA)系列修复:空数组/空 map 不再被误判为"不存在"、associative list 原子元素不再被复制、
/status子资源写入的字段属主修正。
八、认证、授权与安全
MutatingAdmissionPolicy转 GA(v1,默认开启):变更准入策略正式可用;ConstrainedImpersonation转 Beta(默认开启):限制 impersonation 逃逸风险;慢请求可通过apiserver.latency.k8s.io/impersonation审计注解追踪;新增 4 个指标(labels:mode、decision):apiserver_impersonation_attempts_total、apiserver_impersonation_attempts_duration_seconds、apiserver_impersonation_authorization_attempts_total、apiserver_impersonation_authorization_attempts_duration_seconds;ExternalServiceAccountTokenSigner→ GA;CSIServiceAccountTokenSecrets→ GA;- kubelet 细粒度 API 鉴权 → stable;
- Pod Certificates(Beta):新增
spec.stubPKCS10Request,向期望 PKCS#10 CSR 的既有 CA 实现提供兼容(pkixPublicKey、proofOfPossession被弃用); - manifest 形式的准入控制配置(KEP-5793,Alpha):开启
ManifestBasedAdmissionControlConfig后,可通过AdmissionConfiguration.staticManifestsDir从磁盘加载准入 webhook 与 CEL 策略;这些策略自 apiserver 启动即生效、在 etcd 不可用时仍然存活、并防止基于 API 的准入资源被篡改; - client-go/transport:CA 根证书热加载(
ClientsAllowCARotation,默认开启);TLS 缓存与证书轮换 goroutine 的垃圾回收(ClientsAllowTLSCacheGC,默认开启;未接入 gate 的二进制可用环境变量KUBE_FEATURE_ClientsAllowTLSCacheGC=false关闭),配套rest_client_transport_cert_rotation_gc_calls_total、rest_client_transport_cache_gc_calls_total指标; - 凭据插件 allowlist 中
AllowlistEntry.Name重命名为AllowlistEntry.Command;kubectl kuberc set可设置credentialPluginPolicy与credentialPluginAllowlist; StrictIPCIDRValidation在 kube-apiserver 默认开启:不再允许带前导 0 的 IP(如010.000.000.005)或语义含糊的 CIDR(如192.168.0.5/24必须写成192.168.0.0/24或192.168.0.5/32)。
九、网络与集群生命周期
1. 网络(Service / kube-proxy)
- Service
.spec.externalIPs开始输出弃用警告; RelaxedServiceNameValidation转 Beta(默认开启):新建 Service 名称改用NameIsDNSLabel()校验,规则放宽;discovery.k8s.io/v1EndpointSlice 的endpoints字段在 OpenAPI 中更正为可选(与真实服务端行为一致);- ServiceCIDR 主资源写入时忽略请求中的 status 变更(与其余 API 一致),
ServiceCIDRStatusFieldWipinggate 可临时关闭; - kube-proxy:修复 nftables 模式在
nftv1.1.3 上的兼容、大规则集加载的 CPU 优化、conntrack 陈旧 UDP 条目清理的时间复杂度优化、endpoints 全 unready 时的日志刷屏;大集群模式(超过 1000 个 endpoint)不再执行 full-sync; - kube-proxy IPVS/winkernel 回退到 v1.34 前行为(无变更时也定期复查规则,修复 v1.34 回归);winkernel 按 IP 族跟踪 load balancer,修复 Windows 上
PreferDualStack/RequireDualStack;Windows HNS 陈旧远端端点清理(L2Bridge,Pod IP 跨节点复用导致的 DNS 超时); nf_conntrack_max自动计算值被钳制到 1,048,576,防止高核机器内存过度消耗。
2. kubeadm 与 etcd
- etcd 学习成员(learner)提升链路韧性:等待 learner 启动后再 promote;promote 对已是 voting member 的节点跳过 API 调用;learner 的 client URL 不再追加进
Endpoints; - 检查 etcd 集群状态改用仲裁(quorum)判断而非所有成员健康,成员足够时不再失败;
kubeadm init使用默认admin.conf/super-admin.conf路径时在内存中构造指向localAPIEndpoint的 kubeconfig,规避负载均衡器晚于首个 apiserver 就绪的问题;kubeadm join:worker 节点跳过 LocalAPIEndpoint 默认值填充;获取 kubeadm-config ConfigMap 改用 KubernetesAPICall 超时(默认 1 分钟)而非可选的 350ms 短重试(kubeadm reset等通过新参数shortConfigMapGet仍走短重试);以--v=1+ 日志打印 discovery 用 CA 证书信息;- kube-apiserver 的 kubelet 客户端改用专用 ClusterRole
system:kubelet-api-admin; extraArgs覆盖不再按字母排序(仅默认参数排序),保留用户顺序以便控制--service-account-issuer等敏感顺序;kubeadm upgrade的 CreateJob 预检超时增至 1 分钟(Windows 更从容;pause 镜像拉取慢可先kubeadm config images pull --kubernetes-version <目标版本>预拉,或用--ignore-preflight-errors跳过);- 修复
kubeadm-flags.env内容为KUBELET_KUBEADM_ARGS=""时 upgrade 失败;reset 时忽略 EINVAL;etc< v3.6.0不再在版本映射支持范围内,弃用 etcd 的--experimental-initial-corrupt-check/--experimental-watch-progress-notify-interval,改由--feature-gates=InitialCorruptCheck=true与--watch-progress-notify-interval提供; kubeadm init phase certs --dry-run正确复制既有 CA 文件。
十、可观测性与 kubectl
1. 指标:Prometheus 原生直方图与大批量升级
所有核心组件(kube-apiserver、kube-controller-manager、kube-proxy、kube-scheduler、kubelet)在开启对应 Feature Gate 后支持 Prometheus 原生直方图,以经典与原生两种格式暴露,指数桶配置 factor=1.1、max buckets=160。
大批指标从 Alpha 升级到 Beta(获得更强的稳定性承诺):
- component-base:
kubernetes_build_info、rest_client_requests_total、rest_client_request_duration_seconds、running_managed_controllers; - scheduler:
scheduler_goroutines、scheduler_permit_wait_duration_seconds、scheduler_plugin_evaluation_total、scheduler_plugin_execution_duration_seconds、scheduler_scheduling_algorithm_duration_seconds、scheduler_unschedulable_pods; - 其他:workqueue 系列、HPA(
reconciliations_total、reconciliation_duration_seconds、metric_computation_total、metric_computation_duration_seconds)、Job 控制器两个指标、多个 EndpointSlice 指标、apiserver_storage_events_received_total、watch_list_duration_seconds。
新增的重要指标(按功能归类):
- 调度:
scheduler_pod_scheduled_after_flush_total(超时从 unschedulablePods 队列冲刷后被成功调度)、terminated_containers_total(按退出码分桶)、Device Binding Conditions 的两个指标; - apiserver:peer 代理错误指标
apiserver_peer_proxy_errors_total、apiserver_peer_discovery_sync_errors_total;informer 缓存层资源版本指标;informer_processing_latency_seconds(RealFIFO 事件处理延迟);WebSocket 流式apiserver_websocket_streaming_requests_total/kubelet_streaming_websocket_requests_total; - kubelet:
kubelet_metrics_provider(识别指标来源);PSI GA; - 控制器:
informer_queued_items(informer 队列长度)、daemonset_controller_stale_sync_skips_total、job_controller_stale_sync_skips_total(stale cache 延迟同步计数); - cloud:
route_controller_route_sync_total; - 端到端告警注意事项:除改名指标外,
dra_operations_duration_seconds的is_error标签此前反了,v1.36 修正为错误操作is_error=true。
2. /flagz、/statusz、/configz
config.k8s.io/flagz与config.k8s.io/statuszAPI 升到v1beta1;/flagz、/statusz启用 YAML 支持,并接入 apiserver 请求指标;- kubelet、kube-scheduler、cloud-controller-manager、kube-proxy 的
/configz序列化apiVersion/kind并使用公开类型。
3. kubectl 与 CLI
kubectl explain -r(--recursive简写);kubectl explain展示EXTERNAL DOCS区块;kubectl diff新增--show-secret;kubectl wait支持多 condition;kubectl rollout undo对 apply 管理的资源给出警告;kubectl get node -o wide输出新增ARCH列;kubectl describe node展示聚合 ResourceSlice 并正确显示 Pod 级资源请求/限制;kubectl describe service显示appProtocol;CronJob describe 显示timezone;kubectl get ingressclass为默认 IngressClass 标(default);kubectl exec/logs指定不存在容器名时列出可用容器名;kubectl logs -f在 ContainerCreating/PodInitializing 时等待容器启动而非立即失败;kubectl run -i/-it不再丢失 attach 建立前的容器输出;kubectl attach/run新增--detach-keys;kubectl scale输出反映期望副本数;kubectl describe描述多对象时默认不展示相关事件(需显式--show-events);kubectl kuberc命令转 Beta;kustomize 升到 v5.8.1;kubectl delete多个 StatefulSet Pod 修复。
十一、依赖与工具链演进
v1.36 全周期工具链与依赖升级信息(构建语言演进是补丁版本划分的重要标志):
| 版本 | 构建 Go 版本 |
|---|---|
| v1.36.0-alpha.1/alpha.2 | Go 1.25.6 → 1.25.7 |
| v1.36.0 | Go 1.26.0(后续补丁 1.26.1/1.26.2) |
| v1.36.1 | Go 1.26.2 |
| v1.36.2 | Go 1.26.4 |
| v1.36.3 | Go 1.26.5 |
| v1.36.4 | 不变 |
其余关键依赖:etcd client/镜像升至 v3.6.8;CoreDNS 升至 v1.14.2;pause 镜像 v3.10.2;cAdvisor 升至 v0.56.2(vendor 内 v0.53→v0.56);cri-tools v1.35.0;kube-dns v1.26.7;kustomize v5.8.1;structured-merge-diff/v6 升至 v6.3.3(1.36.3);sigs.k8s.io/knftables 0.0.21、grpc 1.79.3 等。v1.36.4 还专门升级 golang.org/x/text 与 golang.org/x/net 以包含安全更新。
被移除/替换的重要依赖值得注意:in-tree 的 github.com/docker/docker、github.com/libopenstorage/openstorage(Portworx)、github.com/grpc-ecosystem/go-grpc-prometheus、go.uber.org/automaxprocs、gotest.tools/v3 等退出依赖树;同时新引入 github.com/cenkalti/backoff/v5、github.com/moby/moby/api、github.com/moby/moby/client、gonum.org/v1/gonum 等。server 镜像改用 kube-log-runner 取代 go-runner(保留 /go-runner 路径兼容),为将来无 go-runner 的基础镜像做准备。
十二、补丁版本聚焦:值得逐个核对的修复
补丁版本集中修复了大版本引入或遗留的关键回归,建议升级到最新的 v1.36.4:
v1.36.1 关键修复
- ZFS 文件系统上 kubelet 因缺少 cadvisor 插件启动失败;
- Windows L2Bridge 网络下 Pod IP 复用导致的陈旧 HNS 端点未清理(曾引发 DNS 超时);
- kube-proxy 大集群模式(>1000 endpoints)不再执行 full-sync;
- kubeadm 若干 join/init 行为修正(localAPIEndpoint、quorum 检查、专用 kubelet ClusterRole)。
v1.36.2 关键修复
- 服务端应用(SSA)回归:patch 容器类型(list/map)可能对原本成功的 apply 请求返回
422 required; - 由 Secret 中二进制非 UTF-8 数据设置的容器环境变量在 v1.34+ 被破坏的问题;
- 悬空 Job 调度指令(nodeSelector/tolerations/node affinity)在
JobSuspended条件未置位前无法修改的回归; - CSI
requiresRepublish=true场景下 kubelet 误删挂载目录导致陈旧卷内容; - DRA 将互斥设备分区同时分配给多个 Pod 的缺陷(影响
SharedCounters+ 多分配设备); - endpoint 控制器处理从未更新过的双栈前 Service 空
IPFamilies时 panic。
v1.36.3 关键修复
- kubelet 内存泄漏回归:每次 Pod sync 泄漏 context(v1.36 引入);
- cri-api 回退到 v1.34 之前的
KeyValue.valueJSON 编码; - kubeadm etcd learner 提升韧性、member 已是 voting member 时跳过 promote API 调用。
v1.36.4 关键修复
- DRA 结构化分配器以 pool 名为共享计数器缓存键导致的错误分配判定(同名 pool 跨驱动串用);
- 抢占竞态:preemptor Pod 可能卡在 unschedulable;
- kubelet/DRA:重试部分失败的
PrepareResources产生重复 CDI 设备 ID 导致容器启动失败; FakeCustomStore重新实现Bookmark/LastStoreSyncResourceVersion,恢复对 cache.Store 接口的满足;golang.org/x/text、golang.org/x/net安全更新。
十三、升级检查清单与延伸阅读
结合以上内容,升级到 v1.36(或打满补丁的 v1.36.4)前建议按此清单自检:
- 监控:替换两个改名指标(
volume_operation_errors_total、etcd_bookmark_total);确认依赖 Alpha 指标的告警会随升级变化。 - RBAC:若启用 DRA 细粒度授权(Beta),补齐
resourceclaims/binding、resourceclaims/driver权限。 - 调度插件:若开发自定义 PreBind/PostFilter 插件,适配
PreBindPreFlightResult与携带被抢占 Pod 的PostFilterResult新签名。 - 存储:确认无 git-repo/flexVolume/Portworx in-tree 依赖;如有,按上文方案迁移或自建 KCM 镜像。
- 网络:确认业务 IP/CIDR 字段无前导 0 写法;关注 Service
externalIPs弃用警告。 - 审计:按新默认值(maxage=366、maxbackup=100)评估磁盘容量。
- 清单 vs 现状:核对 pkg/features/kube_features.go 中上表列出的 gate 与默认值,结合自身版本确认。
如需追查某一具体变更的代码实现,建议按主题定位源码:调度扩展点见 pkg/scheduler/framework/interface.go 与 pkg/scheduler/framework/plugins/;特性开关统一定义于 pkg/features/kube_features.go;client-go 新 gate 见 staging/src/k8s.io/client-go/features/known_features.go。仓库中的 CHANGELOG/README.md 还说明了 changelog 的组织方式,可按版本继续查阅 1.35 及更早版本的对应文件做对比。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00