首页
/ Kubernetes v1.14 版本演进全解:GA 特性、升级注意事项与指标命名规范化

Kubernetes v1.14 版本演进全解:GA 特性、升级注意事项与指标命名规范化

2026-09-05 20:02:54作者:宣聪麟

本文基于 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

每个发布节点包含固定结构:

  1. Downloadskubernetes.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 校验和,用于下载后校验产物完整性;
  2. Changelog:与该上一版本的差异,分为 Action Required(必须处理的变更)与 Other notable changes(其他值得注意的变更);
  3. 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=true feature gate;PidPressure 驱逐也按优先级从低到高驱逐。
  • Pod Priority and Preemption GA(KEP #564):调度器可为高优先级 Pod 先行调度,资源不足时驱逐低优先级 Pod 腾出空间。PriorityClass API 提升到 scheduling.k8s.io/v1v1beta1/v1alpha1 弃用并将在 v1.17 停止提供。
  • Pod Ready++ GA(KEP #580):为 Pod 就绪状态引入外部反馈扩展点(PodReadinessGates),feature gate 在 beta.2 阶段即已强制启用、不可关闭。
  • kubeadm 增强
    • HA 集群新增控制面节点时可自动复制证书:kubeadm init --experimental-upload-certskubeadm join --experimental-control-plane --certificate-key
    • kubeadm join 工作流暴露为 phases,可用 kubeadm join phase 子命令分步/选择性执行(对齐 1.13 中 kubeadm init phase 的做法);
    • 相应地,kubeadm alpha preflightkubeadm alpha preflight node 被移除,改用 kubeadm join phase preflight
    • kubeadm 会尝试按常见 domain socket 探测已安装的 CRI,若 Docker 未使用且只装了一个 CRI,命令行可省略 --cri-socket

升级前必读(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 preflightkubeadm alpha preflight node,使用 kubeadm join phase preflight 替代。

Node 与监控

  • 已弃用的污点 node.alpha.kubernetes.io/notReadynode.alpha.kubernetes.io/unreachable 不再被支持或自动调整,应替换为 node.kubernetes.io/not-readynode.kubernetes.io/unreachable
  • Prometheus 查询迁移:所有匹配 pod_namecontainer_name 标签的查询(cadvisor 或 kubelet probe 指标)应改用 podcontainer 标签。过渡期内旧标签与 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/oskubernetes.io/arch 标签上;旧标签 beta.kubernetes.io/osbeta.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/v1beta1apps/v1beta1apps/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 移除。DenyEscalatingExecDenyExecOnPrivileged 准入插件弃用(v1.18 移除),建议改用 PodSecurityPolicy 或自定义准入插件。

已 GA、feature gate 随之弃用(v1.15 移除 gate)的特性CustomPodDNSHugePagesMountPropagationPersistentLocalVolumes

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_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

被弃用并改名(旧 → 新)的主要映射

  • 通用模式:*_latency_seconds*_duration_seconds、微秒单位 → 秒单位、计数器加 _total 后缀;
  • client-go / apiserver:rest_client_request_latency_secondsrest_client_request_duration_secondsapiserver_request_countapiserver_request_totalapiserver_request_latencies(_summary)apiserver_request_latency_secondsapiserver_dropped_requestsapiserver_dropped_requests_totalapiserver_proxy_tunnel_sync_latency_secsapiserver_proxy_tunnel_sync_duration_seconds
  • etcd 辅助层:etcd_helper_cache_hit/miss/entry_count → 对应 _totaletcd_request_*_latencies_summary → 对应 _latency_secondstransformation_latencies_microsecondstransformation_latencies_secondsdata_key_generation_latencies_microsecondsdata_key_generation_latencies_seconds
  • scheduler:scheduler_scheduling_latency_secondsscheduler_scheduling_duration_secondse2e_scheduling_latency_microsecondse2e_scheduling_latency_secondsscheduling_algorithm_* 三个 micro 指标 → _secondsbinding_latency_microsecondsbinding_latency_seconds
  • kubelet:kubelet_pod_worker/start_latency_microseconds → 对应 _duration_secondskubelet_cgroup_manager_latency_microsecondskubelet_cgroup_manager_duration_secondskubelet_pleg_relist_latency_microsecondskubelet_pleg_relist_duration_secondskubelet_pleg_relist_interval_microsecondskubelet_pleg_relist_interval_secondskubelet_eviction_stats_age_microsecondskubelet_eviction_stats_age_secondskubelet_runtime_operationskubelet_runtime_operations_totalkubelet_runtime_operations_latency_microsecondskubelet_runtime_operations_duration_secondskubelet_runtime_operations_errorskubelet_runtime_operations_errors_totalkubelet_device_plugin_registration_countkubelet_device_plugin_registration_totalkubelet_device_plugin_alloc_latency_microsecondskubelet_device_plugin_alloc_duration_seconds
  • dockershim / 网络插件:docker_operationsdocker_operations_totaldocker_operations_latency_microsecondsdocker_operations_latency_secondsdocker_operations_errorsdocker_operations_errors_totaldocker_operations_timeoutdocker_operations_timeout_totalnetwork_plugin_operations_latency_microsecondsnetwork_plugin_operations_latency_seconds
  • kube-proxy:sync_proxy_rules_latency_microsecondssync_proxy_rules_latency_seconds
  • workqueue(由 {WorkQueueName}_* 前缀式改为统一名称加标签):{WorkQueueName}_depthworkqueue_depth{WorkQueueName}_addsworkqueue_adds_total{WorkQueueName}_queue_latencyworkqueue_queue_latency_seconds{WorkQueueName}_work_durationworkqueue_work_duration_seconds{WorkQueueName}_unfinished_work_secondsworkqueue_unfinished_work_seconds{WorkQueueName}_longest_running_processor_microsecondsworkqueue_longest_running_processor_seconds{WorkQueueName}_retriesworkqueue_retries_total

对运维的实际含义:所有基于旧指标名/旧标签(pod_namecontainer_name)的 Prometheus 查询、Grafana 面板与告警规则需要在升级窗口内或紧随其后完成替换。

Notable Features 与 API Changes 精选

从 beta/alpha 各阶段的 Other notable changes 汇总,以下特性对日常开发与使用影响最直接:

  • RuntimeClass 提升为 Beta 并默认启用:CRI 的 PodSandboxPodSandboxStatus 新增 runtime_handler 字段以记录 Pod 的 RuntimeClass 信息;kubectl get runtimeclass 输出新增 RUNTIME-HANDLER 列。注意 beta.2 阶段的 Action Required:node.k8s.io API group 与 runtimeclasses.node.k8s.io 资源迁移进内置 API,升级后必须重建所有 RuntimeClass 并手动删除旧的 runtimeclasses.node.k8s.io CRD,且 RuntimeClass 不允许缺少 handler 字段(由 alpha 的 runtimeHandler 改名而来)。
  • CSINodeInfo / CSIDriver 从 alpha CRD 转为 in-tree 的 storage.k8s.io/v1beta1 APICSINodeCSIDriver 作为一等资源安装到本地集群;alpha CRD 不再使用,存储驱动需更新为 beta API;CSI 驱动名中的 _ 不再被支持(CSI Spec 不允许);CSIBlockVolume 提升为 beta 并默认启用;CSIPersistentVolumeKubeletPluginWatcher gate 不可再禁用(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-lkubectl 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_totalapiserver_request_duration_seconds)与实验性 APPLY verb 值;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/oskubernetes.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 新增 reserveprebind 扩展点。
  • 网络(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 且不再默认跳过登录;Lease API 类型提升到 coordination.k8s.io/v1;kubeadm 默认创建权限为 0700 的 /var/lib/etcd

API Changes 章节单列了一条:CRI 新增 runtime_handler 字段于 PodSandboxPodSandboxStatus(与上文 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-9512CVE-2019-9514;Windows 节点 summary API 开始上报 cpuUsageNanoCoresmetadata.selfLink 字段正式标记弃用(v1.20 起不再返回、v1.21 移除);kubelet 节点租约续约间隔改为基于 node-status-update-frequency 的启发式取值;CSI 插件超时从 15s 调整为 2min。
  • v1.14.7kubectl 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.goplatformCleanup 中,会按当前模式分别调用 iptables.CleanupLeftoversipvs.CleanupLeftoversnftables.CleanupLeftovers 移除可安全删除的陈旧规则。
  • 指标规范化:1.14 弃用清单中的旧名(如 kubelet_pod_worker_latency_microseconds{WorkQueueName}_depth)在主干代码中已被新名取代,可在 pkg/kubeletstaging/src/k8s.io/component-base 的 metrics 注册文件中检索到 kubelet_pod_worker_duration_secondsworkqueue_depth 等符合 OpenMetrics 约定的名称,与发布记录方向一致。
  • 发布记录自身的可追溯性:CHANGELOG 中每条变更均附 PR 编号与作者署名(如 --cleanup 相关变更、指标改名等),配合 CHANGELOG/README.md 的版本索引,可以沿“文档 → PR → 代码”的链路核对任意一条 1.14 变更的实现细节。

升级与回滚操作建议(基于发布记录)

结合上述内容,从 1.13(或更早)升级到 1.14.x 的核对清单:

  1. 选择 v1.14.10(该系列最后一个补丁,含全部安全修复);
  2. 检查 Prometheus 查询与告警:替换 pod_name/container_name 标签为 pod/container,按上表替换全部弃用指标名;
  3. 使用 Ingress/NetworkPolicy/PodSecurityPolicy/工作负载的清单迁移到目标 API group;
  4. 若依赖匿名 discovery / auth can-i,显式创建对应 ClusterRoleBinding;
  5. 若使用 RuntimeClass,重建资源并删除旧 CRD;若依赖 Initializers,迁移到 PersistentVolumeLabel 准入控制器;
  6. 若 kubelet 以 --redirect-container-streaming=true 运行,评估 ValidateProxyRedirects 的影响,建议改为 --redirect-container-streaming=false
  7. 若切换 kube-proxy 模式,先执行 kube-proxy --cleanup 或重启节点;
  8. 升级 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 或需要理解其后版本行为的读者,这份文档是逐项核对行为差异的第一手依据。

登录后查看全文
热门项目推荐
相关项目推荐