Kubernetes v1.14 版本演进全解:GA 特性、升级注意事项与指标命名规范化
本文基于 Kubernetes 官方发布记录文档 CHANGELOG-1.14.md,完整梳理 v1.14.0 至 v1.14.10 这一整个补丁周期内的发布内容:包括 Windows 节点支持 Stable、Pod 优先级与抢占 GA、Durable Local Storage 等 1.14 新增特性,升级前必读的 Breaking Changes、API 弃用与指标改名清单,以及各补丁版本的关键安全修复。读完后你可以掌握 v1.14 的完整能力面、升级前必须执行的检查项,并知道如何用当前仓库源码验证其中关键机制的实现。
文档定位与版本覆盖范围
CHANGELOG-1.14.md 是 Kubernetes 1.14 小版本系列的完整发布记录,在 CHANGELOG/README.md 的版本索引中占据 1.13 与 1.15 之间的位置。文档按“从高到低”的时间倒序组织,覆盖以下 15 个发布节点:
| 版本类型 | 版本 |
|---|---|
| 补丁版(安全/缺陷修复) | v1.14.10、v1.14.9、v1.14.8、v1.14.7、v1.14.6、v1.14.5、v1.14.4、v1.14.3、v1.14.2、v1.14.1 |
| 正式发布 | v1.14.0 |
| 候选/预览版 | v1.14.0-rc.1、v1.14.0-beta.2、v1.14.0-beta.1、v1.14.0-alpha.3、v1.14.0-alpha.2、v1.14.0-alpha.1 |
每个发布节点包含固定结构:
- Downloads:
kubernetes.tar.gz(含全部二进制)、kubernetes-src.tar.gz(源码)及按平台拆分的三类包——Client Binaries(客户端,含 kubectl,覆盖 darwin/linux/windows 与 386/amd64/arm/arm64/ppc64le/s390x 架构)、Server Binaries(服务端组件,仅 Linux)、Node Binaries(kubelet/kubeproxy 等节点组件,含 Windows amd64),每个文件附 sha512 校验和,用于下载后校验产物完整性; - Changelog:与该上一版本的差异,分为
Action Required(必须处理的变更)与Other notable changes(其他值得注意的变更); - v1.14.0 独有章节:完整的 What's New、Known Issues、Urgent Upgrade Notes、Deprecations、Metrics 变更、Notable Features、API Changes、Detailed Bug Fixes、External Dependencies。
1.14 What's New:本版本核心能力
v1.14 的发布说明(“1.14 What's New”章节)列出了七个方向的能力变化,这些是理解整个版本的主线:
- Windows 节点支持毕业至 Stable(KEP #116):正式支持 Windows Server 2019 作为 worker 节点运行 Windows 容器,支持 Azure-CNI、OVN-Kubernetes、Flannel 等树外(out-of-tree)网络方案,Pod、Service 类型、工作负载控制器与指标/配额的 Windows 侧支持显著增强。后续补丁版本中大量修复都围绕此主题,例如 v1.14.9 修复“非英文 Windows 宿主机上 kubelet 指标采集失败”、v1.14.10 确保 Azure 上 Local 流量策略 UDP 服务创建健康探针。
- kubectl 插件机制毕业至 Stable(KEP #579):第三方插件可以以新命令形式扩展 kubectl,甚至可以覆盖任意深度的子命令。配套修复可见于各补丁版本,如
kubectl plugin list在 PATH 存在缺失目录时不再视为错误。 - Durable Local Storage 正式 GA(KEP #121):本地直连(非网络)存储可作为 PersistentVolume 卷源提供,用户可借助其更低成本与更高性能。对应 feature gate
PersistentLocalVolumes在 1.14 后不可再禁用。 - Pid Limiting 毕业至 Beta(KEP #757):防止单个 Pod 耗尽 PID 资源,实现 Pod 间、Pod 与节点间的 PID 隔离。kubelet 的
--system-reserved与--kube-reserved从此接受pid=<number>形式,且需要开启SupportNodePidsLimit=truefeature gate;PidPressure驱逐也按优先级从低到高驱逐。 - Pod Priority and Preemption GA(KEP #564):调度器可为高优先级 Pod 先行调度,资源不足时驱逐低优先级 Pod 腾出空间。
PriorityClassAPI 提升到scheduling.k8s.io/v1,v1beta1/v1alpha1弃用并将在 v1.17 停止提供。 - Pod Ready++ GA(KEP #580):为 Pod 就绪状态引入外部反馈扩展点(PodReadinessGates),feature gate 在 beta.2 阶段即已强制启用、不可关闭。
- kubeadm 增强:
- HA 集群新增控制面节点时可自动复制证书:
kubeadm init --experimental-upload-certs与kubeadm join --experimental-control-plane --certificate-key; kubeadm join工作流暴露为 phases,可用kubeadm join phase子命令分步/选择性执行(对齐 1.13 中kubeadm init phase的做法);- 相应地,
kubeadm alpha preflight与kubeadm alpha preflight node被移除,改用kubeadm join phase preflight; - kubeadm 会尝试按常见 domain socket 探测已安装的 CRI,若 Docker 未使用且只装了一个 CRI,命令行可省略
--cri-socket。
- HA 集群新增控制面节点时可自动复制证书:
升级前必读(Urgent Upgrade Notes)
原章节标题直言 “No, really, you MUST read this before you upgrade”。以下变更按组件分类,均出自该章节:
kube-apiserver
- 默认 RBAC 策略不再向未认证(unauthenticated)用户授予 discovery 与权限检查 API(
kubectl auth can-i所用)的访问权。存量集群升级后保留旧行为;新集群如需放行,必须显式创建绑定:kubectl create clusterrolebinding anonymous-discovery --clusterrole=system:discovery --group=system:unauthenticated kubectl create clusterrolebinding anonymous-access-review --clusterrole=system:basic-user --group=system:unauthenticated - 已弃用的
--storage-versions标志被移除,存储版本固定为二进制内置默认值; - 已弃用的
--repair-malformed-updates标志被移除; - 自 1.7 弃用的
/swaggerapi/*schema 文档被移除,统一使用/openapi/v2;自 v1.10 弃用的/swagger.json与/swagger-2.0.0.pb-v1同样移除; - kube-apiserver 现在只从聚合 API server 的
/openapi/v2端点聚合 OpenAPI schema,移除了回退到/swagger.json的路径——自建聚合 API server 必须经/openapi/v2(v1.10 起可用)提供 schema; - 前缀为
io.k8s.kubernetes.pkg的 OpenAPI 定义(自 1.9 弃用)被移除; ValidateProxyRedirects提升为 Beta 并默认开启:API server 的跳转跟随被限制为同主机(same-host)跳转。如果节点上 kubelet 的 CRI 流式接口监听在与 apiserver 请求目标不同的 host 接口上(不使用内置 dockershim 且设置了 kubelet 的--redirect-container-streaming=true时才会出现),相关请求会失败。官方建议的做法是在 kubelet 上设置--redirect-container-streaming=false;问题修复前可临时禁用该 feature gate。
kubectl
kubectl get已弃用的--show-all标志被移除。
kubelet
- 已弃用的
--experimental-fail-swap-on标志被移除; - HTTPGet 探针不再跟随跨主机跳转:liveness/readiness 的 HTTPGet 遇到跳转到其他 hostname 时按文档行为视为 Success,并生成 reason 为
ProbeWarning的事件。此前若依赖跳转去检查别的端点,需把检查逻辑移出 Kubelet(例如用代理转发而不是重定向)。
client-go
- 已弃用的无版本 API group 访问器(如
clientset.Apps())被移除,必须显式带版本(如clientset.AppsV1()); - 磁盘缓存 discovery 客户端从
k8s.io/client-go/discovery迁移至k8s.io/client-go/discovery/cached/disk;内存缓存客户端从k8s.io/client-go/discovery/cached迁移至k8s.io/client-go/discovery/cached/memory。
kubeadm
- 移除
kubeadm alpha preflight与kubeadm alpha preflight node,使用kubeadm join phase preflight替代。
Node 与监控
- 已弃用的污点
node.alpha.kubernetes.io/notReady与node.alpha.kubernetes.io/unreachable不再被支持或自动调整,应替换为node.kubernetes.io/not-ready与node.kubernetes.io/unreachable; - Prometheus 查询迁移:所有匹配
pod_name、container_name标签的查询(cadvisor 或 kubelet probe 指标)应改用pod、container标签。过渡期内旧标签与pod/container并存,之后会被移除。
另外,alpha.2 阶段还移除了整个 Initializers alpha 特性:admissionregistration.k8s.io/v1alpha1 API 版本、Initializers 准入插件以及 metadata.initializers 字段用法全部移除,升级前需删除存量 InitializerConfiguration 对象。正在运行 cloud-controller-manager 且启用了 pvlabel.kubernetes.io Initializer 的用户,必须改用 PersistentVolumeLabel 准入控制器——即在 kube-apiserver 的 --enable-admission-plugins 中加入 PersistentVolumeLabel。
Deprecations:弃用清单
kubectl
kubectl convert弃用,v1.17 移除;kubectl get的--export标志弃用,v1.18 移除。
kubelet
- OS/Arch 信息改写到 Node 对象的
kubernetes.io/os与kubernetes.io/arch标签上;旧标签beta.kubernetes.io/os、beta.kubernetes.io/arch仍会写入但已弃用,计划 v1.18 移除; --containerized标志弃用。
hyperkube
--make-symlinks标志弃用。
API 迁移路线图(1.14 给出的明确时间表)
| 资源 | 现状/动作 | 目标 API |
|---|---|---|
| Ingress | 现可通过 networking.k8s.io/v1beta1 获取;extensions/v1beta1 弃用,v1.18 不再提供 |
networking.k8s.io/v1beta1 |
| NetworkPolicy | extensions/v1beta1 自 v1.16 起不再提供 |
networking.k8s.io/v1(v1.8 起可用) |
| PodSecurityPolicy | extensions/v1beta1 自 v1.16 起不再提供 |
policy/v1beta1(v1.10 起可用) |
| DaemonSet / Deployment / ReplicaSet | extensions/v1beta1、apps/v1beta1、apps/v1beta2 自 v1.16 起不再提供 |
apps/v1(v1.9 起可用) |
| PriorityClass | 提升到 scheduling.k8s.io/v1(无变更);v1beta1/v1alpha1 弃用,v1.17 停止提供 |
scheduling.k8s.io/v1 |
List API 调用的 export 查询参数弃用,v1.18 移除。DenyEscalatingExec 与 DenyExecOnPrivileged 准入插件弃用(v1.18 移除),建议改用 PodSecurityPolicy 或自定义准入插件。
已 GA、feature gate 随之弃用(v1.15 移除 gate)的特性:CustomPodDNS、HugePages、MountPropagation、PersistentLocalVolumes。
CoreDNS 配置弃用:kubernetes 插件的 upstream 选项(v1.15 成为默认行为);proxy 插件由 forward 插件替代——1.14 默认 CoreDNS 配置已改用 forward 插件。
Removed and deprecated metrics:指标体系规范化
1.14 是一次系统性的 Prometheus 指标命名规范化(对齐 OpenMetrics 约定:直方图用 _seconds、计数器用 _total),涉及组件包括 apiserver、scheduler、kubelet、kube-proxy、docker、workqueue 等。
被移除的指标(reflector 系列,因标签不稳定、无法建立可靠监控而直接移除):
reflector_items_per_listreflector_items_per_watchreflector_last_resource_versionreflector_list_duration_secondsreflector_lists_totalreflector_short_watches_totalreflector_watch_duration_secondsreflector_watches_total
被弃用并改名(旧 → 新)的主要映射:
- 通用模式:
*_latency_seconds→*_duration_seconds、微秒单位 → 秒单位、计数器加_total后缀; - client-go / apiserver:
rest_client_request_latency_seconds→rest_client_request_duration_seconds;apiserver_request_count→apiserver_request_total;apiserver_request_latencies(_summary)→apiserver_request_latency_seconds;apiserver_dropped_requests→apiserver_dropped_requests_total;apiserver_proxy_tunnel_sync_latency_secs→apiserver_proxy_tunnel_sync_duration_seconds; - etcd 辅助层:
etcd_helper_cache_hit/miss/entry_count→ 对应_total;etcd_request_*_latencies_summary→ 对应_latency_seconds;transformation_latencies_microseconds→transformation_latencies_seconds;data_key_generation_latencies_microseconds→data_key_generation_latencies_seconds; - scheduler:
scheduler_scheduling_latency_seconds→scheduler_scheduling_duration_seconds;e2e_scheduling_latency_microseconds→e2e_scheduling_latency_seconds;scheduling_algorithm_*三个 micro 指标 →_seconds;binding_latency_microseconds→binding_latency_seconds; - kubelet:
kubelet_pod_worker/start_latency_microseconds→ 对应_duration_seconds;kubelet_cgroup_manager_latency_microseconds→kubelet_cgroup_manager_duration_seconds;kubelet_pleg_relist_latency_microseconds→kubelet_pleg_relist_duration_seconds;kubelet_pleg_relist_interval_microseconds→kubelet_pleg_relist_interval_seconds;kubelet_eviction_stats_age_microseconds→kubelet_eviction_stats_age_seconds;kubelet_runtime_operations→kubelet_runtime_operations_total;kubelet_runtime_operations_latency_microseconds→kubelet_runtime_operations_duration_seconds;kubelet_runtime_operations_errors→kubelet_runtime_operations_errors_total;kubelet_device_plugin_registration_count→kubelet_device_plugin_registration_total;kubelet_device_plugin_alloc_latency_microseconds→kubelet_device_plugin_alloc_duration_seconds; - dockershim / 网络插件:
docker_operations→docker_operations_total;docker_operations_latency_microseconds→docker_operations_latency_seconds;docker_operations_errors→docker_operations_errors_total;docker_operations_timeout→docker_operations_timeout_total;network_plugin_operations_latency_microseconds→network_plugin_operations_latency_seconds; - kube-proxy:
sync_proxy_rules_latency_microseconds→sync_proxy_rules_latency_seconds; - workqueue(由
{WorkQueueName}_*前缀式改为统一名称加标签):{WorkQueueName}_depth→workqueue_depth;{WorkQueueName}_adds→workqueue_adds_total;{WorkQueueName}_queue_latency→workqueue_queue_latency_seconds;{WorkQueueName}_work_duration→workqueue_work_duration_seconds;{WorkQueueName}_unfinished_work_seconds→workqueue_unfinished_work_seconds;{WorkQueueName}_longest_running_processor_microseconds→workqueue_longest_running_processor_seconds;{WorkQueueName}_retries→workqueue_retries_total。
对运维的实际含义:所有基于旧指标名/旧标签(pod_name、container_name)的 Prometheus 查询、Grafana 面板与告警规则需要在升级窗口内或紧随其后完成替换。
Notable Features 与 API Changes 精选
从 beta/alpha 各阶段的 Other notable changes 汇总,以下特性对日常开发与使用影响最直接:
- RuntimeClass 提升为 Beta 并默认启用:CRI 的
PodSandbox与PodSandboxStatus新增runtime_handler字段以记录 Pod 的 RuntimeClass 信息;kubectl get runtimeclass输出新增RUNTIME-HANDLER列。注意 beta.2 阶段的 Action Required:node.k8s.ioAPI group 与runtimeclasses.node.k8s.io资源迁移进内置 API,升级后必须重建所有 RuntimeClass 并手动删除旧的runtimeclasses.node.k8s.ioCRD,且 RuntimeClass 不允许缺少handler字段(由 alpha 的runtimeHandler改名而来)。 - CSINodeInfo / CSIDriver 从 alpha CRD 转为 in-tree 的
storage.k8s.io/v1beta1API:CSINode与CSIDriver作为一等资源安装到本地集群;alpha CRD 不再使用,存储驱动需更新为 beta API;CSI 驱动名中的_不再被支持(CSI Spec 不允许);CSIBlockVolume提升为 beta 并默认启用;CSIPersistentVolume与KubeletPluginWatchergate 不可再禁用(v1.16 移除);引入 CSI 迁移的动态卷 provisioning shim;支持节点侧 CSI 卷扩容;新增 Pod spec 内嵌 CSI inline 卷(ephemeral)的 alpha 支持。 - Kustomize 内建进 kubectl:新增
kubectl kustomize子命令,等价于kustomize build <dir>,可管道给 apply/delete:
同时kubectl kustomize <somedir> | kubectl apply -f - kubectl kustomize <somedir> | kubectl delete -f -kubectl apply/get/delete的示例更新为支持使用含kustomization.yaml的目录(-k用法)。 - kubectl 体验增强:
kubectl autoscale支持自定义资源;kubectl wait支持更多选择器并支持--all标志;kubectl logs可组合-f与-l;kubectl cp支持通配符拷贝;custom-columns支持 Go 模板切片表达式,如:kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[0:3].name kubectl get pod test-pod -o custom-columns=CONTAINER:.spec.containers[-2:].name-A成为--all-namespaces的快捷方式;kubectl auth can-i --list可列出特定命名空间内允许的操作;discovery 调用路径优化后 kubectl 整体提速 10 倍以上。 - kube-apiserver 行为变化:请求体超过 100MB 的 CREATE/UPDATE/PATCH/DELETE 返回 413
request entity too large(自建 apiserver 可通过ServerRunOptions.MaxRequestBodyBytes调整;pods/proxy等代理子资源不受限);json patch 操作数超过 10,000 也返回 413;ResourceVersion成为 delete 的前置条件;discovery 文档新增 alpha 字段storageVersionHash(客户端必须按不透明值处理,仅可等值比较);新增dry_run指标标签(apiserver_request_total、apiserver_request_duration_seconds)与实验性APPLYverb 值;admission webhook 超时可通过配置字段缩短(1–30 秒,缺省 30 秒);admission webhook 规则新增scope: "Cluster" | "Namespaced" | "*"字段限定资源作用域;外部 KMS 集成支持配置调用超时;etcd 压缩改为每 5 分钟默认间隔执行一次,而非每个资源/CRD 各一次。 - 节点侧(kubelet/Node):新增
TaintNodesByCondition准入插件,在新建 Node 对象时即打上 not-ready 污点,修复 Pod 可能先于污点就绪被调度到新节点的竞态;RunAsGroup提升为 beta 并默认启用(PodSpec 与 PodSecurityPolicy 可控制容器主 GID);system-critical优先级 Pod 的容器设置更低的oom_score_adj;不再 watch 已终止 Pod 的 ConfigMap/Secret(此前极端情况下会占满与 apiserver 的连接);PLEG 通道满时丢弃事件并计数;Node OS/arch 标签(kubernetes.io/os、kubernetes.io/arch)GA;CRI Pod 日志目录由/var/log/pods/UID改为/var/log/pods/NAMESPACE_NAME_UID(升级建议先 drain 节点或升级后重启);NodeLease 提升为 Beta 并默认启用。 - 调度器(Scheduling):调度队列公平性改进——最近被尝试过的 Pod 会排在同优先级其他 Pod 之后;不可调度 Pod 的重新激活更稳健(节点属性变化时才唤醒、超过 1 分钟未重试时由 goroutine 移回 active 队列);优化大集群中抢占逻辑效率;修复大量不可调度 Pod 时的调度饥饿问题;按集群大小动态决定每个调度周期打分节点比例;scheduling framework 新增
reserve与prebind扩展点。 - 网络(kube-proxy/kube-proxy IPVS):
ExternalTrafficPolicy: Local在 IPVS 模式下配合使用 loadBalancerIP 的 LoadBalancer Service 生效;IPVS 模式支持优雅终止(含 UDP 连接);sessionAffinity 服务停止向 terminating Pod 发起新连接;Pod 连向 0 endpoints 的 Service 会立即 ICMP reject 而非黑洞超时;新增metrics-port标志。 - 存储(Storage):CSI 版本更新至 1.1.0;使用
fsGroup时确保卷上目录 group 可执行;按allowedTopologies提供的 zone 信息执行动态供给(vSphere StorageClass 示例见发布记录);iSCSI 失败 target 扫描修复;Cinder 支持节点侧配置卷数上限与 max attach limit。 - 其他:GCE 上启用 etcd 与 kube-apiserver 间 mTLS 加密;CoreDNS 升级至 1.3.1(新增
k8s_external插件、zone transfer 校验、负响应 TTL),并增加 readinessProbe;dashboard 升级 v1.10.1 且不再默认跳过登录;LeaseAPI 类型提升到coordination.k8s.io/v1;kubeadm 默认创建权限为 0700 的/var/lib/etcd。
API Changes 章节单列了一条:CRI 新增 runtime_handler 字段于 PodSandbox 与 PodSandboxStatus(与上文 RuntimeClass 条目同源)。
补丁版本时间线(v1.14.1 – v1.14.10)
补丁版本承载了安全修复与关键回归修复,运维选型时应以最高补丁版本为准。按时间从旧到新摘取各版本要点:
- v1.14.1:kube-proxy 不再自动清理其他模式(如 iptables↔IPVS 切换)残留规则——切换模式需先执行
kube-proxy --cleanup或重启 worker 节点(推荐后者),此变更修复了重启 iptables proxier 导致连接失败的 bug;kubeadm 修复 v1.12 建集群从 1.13 升到 1.14 时的升级报错(最终升级前需升级 etcd);修复聚合 API server 的 watch 请求挂起回归;IPVS 支持透明重启。 - v1.14.2:新增
ipvs-strict-arp标志(默认 false)以配置更严格的 ARP sysctl——1.13.0 曾默认启用并影响部分 CNI 插件,此版本恢复旧默认;DaemonSetController 修复节点移除后 5 分钟不处理部分 DaemonSet 的 bug;etcd watch 收到缺数据 update/delete 事件导致 informer 卡死的问题修复;新增storage_operation_status_count指标。 - v1.14.3:kubelet 在
pods目录(默认/var/lib/kubelet/pods)软链到其他磁盘设备时删除孤儿 Pod 目录失败的修复;修复 finalizer 刚加入后紧随的 delete 被忽略导致提前删除的 apiserver 存储 bug;修复 dry-run 对pod/eviction子资源不生效的问题。 - v1.14.4:kubelet 在
restartPolicy: Never时不重试 Pod sandbox 创建的修复;ip-masq-agent 升级 v2.3.0 修复漏洞;doSafeMakeDir可能的 fd 泄漏修复。 - v1.14.5(安全版本):修复 CVE-2019-11249(对 CVE-2019-1002101 与 CVE-2019-11246 的修复不完整,
kubectl cp潜在目录穿越)与 CVE-2019-11247(API server 允许通过错误 scope 访问自定义资源)。 - v1.14.6:多次 Go 工具链安全更新(1.12.6 → 1.12.9);golang.org/x/net 更新以修复 CVE-2019-9512 与 CVE-2019-9514;Windows 节点 summary API 开始上报
cpuUsageNanoCores;metadata.selfLink字段正式标记弃用(v1.20 起不再返回、v1.21 移除);kubelet 节点租约续约间隔改为基于node-status-update-frequency的启发式取值;CSI 插件超时从 15s 调整为 2min。 - v1.14.7:
kubectl cp允许安全解包指向目标目录外的符号链接;cronjob 在 job 数超过 500 时可正常调度;修复 apiserver 合法 update 请求因 precondition 检查失败被拒绝的 bug;IPVS proxier 修复 Service 删除后 virtual server 不清理的 bug。 - v1.14.8(安全版本):修复 CVE-2019-11253——json/yaml 解码缺陷可被大型或畸形文档耗尽服务器资源,普通 API 请求(常规资源的 create/delete/update/patch)请求体因此限制为 3MB;另含 AWS ELB 实例注册失败修复(该问题在 v1.14.7 有 Known Issue 记录,修复随 v1.14.8 发布)、apiserver 请求超时时的 goroutine 泄漏修复、Go 升级 1.12.10。
- v1.14.9:修复接受 >1MB patch 请求的回归(与 v1.14.8 的 3MB 限制协同收敛);websocket watcher 编码错误导致的 goroutine 泄漏修复;新增
apiserver_request_error_total指标(按 verb/group/version/resource/subresource/scope/component/code 统计 request_errors);informer 在丢 watch 重新 list 时可能漏掉刚删除对象立刻重建的Added事件的修复;CSI detach 超时从 10s 提到 2min。 - v1.14.10(最终补丁):Azure 云提供商修复集中——按 VM 维度的磁盘 attach/detach 锁逻辑允许不同节点并发更新、VMSS 脏缓存修复、attach/delete 竞态修复、LB DNS 标签更新修复、Local 流量策略 UDP 服务健康探针创建修复。
External Dependencies:外部依赖版本基线
v1.14.0 记录的外部依赖版本是判断运行时兼容性的依据:
- etcd server/client 默认版本:v3.3.10;
- Go 默认版本:1.12.1(构建链后续在补丁中逐步升至 1.12.12);
- CNI:v0.7.5;CSI:v1.1.0;
- 经过验证的 Docker 版本列表变更:移除 1.11.1 与 1.12.1,保留 1.13.1、17.03、17.06、17.09、18.06、18.09;
- CoreDNS:v1.3.1;CAdvisor:v0.33.1;Cluster Autoscaler:v1.14.0;dashboard:v1.10.1;
- 其余不变项:kube-dns v1.14.13、Calico v3.3.1、metrics-server v0.3.1、GLBC/Ingress-gce v1.2.3、ip-masq-agent v2.1.1(v1.14.4 升至 v2.3.0)、oidc 为 coreos/go-oidc v2。
Known Issues
v1.14.0 发布说明中记录了两个已知问题,升级评估时需知晓:
- CoreDNS 1.3.1 存在已知缺陷:Kubernetes API 在 CoreDNS 连接期间关闭会导致 CoreDNS 崩溃,已在 CoreDNS 1.4.0 中修复;
- 当已挂载的 flexvolume PVC 包含大量目录或已写满时,kubelet 可能重启失败。
结合当前仓库源码验证关键机制
本仓库为当前主干(远高于 1.14),但其中多处实现正是 1.14 发布记录所述机制的延续,可作为佐证交叉核对:
- kube-proxy 切换模式前清理旧规则:v1.14.1 起不再自动跨模式清理,要求显式
kube-proxy --cleanup。当前仓库中该能力保留在 cmd/kube-proxy/app/options.go——CleanupAndExit字段声明("when true, makes the proxy server clean up iptables and ipvs rules, then exit"),并在 cmd/kube-proxy/app/options.go 注册为--cleanup标志;实际清理逻辑在 cmd/kube-proxy/app/server_linux.go 的platformCleanup中,会按当前模式分别调用iptables.CleanupLeftovers、ipvs.CleanupLeftovers或nftables.CleanupLeftovers移除可安全删除的陈旧规则。 - 指标规范化:1.14 弃用清单中的旧名(如
kubelet_pod_worker_latency_microseconds、{WorkQueueName}_depth)在主干代码中已被新名取代,可在 pkg/kubelet 与 staging/src/k8s.io/component-base 的 metrics 注册文件中检索到kubelet_pod_worker_duration_seconds、workqueue_depth等符合 OpenMetrics 约定的名称,与发布记录方向一致。 - 发布记录自身的可追溯性:CHANGELOG 中每条变更均附 PR 编号与作者署名(如
--cleanup相关变更、指标改名等),配合 CHANGELOG/README.md 的版本索引,可以沿“文档 → PR → 代码”的链路核对任意一条 1.14 变更的实现细节。
升级与回滚操作建议(基于发布记录)
结合上述内容,从 1.13(或更早)升级到 1.14.x 的核对清单:
- 选择 v1.14.10(该系列最后一个补丁,含全部安全修复);
- 检查 Prometheus 查询与告警:替换
pod_name/container_name标签为pod/container,按上表替换全部弃用指标名; - 使用 Ingress/NetworkPolicy/PodSecurityPolicy/工作负载的清单迁移到目标 API group;
- 若依赖匿名 discovery /
auth can-i,显式创建对应 ClusterRoleBinding; - 若使用 RuntimeClass,重建资源并删除旧 CRD;若依赖 Initializers,迁移到
PersistentVolumeLabel准入控制器; - 若 kubelet 以
--redirect-container-streaming=true运行,评估ValidateProxyRedirects的影响,建议改为--redirect-container-streaming=false; - 若切换 kube-proxy 模式,先执行
kube-proxy --cleanup或重启节点; - 升级 etcd(v1.13 → v1.14 的最终阶段必须升级 etcd,kubeadm 升级流程有对应检查)。
小结
CHANGELOG-1.14.md 记录的 v1.14 系列是 Kubernetes 演进中“规范收敛”意味很强的一版:能力面上 Windows 节点、Pod 优先级与抢占、Durable Local Storage、kubectl 插件四项毕业,kubeadm HA 证书流转与 join phases 大幅降低运维成本;约束面上则通过移除 --storage-versions、swagger 端点、Initializers 与旧标签/旧指标名,把 API 与可观测性收敛到 OpenAPI v2 与 Prometheus 命名规范上。补丁线从 v1.14.1 到 v1.14.10 的修复轨迹(3MB 请求体限制、kubectl cp 目录穿越修复、informer/watch 回归修复)则展示了该版本在发布后如何通过安全版本持续加固。对仍在使用 1.14 或需要理解其后版本行为的读者,这份文档是逐项核对行为差异的第一手依据。
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 StartedRust0623
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