首页
/ Kubernetes 1.12 变更日志解读:调度器重构、RuntimeClass 与 HPA v2beta2 版本升级指南

Kubernetes 1.12 变更日志解读:调度器重构、RuntimeClass 与 HPA v2beta2 版本升级指南

2026-09-06 12:09:50作者:谭伦延

本篇基于仓库中的 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/frameworkpkg/proxy/ipvspkg/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 Binarieskubernetes-client-{darwin|linux|windows}-{386|amd64|arm|arm64|ppc64le|s390x}.tar.gz,仅含 kubectl、kubectl-convert 等客户端工具;
  • Server Binarieskubernetes-server-linux-{amd64|arm|arm64|ppc64le|s390x}.tar.gz,含 kube-apiserver、kube-controller-manager、kube-scheduler、kubectl 等控制面组件;
  • Node Binarieskubernetes-node-linux-*.tar.gzkubernetes-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 一节明确列出四个已知问题,升级前必须知晓:

  1. CoreDNS 默认化被撤回:Feature #566(CoreDNS 作为 kube-up 部署默认 DNS)因可伸缩性内存消耗问题被移出本版本。变更日志原文提醒:若计划在超过 2000 节点的集群使用 CoreDNS,需仔细考虑 CoreDNS Pod 的 memory 资源限制,并实测内存占用。
  2. kube-controller-manager 证书目录:未提供 --tls-cert-file/--tls-private-key-file 时,需要可写的 --cert-dir(默认 /var/run/kubernetes)来生成自签证书。
  3. RBAC 权限缺口system:kube-controller-manager ClusterRole 缺少对 configmap extension-apiserver-authenticationget 权限,用绑定该 ClusterRole 的 ServiceAccount 运行 kube-controller-manager 会报错。
  4. 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-pluginsPriority 准入插件默认启用 若用 --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 特性门 HighAvailabilitySelfHostingCertsInSecrets 弃用 新集群不可再使用,集群升级也不支持,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 插件体系下:interpodaffinityimagelocalitydefaultpreemption 等目录对应 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 拆分为独立组件:InitConfigurationClusterConfigurationJoinConfigurationKubeletConfigurationKubeProxyConfiguration,不同类型可用 --- 分节写在同一 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/proxyservices/proxypods/proxypods/execpods/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 字段选择;配套 CRI RunPodSandboxRequest 增加 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.KubeletConfigurationNodeLeaseDurationSeconds 字段配置——节点心跳机制从更新 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=falsealpha.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 特性门 HighAvailabilitySelfHostingCertsInSecrets 弃用,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;
  • PodDisruptionBudgetDisruptedPods 字段从必填改为可选;TypedLocalObjectReferenceAPIGroup 字段改为可选;
  • 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.3CVE-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:1400: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_listreflector_items_per_watchreflector_last_resource_versionreflector_list_duration_secondsreflector_lists_totalreflector_short_watches_totalreflector_watch_duration_secondsreflector_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.80 端点的 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 原路径”为线索:

结语:如何正确使用这份变更日志

  1. 升级前:逐条核对 Action Required 表(尤其是 kubeadm 配置迁移、--storage-versions 移除、CSI 驱动 NodeGetInfo/registrar 检查、Priority 准入插件、critical 优先级类命名空间限制);
  2. 升级中:以 v1.12.0 下载表核验产物 sha512/sha256;控制面镜像命名去掉架构后缀后检查拉取逻辑;
  3. 升级后:关注补丁版本引入的行为变化(100MB/413 限制、413 的 10000 次 patch 操作上限、0 端点服务 ICMP 拒绝、reflector 指标消失、DevicePath 弃用),并同步更新监控与告警规则;
  4. 长期视角:1.12 是若干重要迁移的拐点——调度框架化、调度器统一接管 DaemonSet、NodeLease 心跳、卷快照 alpha、HPA v2beta2、kubeadm 配置 API 重构,这些主线在后续版本持续演进,可在 CHANGELOG 目录中沿版本序列追踪。
登录后查看全文
热门项目推荐
相关项目推荐