Kubernetes 1.12 变更日志解读:调度器重构、RuntimeClass 与 HPA v2beta2 版本升级指南
本篇基于仓库中的 CHANGELOG/CHANGELOG-1.12.md 整理 Kubernetes v1.12.0 正式发布说明(Known Issues、Major Themes、Action Required、Deprecations、New Features、API Changes、External Dependencies)以及 v1.12.1–v1.12.10 补丁版本的关键修复脉络,并结合当前仓库中仍存在的对应源码路径(如 pkg/scheduler/framework、pkg/proxy/ipvs、pkg/controller/ttl/ttl_controller.go)帮助读者理解这些变更的落点。读完后可掌握:1.12 各组件的能力变化与特性门控、升级前必须执行的破坏性操作(Action Required)、以及如何在源码中追溯每一项变更的实现位置。
版本谱系与发布产物结构
CHANGELOG-1.12.md 覆盖 v1.12 分支的全部 15 个版本点:v1.12.0-alpha.1 → v1.12.0-beta.1 → v1.12.0-beta.2 → v1.12.0-rc.1 → v1.12.0-rc.2 → v1.12.0,再到 v1.12.1 ~ v1.12.10。v1.12.0 一节额外记录了本次发布对应的源码区间:
Start SHA:
91e7b4fd31fcd3d5f436da26c980becec37ceefe,End SHA:337e0e18f1aefa199bd0a1786f8eab42e948064c
每个版本点都附带四类发布产物及校验和(正式版用 sha512,预发布版用 sha256):
- Client Binaries:
kubernetes-client-{darwin|linux|windows}-{386|amd64|arm|arm64|ppc64le|s390x}.tar.gz,仅含 kubectl、kubectl-convert 等客户端工具; - Server Binaries:
kubernetes-server-linux-{amd64|arm|arm64|ppc64le|s390x}.tar.gz,含 kube-apiserver、kube-controller-manager、kube-scheduler、kubectl 等控制面组件; - Node Binaries:
kubernetes-node-linux-*.tar.gz及kubernetes-node-windows-amd64.tar.gz,含 kubelet、kube-proxy、containerd 相关工具; - 源码包:
kubernetes-src.tar.gz与完整kubernetes.tar.gz。
注意版本间命名规则差异:控制面镜像自 v1.12 起去掉架构后缀(仅 kube-dns 保留),这与下文 Action Required 一节呼应。补丁版本(如 v1.12.10)每个版本只包含“Changelog since 上一版本”的增量条目,这是 K8s 补丁发布“小步快跑、只修关键缺陷”节奏的体现。
已知问题(v1.12.0 Known Issues)
变更日志在 v1.12.0 一节明确列出四个已知问题,升级前必须知晓:
- CoreDNS 默认化被撤回:Feature #566(CoreDNS 作为 kube-up 部署默认 DNS)因可伸缩性内存消耗问题被移出本版本。变更日志原文提醒:若计划在超过 2000 节点的集群使用 CoreDNS,需仔细考虑 CoreDNS Pod 的 memory 资源限制,并实测内存占用。
- kube-controller-manager 证书目录:未提供
--tls-cert-file/--tls-private-key-file时,需要可写的--cert-dir(默认/var/run/kubernetes)来生成自签证书。 - RBAC 权限缺口:
system:kube-controller-managerClusterRole 缺少对configmap extension-apiserver-authentication的get权限,用绑定该 ClusterRole 的 ServiceAccount 运行 kube-controller-manager 会报错。 - crictl 兼容性:crictl v1.11.x 尚不支持 runtime handler 与 Windows npipe 协议,这两项随 crictl v1.12.0 与 Kubernetes v1.12.1 一起支持。
必须执行的破坏性变更(Action Required)
v1.12.0 的 Action Required 清单是升级检查表的核心,逐条摘录并给出操作要求:
| 变更 | 要求 |
|---|---|
API server 与 client-go 支持 UserInfo extra 数据键中的非字母数字字符(如 /) |
两个组件都要升级,否则含 / 的 extra 数据(HTTP 头中不允许的字符)无法正确支持 |
kubeadm v1alpha1 配置 API 被移除 |
用 kubeadm v1.11.x 的 kubeadm config migrate 把 v1alpha1 配置迁移到 v1alpha2 |
kubeadm v1alpha2 中 MasterConfiguration 更名为 InitConfiguration(v1alpha3) |
更新配置类型引用 |
kubeadm v1alpha2 中 NodeConfiguration 更名为 JoinConfiguration(v1alpha3) |
更新配置类型引用 |
kubelet --cadvisor-port 启动的 cAdvisor Web UI 被整体移除 |
仍需要 cAdvisor 的用户改以 DaemonSet 方式部署 |
kube-apiserver --storage-versions 标志弃用 |
必须移除该标志,否则集群无法安全升级到 1.12 之后版本;该标志在 1.13 移除 |
| 卷动态供给调度(DynamicProvisioningScheduling)移至 beta | alpha 特性门 DynamicProvisioningScheduling 已删除,需启用 VolumeScheduling beta 门 |
使用 --enable-admission-plugins 时 Priority 准入插件默认启用 |
若用 --admission-control 完整指定插件集,需手动加入 Priority 以支持默认开启的 PodPriority |
system-node-critical/system-cluster-critical 优先级类限定 kube-system 命名空间 |
由 PodPriority 准入插件强制(与 1.11.1+ 一致) |
| kube-addon-manager(Cluster Autoscaler 升级至 1.3.1-beta.1) | GCP 部署中 expendable pod priority cutoff 默认值从 0 改为 -10:使用优先级低于 0 的工作负载,若不想触发扩容应使用低于 -10 的优先级 |
kubeadm --skip-preflight-checks 标志移除 |
改用 --ignore-preflight-errors |
| kubeadm 控制面镜像(etcd、kube-apiserver、kube-proxy 等)不再带架构后缀 | 仅 kube-dns 保留架构后缀 |
| etcd2 后端弃用 | 1.13 移除支持 |
KubeSchedulerConfiguration 组版本迁移 |
从 componentconfig/v1alpha1 迁至 kubescheduler.config.k8s.io/v1alpha1 |
kubeadm 特性门 HighAvailability、SelfHosting、CertsInSecrets 弃用 |
新集群不可再使用,集群升级也不支持,1.13 移除 |
| OpenStack 云配置 | 若 cloud config 未定义 LoadBalancer 段,OpenStack provider 将不再初始化负载均衡,所有部署必须在该段有配置 |
| CSI 驱动升级准备 | 1.12 起调用 CSI NodeGetInfo 而非 NodeGetId(为下版本 CSI 1.0 铺路),升级前确认驱动实现了 NodeGetInfo;同时 Kubelet 设备插件注册特性默认启用,CSI driver-registrar sidecar 需配置 --kubelet-registration-path |
| 移除 CSI 文件系统类型到 ext4 的默认填充 | 生产驱动清单均已核查不受影响;使用清单外驱动的需在测试集群先行验证 |
各 SIG 主线:Major Themes 深读
调度器:吞吐、等价类缓存与 DaemonSet 默认化
变更日志 SIG-scheduling 一节给出的量化结论:
- Pod 亲和/反亲和(inter-pod affinity/anti-affinity)特性通过算法优化性能提升 100 倍以上;
- DaemonSet Pod 改由默认调度器调度(此前由 DaemonSet controller 直接建 Pod),由此可享受默认调度器的全部特性;配套变更是删除独立的 rescheduler("Remove rescheduler since scheduling DS pods by default scheduler is moving to beta");
- ImageLocality 优先级函数改进并默认启用:偏好已拥有 Pod 所需全部/部分镜像的节点,缩短 Pod 启动时间;
TaintNodesByCondition升级为 beta 并默认启用;- 大集群(>2000 节点)调度器吞吐提升约 50%。
API Machinery 与 Scheduling 联合的其他调度器改动同样值得注意:等价类缓存(equivalence class cache)重构为两级缓存;每个调度周期对少于全部节点打分("score fewer than all nodes");消除按分排序节点的成本;调度延迟指标 scheduling_latency_seconds 拆分为 predicate、priority、preemption 更细的步骤。
从当前仓库源码结构看,这些能力如今落在 pkg/scheduler/framework 插件体系下:interpodaffinity、imagelocality、defaultpreemption 等目录对应 1.12 引入的调度优化点,调度框架化重构正是以 1.12 的性能改造为基础演进而来的。
自动扩缩容:autoscaling/v2beta2 与 HPA 控制器提速
SIG-autoscaling 主线是 HPA API 与算法的统一:
- 发布
autoscaling/v2beta2:为 Object 与 Pods 指标引入 metric selectors,并为 Object 支持 AverageValue 目标(与 External 指标对齐);同时引入custom_metrics/v1beta2; - 就绪探测与平滑处理改进,覆盖更多用例。
控制器层面的配套改动:
- HPA 默认更新间隔从 30s 降到 15s,加快对指标变化的响应;
- 移除“scale up 禁止窗口”,改为忽略 Pod 初始化期间采集的 CPU 采样(仅使用 ready Pod 的指标,或创建时间与最近就绪变化间隔超过 10s 的 unready Pod 指标),避免基于初始化期无效指标触发扩容;
- 用“scale down 稳定窗口”取代固定等待:HPA 在稳定窗口内收缩到窗口期内的最高推荐值;
- 软删除 Pod 不再计入扩容副本数计算;
- HPA 控制器改用 informer 缓存替代活跃 Pod 直查。
此外,使用 Heapster 指标驱动 HPA 被标记为弃用,未来版本将禁用——指标链路的长期方向是 metrics API 与 metrics-server(1.12 升级为 v0.3.1,抓取频率提高到 30s)。
存储:卷拓扑、动态卷数与卷快照
SIG-storage 在 1.12 的推进:
- Kubernetes 卷拓扑(volume topology)特性升至 beta:Kubernetes 开始理解并基于卷可访问性信息(云卷所在 zone、SAN 阵列可达 rack 等)做调度;
- 动态最大卷数(dynamic maximum volume count)升至 beta:卷插件可按节点特性动态给出单节点卷数上限;
- 为下一版 CSI 从 beta 晋升 GA 做铺垫:mount namespace propagation 升 GA、Kubelet 插件注册机制升 beta、新增 CSI 驱动注册表(driver registry)与拓扑的 alpha 支持、CSI 本地临时卷的 alpha 支持;
- 卷快照(volume snapshotting)alpha 支持:通过 Kubernetes API 创建/删除快照、从快照创建新卷,并支持从快照数据源恢复卷(restore from volume snapshot data source);
- CSI 拓扑机制落地:Kubernetes 开始注册节点级 CSI 驱动上报的卷拓扑信息。
从源码看,快照能力的 API 类型在当前仓库中位于 pkg/apis/storagemigration 之外的 storage 组,而 1.12 引入的 Job TTL 清理机制对应 pkg/controller/ttl/ttl_controller.go("A TTL mechanism has been added to clean up Jobs after they finish")——这也是 1.12 新增特性之一,如今在 pkg/controller/ttl 中继续演进。
集群生命周期:kubeadm v1alpha3 配置体系重构
SIG-cluster-lifecycle 在 1.12 的工作集中在 kubeadm 用户体验与功能增强:
- 内部配置 API 晋升 v1alpha3,且
v1alpha1被移除。v1alpha3 将MasterConfiguration拆分为独立组件:InitConfiguration、ClusterConfiguration、JoinConfiguration、KubeletConfiguration、KubeProxyConfiguration,不同类型可用---分节写在同一 YAML 文件中; ControlPlaneEndpoint从 API 配置结构体移入ClusterConfiguration;- CRI 处理改进:纯 docker 环境不再要求安装 crictl、更好的 CRI 探测、更好的镜像拉取错误输出;
--cri-socket在 Windows 上默认tcp://localhost:2375; - 离线/隔离环境支持:kubeadm 以本地客户端版本作为回退;部分命令支持完全离线模式;未指定
--kubernetes-version且无网络时不再无限挂起(引入 HTTP 请求超时); - 证书管理:升级流程中包含证书续期;新增
kubeadm alpha phase certs renew命令;证书 DN 字段唯一性改进; - 高可用:
kubeadm join --experimental-control-plane加入控制面实例;kubeadm upgrade node experimental-control-plane升级二级控制面;配置支持多控制面实例各自APIEndpoint(bootstrap 用InitConfiguration.APIEndpoint,其余用JoinConfiguration.APIEndpoint); - 多架构(EXPERIMENTAL):支持 docker “schema 2” manifest list,是 kubeadm 部署多架构支持的第一步;
- 其他:kube-proxy 现在运行在所有节点而非仅 master;
kubeadm config print-default打印默认组件配置;kubelet 与 kube-proxy ComponentConfig 使用独立 YAML 文档;支持以既有客户端证书 join;支持 ZFS 作为 Docker graph driver(Unix);--skip-preflight-checks移除改用--ignore-preflight-errors;空/非法 hostname 拒绝继续。
API Machinery:dry-run 语义与 apiserver 加固
SIG API Machinery 本周期核心是 dry run 功能:让用户看到某条命令的结果而不持久化变更。具体语义:
- dry-run 请求走正常准入链(因此 ImagePolicyWebhook 作者必须确保 webhook 不依赖副作用);
- 为防止 dry-run 请求压垮依赖副作用+调谐机制的 webhook,
ValidatingWebhookConfiguration/MutatingWebhookConfiguration新增字段显式注册 dry-run 支持能力;若 dry-run 请求触发了不支持 dry-run 的 webhook,请求直接被 400 Bad Request 拒绝;admission.k8s.io/v1beta1.AdmissionReview新增字段告知 webhook 当前请求是否为 dry-run; - 对 CONNECT 请求(
nodes/proxy、services/proxy、pods/proxy、pods/exec、pods/attach)设置dryRun参数将导致请求被拒绝,与其他变更类 API 行为一致; - kubectl 侧配套:
kubectl apply新增--server-dry-run标志(alpha),把 dry-run 标志发送到服务端,变更不落盘。
apiserver 其他加固:panic 以 500 错误返回而非终止进程;CRD、自定义资源与 APIService 启用 API 分页;discovery 包含所有已注册 API 组(含不可用的扩展 apiserver 的组/版本);create-on-update 请求改查 CREATE 准入而非 UPDATE;etcd healthcheck 确认真实连通并调用 etcd API;audit.k8s.io 组从 v1beta1 升 v1(v1 移除审计事件中的 metav1.ObjectMeta 与 Timestamp,--audit-webhook-version/--audit-log-version 默认值将在 1.13 改为 audit.k8s.io/v1);AdvancedAuditing(高级审计)晋升 GA,取代旧式审计日志机制;--authorization-always-allow-paths 允许对 /healthz 等路径豁免授权;http/2 缓冲区调优防止并发流饥饿;LIST 请求带过期 continue token 时,apiserver 在 410 "from parameter too old" 错误中同时返回新的 continue token,允许不关心一致快照的客户端从下一键继续。
Node 侧:RuntimeClass、NodeLease 与证书轮转
SIG-node 在 1.12 的特性与移除:
- RuntimeClass(alpha):新 API 资源定义集群中可用的运行时类别,Pod 通过
RuntimeClassName字段选择;配套 CRIRunPodSandboxRequest增加runtime_handler字段(alpha)。注意 crictl 对 runtime handler 的支持要到 1.12.1; - PodShareProcessNamespace 晋升 beta:Pod 内所有容器共享进程命名空间;同时移除 kubelet
--docker-disable-shared-pid标志,改为逐 Pod 用ShareProcessNamespace选项; - CustomCFSQuotaPeriod(alpha):新增 kubelet 参数与配置项,把 CFS quota 周期从默认 100ms 调整为 1µs~1s 之间,改善 guaranteed/burstable QoS 工作负载的响应延迟;
- NodeLease(alpha):启用
NodeLease特性门后,kubelet 在kube-node-lease命名空间创建并周期性续期 Lease,租约时长默认 40s,通过kubelet.config.k8s.io/v1beta1.KubeletConfiguration的NodeLeaseDurationSeconds字段配置——节点心跳机制从更新 Node status 转向轻量 Lease; - kubelet serving 证书引导与轮转晋升 beta;
- 性能与可靠性:获得 CIDR 时立即执行一次 runtime 与 node status 更新以加快启动;CPU Manager 失败时回滚状态防止 CPU 泄漏、并在节点状态校验中维护 CPU 拓扑;
RunAsGroup(自 1.10 损坏)修复;kubelet 暴露/debug/flags/v端点,可curl -X PUT http://127.0.0.1:8080/debug/flags/v -d "3"动态调整 glog 级别; - Windows 节点:kubelet 不再在非 Linux 系统上同步 iptables、不再应用
nodefs.inodesFree硬驱逐;Windows 系统容器“Pod”支持 kubelet stats。
云厂商主线(Azure / OpenStack / vSphere / GCP / AWS)
- SIG-Azure:两个新 alpha 特性——Azure Availability Zones 支持、跨资源组资源(磁盘、Azure File 与节点,[Experimental]);Azure VMSS 与 Cluster-Autoscaler 集成达到 GA。Azure 节点带可用区时打标签
failure-domain.beta.kubernetes.io/zone=<region>-<zoneID>;AzureDisk StorageClass 新增zoned/zone/zones参数;非托管节点(on-prem)通过kubernetes.azure.com/managed=false与alpha.service-controller.kubernetes.io/exclude-balancer=true标签支持;User Assigned MSI 支持;负载均衡空闲连接超时可配置;跳过主 NIC 处于 Failed provisioningState 的节点;NodeShutdown taint 支持。 - SIG-OpenStack:内树 provider 修复负载均衡无 VIP 状态、服务器状态过滤、Cinder PVC 扩容、节点关停 taint 等;外部 provider(external provider)功能对齐并额外提供:防止分配已存在浮动 IP、Keystone 无 scope token 跳过同步、Manilla trustee 认证与自定义 CA、CSI spec v0.3.0(Cinder 与 Manilla)、Octavia 级联删除、Kubernetes 与 Keystone 项目同步等。
- SIG-vmware:内树 provider 用 vSphere Tags 支持初始 Zones、引入 vcsim 自动化测试、修复 1.10→1.11 升级失败 bug;外部云 provider 建立并与内树功能对齐(预期 1.13 成为首选部署模式);Cluster API 从 Terraform 迁移到直接使用 govmomi。
- SIG-GCP/GCE:master 节点 CPU 请求下调以适配单核机器;metadata agent 重大改进(访问扩展至所有 API 组、命令行参数取代 configmap、健康检查端点调整);GCE 部署默认改用 KubeDNS(
CLUSTER_DNS_CORE_DNS=false可回退 kube-dns),原因正是 CoreDNS 大集群内存占用高——当前仓库的 cluster/gce/config-default.sh 仍保留该开关(CLUSTER_DNS_CORE_DNS="${CLUSTER_DNS_CORE_DNS:-true}",注释说明设为 false 安装 kube-dns)。 - SIG-AWS:LoadBalancer 安全组 ICMP 规则与
spec.loadBalancerSourceRanges对齐;节点按local-hostname元数据报告Hostname地址类型;动态供给加密卷时校验加密密钥有效性;EBS 卷扩容提速。 - SIG-cloud-provider:这是该 SIG 的第一个发布周期,重点是建设云厂商支持流程(从各云收集 E2E 一致性测试结果、定义云厂商最低文档要求:kube-apiserver/kube-controller-manager/kube-scheduler/kubelet/cloud-controller-manager 示例清单、云特定控制器消费的 labels/annotations),并推进长期目标——把云 provider 代码移出 kubernetes/kubernetes 主仓库。
其他组件
- SIG-instrumentation:无特性工作,重点是 metrics-server 大规模重构与 bug 修复;etcdv3 客户端可用 Prometheus 监控。
- SIG-service-catalog:Originating Identity 与 Namespaced Brokers 达到 GA;Service Plan Defaults 处于 alpha;支持过滤暴露的服务;kubectl 与 svcat CLI 输出改进。
- SIG-ibmcloud:新 SIG,聚焦组织搭建与将云 provider 代码迁移到公共仓库的流程。
弃用与移除清单(Deprecations and removals)
1.12 的弃用/移除决定直接影响用户脚本与部署:
- kubeadm alpha 特性门
HighAvailability、SelfHosting、CertsInSecrets弃用,1.13 移除; - cloudstack 与 ovirt 云控制器弃用,未来版本移除;
- kubectl run 的所有 generator 弃用(仅保留 run-pod/v1):
kubectl run简化为只创建 Pod,其他资源改用kubectl create; kubectl logs移除--interactive标志;kubectl version (--client)移除-c简写;kubectl exec的--pod(-p)标志弃用(当前仍可选);kubectl的--use-openapi-print-columns弃用,改用--server-print;/watch前缀的 watch API 端点弃用:标准方式是 list 端点加?watch=true参数,client-go 自 v1.6.0 起即用参数方式;- HPA 使用 Heapster 指标弃用,未来版本禁用。
新特性与 API 变更速览(v1.12.0 精选)
除上文按 SIG 展开的内容外,v1.12.0 New Features 与 API Changes 中的关键条目:
KubeletPluginsWatcher晋升 beta;- kube-controller-manager(10257)与 cloud-controller-manager(10258)默认启用 HTTPS 安全端口(
--secure-port可配置),委托认证/授权配置方式与聚合 API server 相同;未配置时仅/healthz可访问; - SCTP 协议支持(alpha):Pod、Service、Endpoint、NetworkPolicy 在 TCP/UDP 之外新增 SCTP;
TokenRequest/TokenRequestProjection晋升 beta:需以--service-account-issuer、--service-account-signing-key-file、--service-account-api-audiences三个标志启动 API server;由 TokenRequest 产生的 ServiceAccount token 的 UserInfo Extra 中携带 Pod 名与 UID;kubectl create job命令(SIG-cli,插件机制配套);kubectl 插件机制功能实现对齐 git 插件设计,并新增 sample-cli-plugin 与 cli-runtime staging 仓库;MountPropagation特性晋升 GA,MountPropagation特性门弃用(1.13 移除);ProcMount加入 SecurityContext、AllowedProcMounts加入 PodSecurityPolicy,允许容器/proc路径不被 mask;PodReadinessGate默认开启;- Resource Quota ScopeSelectors 晋升 beta 并默认启用;quota 准入配置 API 晋升 v1beta1;
PodDisruptionBudget的DisruptedPods字段从必填改为可选;TypedLocalObjectReference的APIGroup字段改为可选;- status 子资源启用后,CRD 校验 schema 根层允许更多字段;
- kube-dns 运行的 dnsmasq 新增
--dns-loop-detect; - OpenAPI spec 与文档反映 delete 请求的 202 Accepted 响应路径(可能影响依赖错误路径的客户端);
DisruptionBudget/RBAC:admin 角色聚合 edit 与 view,edit 聚合 view;kubectl get apiservice显示目标服务及其可用状态;- kube-apiserver
--help输出按分节展示。
补丁版本脉络:v1.12.1 至 v1.12.10
v1.12.0 之后的补丁版本是理解“1.12 分支实际行为”的关键,变更日志中值得重点记住的条目:
v1.12.1:kubeadm 支持同一 YAML 文件混排 init/cluster 与 join 配置(打印警告);PD 驱逐检查不再作用于终止态 Pod;crictl 更新到 v1.12.0(补齐 runtime handler/Windows npipe 支持);启用 AttachVolumeLimit 特性;GCP 新增环境变量控制 kube-controller-manager/kube-scheduler CPU 请求;iSCSI 卷拆除 panic 修复;CSIDriver 允许缺失字段。
v1.12.3:CVE-2018-1002105——kube-apiserver upgrade 请求代理处理器的关键安全修复;CSI 卷限制开始出现在节点 capacity/allocatable 中;kubeadm alpha phase certs renew all --use-api=false panic 修复;Cluster Autoscaler 1.12.1;Azure 实例元数据加缓存;GCE/GKE 负载均衡健康检查默认间隔从 2s 改为 8s、unhealthyThreshold 为 3。
v1.12.4:ACTION REQUIRED——Node.Status.Volumes.Attached.DevicePath 对 CSI 卷弃用,未来版本不再设置。其他:无端点 Pod 连接 Service 时立即 ICMP 拒绝而非黑洞超时(iptables 路径与 LoadBalancer 双条记录);IPVS 模式下 UDP 连接支持 graceful termination;kube-apiserver healthz 新增可选查询参数,可禁用导致健康检查失败的 check;admin/edit/view 用户可见 controller revisions(kubectl rollout 需要);KubeSchedulerConfiguration 相关问题修复;vSphere MAC 地址过滤器修复(不再忽略 00:1c:14 与 00:05:69 前缀)。
v1.12.5:IPVS 模式支持 graceful termination(删除 Service 时);IPVS 会话亲和不再向 terminating Pod 发起新连接;kubelet --cgroup-root 场景下 Pod 被放入其他 Pod cgroup 的 bug 修复。
v1.12.6:API 请求体上限落地——CREATE/UPDATE/PATCH/DELETE 请求体超过 100MB 返回 413 "request entity too large"(用 apiserver 库构建的自定义 apiserver 同样受限,可通过 ServerRunOptions.MaxRequestBodyBytes 调整;pods/proxy 等代理类子资源不受限);JSON patch 超过 10,000 个操作返回 413;kube-proxy 增加 metrics-port 命令行标志;TaintNodesByCondition 准入插件在新特性门启用时默认启用(修复新节点 taint 竞态);watch 不再重复发送同一组事件;调度器增加 goroutine 将超过 1 分钟未重试的 unschedulable Pod 移回 active 队列;移除一组 reflector 指标(reflector_items_per_list、reflector_items_per_watch、reflector_last_resource_version、reflector_list_duration_seconds、reflector_lists_total、reflector_short_watches_total、reflector_watch_duration_seconds、reflector_watches_total)——日志说明这是向后不兼容的变更,因这些指标标签不稳定、本就无法建立可靠监控。
v1.12.7:kubelet 在资源压力下不再驱逐 system-node-critical 静态 Pod;device-plugin 资源缓存缺失时重发 Allocate gRPC 调用;恢复 kubectl 的 --username/--password 标志;debian-iptables 镜像升级 v11.0.1 修复安全漏洞;AWS NLB 安全组入站规则防止误删(确保 target group 打标);kubectl cp panic 修复;admission webhook 发送对象缺失 apiVersion/kind 修复;kubelet 大量唯一 configmap/secret 引用场景的 hang/timeout 修复;admission webhook 指标移除资源相关标签以降低内存;一批 reflector 指标移除(见上);keymutex 平台崩溃修复。
v1.12.8:0 端点的 Service 与 LoadBalancer 立即 ICMP 拒绝而非超时(kube-proxy 行为改变);IPVS 支持透明重启 kube-proxy;Windows SMB 挂载/卸载竞态修复;DaemonSet controller 节点移除后 5 分钟停止处理部分 DaemonSet 的 bug 修复;GCI 上 NPD 关闭 glog 文件写入;Azure 默认 maximumLoadBalancerRuleCount 提升到 250。
v1.12.9:CRD 变更时活跃的自定义资源 watch 能正确终止;apiserver 存储中“刚加的 finalizer 被紧随其后的 delete 请求忽略导致提前删除”的 bug 修复;client-go 与 kubectl 不再以 world-accessible 权限写缓存 discovery 文件(安全问题);Protobuf 库深层嵌套日志条目的 segfault 修复;etcd watch 收到缺数据 update/delete 事件导致 informer 卡死的修复;metrics-server addon 恢复通过 IP 连接节点;Cluster Autoscaler 1.12.5。
v1.12.10(分支末期):ip-masq-agent 升级 v2.3.0 修复漏洞(当前仓库中 cluster/addons/ip-masq-agent 的清单可对照查看 addon 结构);kubeadm JoinConfiguration taint 不生效的回归修复;flexvol 插件损坏挂载点导致 Pod 卡死的修复;修复 1.11→1.12 升级 apiserver 时因 Pod alpha 字段 procMount 默认值错误引发的工作负载控制器虚假 rollout;IPVS graceful termination 中 UDP real server 未删除的字符串比较 bug 修复;IPVS 对 UDP 流量禁用 graceful termination(DNS/syslog 等高 UDP 连接场景);Azure 负载均衡 resource group 注解为空字符串时应使用默认值。
外部依赖版本对照(External Dependencies)
v1.12.0 锁定的一批关键外部依赖版本,是复现该版本环境的基线:
| 组件 | v1.12.0 版本 | 备注 |
|---|---|---|
| etcd(默认服务端) | v3.2.24 | 客户端同步更新 3.2.24 |
| Go | 默认 1.10.4,最低支持 1.10.2 | rc.2 起从 1.10.3 提升 |
| CNI | v0.6.0 | 与 1.10 相同 |
| CSI spec | 0.3.0 | 与 1.11 相同 |
| CoreDNS | v1.2.2 | 由 1.11 的 v1.1.3 升级 |
| kube-dns | v1.14.13 | rc.2 起修复 SRV 记录压缩问题 |
| metrics-server | v0.3.1 | 抓取频率 30s |
| Cluster Autoscaler | 1.12.0(GA 于 1.12 分支) | 补丁版本后续升至 1.12.5 |
| Heapster | v1.6.0-beta | 1.11 为 v1.5.2;注意 HPA 已弃用其指标 |
| CAdvisor | v0.30.1 | 与 1.11 相同 |
| Kibana | v6.3.2 | Elasticsearch 6.3.2 |
| ip-masq-agent | v2.1.1 | 链路名改为 IP-MASQ;补丁期升至 v2.3.0 |
| crictl(GCE) | v1.11.1 | 1.12.1 起 v1.12.0 |
| Calico | v2.6.7 | 与 1.10 相同 |
| fluentd-gcp-scaler | v0.4.0 | 由 0.3.0 升级 |
| Addon-manager | v8.7 | 支持 --prune-whitelist |
| hcsshim | v0.11 | 与 1.11 相同 |
| gitRepo 卷 | 不再要求 git ≥ 1.8.5 | 兼容旧版 git |
另注意:v1.12 起 gitRepo 卷不再要求 git 1.8.5+;Rescheduler 维持 v1.11 的 v0.4.0 未变(随后被移除)。
在当前仓库中追溯这些变更的落点
当前仓库是较新的 master 分支(1.12 时代的目录结构已有演进),追溯源码时应以“功能”而非“1.12 原路径”为线索:
- 调度器插件化:pkg/scheduler/framework/plugins/interpodaffinity、pkg/scheduler/framework/plugins/imagelocality、pkg/scheduler/framework/plugins/defaultpreemption,对应 1.12 的亲和性能优化与调度器增强;
- Job TTL 控制器:pkg/controller/ttl/ttl_controller.go;
- DaemonSet 改由默认调度器调度后,DaemonSet 控制器逻辑在 pkg/controller/daemon;
- kube-proxy IPVS 实现(graceful termination、UDP 处理等补丁修复):pkg/proxy/ipvs;
- NodeLease 依赖的 coordination Lease API 类型:pkg/apis/coordination/v1;
- GCE 集群 CoreDNS/KubeDNS 开关:cluster/gce/config-default.sh 中的
CLUSTER_DNS_CORE_DNS; - 各版本 addon 清单(fluentd-gcp、metrics-server、ip-masq-agent、rbac 等):cluster/addons;
- 后续版本的变更可继续查阅 CHANGELOG 目录下按版本组织的其他 CHANGELOG-*.md 文件(如 1.11、1.13)。
结语:如何正确使用这份变更日志
- 升级前:逐条核对 Action Required 表(尤其是 kubeadm 配置迁移、
--storage-versions移除、CSI 驱动NodeGetInfo/registrar 检查、Priority 准入插件、critical 优先级类命名空间限制); - 升级中:以 v1.12.0 下载表核验产物 sha512/sha256;控制面镜像命名去掉架构后缀后检查拉取逻辑;
- 升级后:关注补丁版本引入的行为变化(100MB/413 限制、413 的 10000 次 patch 操作上限、0 端点服务 ICMP 拒绝、reflector 指标消失、
DevicePath弃用),并同步更新监控与告警规则; - 长期视角:1.12 是若干重要迁移的拐点——调度框架化、调度器统一接管 DaemonSet、NodeLease 心跳、卷快照 alpha、HPA v2beta2、kubeadm 配置 API 重构,这些主线在后续版本持续演进,可在 CHANGELOG 目录中沿版本序列追踪。
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 StartedRust0626
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