首页
/ Kubernetes v1.9 版本特性全景解读:Workloads API 正式化、动态准入控制与 CSI 存储生态(基于 CHANGELOG 源码仓库)

Kubernetes v1.9 版本特性全景解读:Workloads API 正式化、动态准入控制与 CSI 存储生态(基于 CHANGELOG 源码仓库)

2026-09-06 18:26:46作者:冯爽妲Honey

本文以仓库内 CHANGELOG/CHANGELOG-1.9.md 为唯一主线,完整梳理 Kubernetes v1.9 从 alpha 到正式发布、再历经 v1.9.1–v1.9.11 补丁维护的全过程。你将系统掌握 v1.9 的核心变化:apps/v1 Workloads API 达到 GA、动态准入 Webhook(含变更型)进入 beta、RBAC 聚合与 PodSecurityPolicy 增强、CSI 与本地持久卷等存储新能力,以及升级前必须处理的破坏性变更、弃用项、已知问题与外部依赖版本基线,可直接作为 1.9 时代的排障与升级参考手册使用。

Kubernetes v1.9 是 2017 年底发布的一个里程碑式版本。它在 1.8 奠定的“可扩展性”基础上,把用户最常用的工作负载 API 推向正式稳定,同时让外部准入控制(Admission Webhook)RBAC 权限聚合容器存储接口(CSI)IPVS 代理模式等一大批影响后续版本架构的特性完成“alpha→beta”的关键跨越。本文件从 v1.9.0-alpha.1 一路记录到 v1.9.11,是研究这段演进历史的一手资料;而当前仓库的源码树中仍能清晰看到这些能力多年后的延续形态,例如 staging/src/k8s.io/api/apps/v1/types.go 中至今保留的 StatefulSetDeploymentDaemonSetReplicaSet 四类 GA 类型。

一、版本总览与发布节奏

该变更日志按“主版本 + 补丁 + 预发布”三部分组织,共覆盖:

类别 版本 说明
正式版 v1.9.0 首发版本,包含完整 Release Notes
补丁版 v1.9.1 – v1.9.11 自首发后约一年内的安全与稳定性修复
Beta v1.9.0-beta.1 / beta.2 首发前的 beta 收敛阶段
Alpha v1.9.0-alpha.1 / alpha.2 / alpha.3 特性开发阶段的三个快照

每个版本条目都遵循固定模板:kubernetes.tar.gzkubernetes-src.tar.gz 两个源码包、按平台划分的 Client / Server / Node 三类二进制包及其哈希校验值、相对于上一版本(Changelog since ...)的变更清单。补丁版本还需额外说明 Action Required(强制动作)与 Other notable changes(其他重要修复)。

以 v1.9.11 为例,其下载矩阵包括:

  • Client Binarieskubernetes-client-{darwin,linux,windows}-{386,amd64,arm,arm64,ppc64le,s390x} 交叉编译产物;
  • Server Binarieskubernetes-server-linux-{amd64,arm,arm64,ppc64le,s390x}
  • Node Binarieskubernetes-node-linux-{amd64,arm,arm64,ppc64le,s390x}kubernetes-node-windows-amd64

哈希列给出的是 sha512(v1.9.0 至 v1.9.11 早期条目为 sha256,v1.9.11 起切换为 sha512),可用于下载后校验完整性。早期 alpha 版条目同样保留这些产物清单,方便回溯每个开发阶段的构建状态。

二、升级前必读:破坏性变更与前置动作(Before Upgrading)

变更日志在 v1.9.0 主条目中按 SIG 分组给出了升级前必须处理的 Action Required,这是运维侧最需要关注的段落,逐条整理如下。

API Machinery

  1. 准入 API 版本迁移(不向后兼容):API server 调用 admission webhook 所用的 admission API 从 admission.v1alpha1 迁移到 admission.v1beta1;admissionregistration API 中的 webhook 配置也升级到 v1beta1升级前必须删除所有既有 webhook 与配置,再按新版本 API 重建。
  2. ValidatingAdmissionWebhook 取代 GenericAdmissionWebhook:新的校验型动态准入控制器进入通用 API server,需在 API server 的 --admission-control 参数中同步调整插件名(对应 PR #55988、#54513)。
  3. 移除废弃参数:API server 的 --portal-net--service-node-ports 两个旧选项被删除。

Auth

  • PodSecurityPolicy 兼容性修复allowPrivilegeEscalation 字段曾导致策略误拒原本放行的 Pod;若你使用 1.8.0 的 client/server 创建过 allowPrivilegeEscalation: false 的策略对象,升级后必须重新 apply 这些对象
  • 移除 GCP KMS alpha 集成:改为等待未来的进程外扩展点;升级前需确认数据已用其他 provider 解密或重新加密。

CLI

  • kubectl 移除 Swagger 1.2 校验--use-openapi--schema-cache-dir 选项随之删除,kubectl 全面转向 OpenAPI。

Cluster Lifecycle

  • kubeadm join 必须显式做 CA 固定:要么为 kubeadm join 指定 --discovery-token-ca-cert-hash,要么用 --discovery-token-unsafe-skip-ca-verification 显式关闭该校验。
  • kubelet --cloud-provider 不再默认 auto-detect:手动设置 --cloud-provider=auto-detect 仍可用,但该行为会在未来版本彻底移除;1.9 及以后的最佳实践是显式指定云厂商。
  • kubeadm --skip-preflight-checks 弃用:由 --ignore-preflight-errors 取代。

Multicluster

  • Federation 移出主干:Kubernetes Federation 开发迁往独立仓库并独立发版,随之而来的是:kubectl 不再包含 Federation 行为、kubefed 不再随 Kubernetes 发布、Federation server 不再打入 hyperkube 镜像。

Node

  • kubelet 移除 --network-plugin-dir(1.7 起弃用),改用 --cni-bin-dir
  • --cloud-provider 默认行为变更:与 Cluster Lifecycle 条目一致,kubelet 侧同样需要显式设置。

Network

  • NetworkPolicy 存储版本升级:对象在 etcd 中以 v1 格式存储,升级后务必确认所有 NetworkPolicy 已迁移到 v1。
  • kube-proxy 配置 API 组变更:从 componentconfig/v1alpha1 改为 kubeproxy.config.k8s.io/v1alpha1;若你通过配置文件而非命令行管理 kube-proxy,需要修改配置文件的 apiVersion
  • 新增特性门控ServiceNodeExclusion gate 必须开启,节点上的 alpha.service-controller.kubernetes.io/exclude-balancer 注解才会生效。

Scheduling

  • Taint 键正式化并改名
    • unreachable 进入 GA;notReady 更名为 not-ready 并进入 GA;
    • Taint 会自动更新,但 Toleration 必须手工更新:将 node.alpha.kubernetes.io/notReady 改为 node.kubernetes.io/not-ready,将 node.alpha.kubernetes.io/unreachable 改为 node.kubernetes.io/unreachable
    • node.kubernetes.io/memory-pressure taint 现在遵循 whitelist 配置,需要显式加入白名单才生效。
  • kube-scheduler 配置重构:新增 --config 指向序列化 scheduler 配置文件,其余大量 flag 进入弃用轨道。
  • 删除 Opaque Integer Resources(OIR):1.8 弃用的 OIR 机制在 1.9 被彻底移除。

Storage

  • Local PersistentVolumes alpha 需要同时开启 VolumeScheduling alpha:VolumeScheduling 特性门控必须在 kube-scheduler 与 kube-controller-manager 上同时打开;NoVolumeNodeConflict predicate 已移除,非默认 scheduler 需改用 CheckVolumeBinding predicate 并更新策略。

OpenStack

  • 移除 Neutron LBaaS V1,仅保留 V2 支持。

WARNING:etcd 备份强烈建议

无论采用哪种安装/升级方式(kargo、kops、kube-up、kube-aws、kubeadm 等),从 1.8 升级 1.9 前都必须备份 etcd 数据——因为部分升级流程可能自动把 etcd 从 3.0 升到 3.1,而 etcd 不支持降级。若想回到 Kubernetes 1.8,只能停留在 etcd 3.1 或从备份恢复。这一警告是 1.9 主条目中最醒目的运维红线,需优先落实。

三、v1.9 核心主题:按 SIG 划分的演进方向

发布说明按 Special Interest Group(SIG)组织主题,本节逐项还原其要点。

API Machinery:可扩展性

SIG API Machinery 新增了一类变更型(mutating)准入控制 Webhook,并将 admission control webhooks 整体推进到 beta。这标志着“外部代码可动态拦截并改写 API 请求”成为官方一等公民能力,为后来 operator/策略引擎的繁荣打下基础。

Apps:Workloads API 达到 GA

由 DaemonSet、Deployment、ReplicaSet、StatefulSet 组成的核心工作负载 API 在 apps/v1 达到 GA 稳定apps/v1beta2 随之弃用,所有新代码应使用 apps/v1。这一变化的代码事实今天仍完整保留在当前仓库的 staging/src/k8s.io/api/apps/v1/types.go 中——StatefulSetDeploymentDaemonSetReplicaSet 四类类型均定义于此。

Auth:授权扩展能力

  • RBAC ClusterRole 聚合(cluster role aggregation):内置的 admin/edit/view 角色可通过聚合机制追加权限;
  • Webhook authorizer 可拒绝请求并短路后续 authorizer 的判定;
  • **PodSecurityPolicy(beta)**的可用性与性能得到提升。

AWS:EBS 稳定性与 NVMe

  • EBS 卷若长时间“卡”在 attaching 状态,节点会被打上不可调度(unschedulable)taint,方便管理员介入处理——官方建议对这类实例做好监控,必要时自动终止;
  • 新增 NVMe 磁盘支持LoadBalancer 类型 Service 可选用 NLB(alpha)替代 ELB。

Azure:负载均衡实现大幅强化

SIG Azure 在云厂商接入上投入显著,尤其针对 Azure Load Balancer 实现做了大量重构与修复。

Cluster Lifecycle:kubeadm 蓄力 GA

kubeadm 的多数新特性(CoreDNS、IPv6、Dynamic Kubelet Configuration)以 alpha 形态进入;Cluster API 的初版 spec 与 GCE 示例实现从零起步,目标是 2018 年打磨到生产级。

Instrumentation:稳定性优先

聚焦 Heapster、Prometheus 自定义指标适配器、Stackdriver 等组件的稳定性。

Network:IPv6 与 CoreDNS 双双 alpha

实现 IPv6 alpha 支持,以及 CoreDNS 作为 kube-dns 的替代品(alpha);同时启动 extensions/v1beta1 NetworkPolicy 的弃用进程,转向 networking.k8s.io/v1

Node:硬件加速与可靠性

围绕硬件加速器Device PluginCPU pinning 迭代 alpha 特性(目标是下个版本进入 beta),并做大量面向生产环境的可靠性与性能增强。

OpenStack:配置简化与 API 更新

  • Block Storage(Cinder)V3 支持;
  • Load Balancer(Octavia)V2 支持(此外仍兼容 Neutron LBaaS V2);
  • Neutron LBaaS V1 移除
  • 优先采用智能默认值与自动探测(块存储 API 版本、安全组等)。

Storage:CSI 引入,存储走向插件化

  • Container Storage Interface(CSI)alpha 实现:安装新卷插件将像部署 Pod 一样简单,第三方存储厂商无需向 Kubernetes 核心代码库提交代码;
  • 卷子系统新增:块设备暴露(alpha)、更多卷插件的在线扩容(alpha)拓扑感知的卷调度

Windows:支持推进到 beta

Windows Server 与 Windows Server Containers 支持从 alpha 推进到 beta,显著拓宽 Kubernetes 的企业级落地场景。

四、重要变更深入解析(Notable Changes)

本节按子系统展开 v1.9.0 的 Notable Changes,并尽量与当前仓库源码/目录形成互证。

1. Workloads API(apps/v1)与 Apps 控制面

  • apps/v1 正式承载 DaemonSet/Deployment/ReplicaSet/StatefulSet 四类工作负载(前述 GA 主题);
  • kubernetes.io/created-by 注解不再写入控制器创建的对象,判定“谁拥有对象”改用 metadata.ownerReferencescontroller: true)——这与 1.9 对垃圾回收语义的收紧一脉相承;
  • StatefulSet 控制器为每个 Pod 生成 statefulset.kubernetes.io/pod-name 标签,便于按 Pod 粒度暴露 Service
  • DaemonSet 与 StatefulSet 的 status 新增 conditions 字段,与其他控制器对齐;
  • 默认垃圾回收策略变化:经 apps/v1 端点删除 Deployment/DaemonSet/StatefulSet/ReplicaSet 时,默认从 OrphanDependents 变为 DeleteDependents(仅影响 REST 层语义,不改变 kubectl --cascade 的默认值;升级 client-go 并使用 AppsV1() 接口的调用方需注意)。

2. API Machinery

Admission Control:

  • Webhook 进入 beta,新增变更型(mutation)支持
  • Webhook 准入支持配置文件描述向 webhook server 的认证方式
  • 动态准入 Webhook 除 Service 引用外,还可填写 URL(支持集群外部署);
  • 新增 namespaceSelector,可按命名空间标签只对部分命名空间生效;
  • 增加 admission 插件(含动态 webhook)的监控指标;
  • PodSecurityPolicy 注解 kubernetes.io/psp 仅在创建时设置一次。

API 与 API server:

  • 修复 apps API 组 scale 子资源 discovery 信息错误;
  • 修复 client-go 指标未能注册到 Prometheus 的问题(影响多个组件)。

Audit:

  • kube-apiserver 退出前等待打开的连接处理完毕,优雅关闭,audit 后端不再丢事件;
  • Webhook 遇到连接重置时总是重试发送。

Custom Resources:

  • CRD 结构校验(validation)进入 beta
  • 官方新增 sample-controller 作为 CRD 控制器示例;
  • CRD 自定义资源支持 metadata.name/metadata.namespacefield selector;修复了单对象 watch(此前只能 watch 集合)的问题。

其他 API Machinery:

  • kubectl get 新增 beta 级 --chunk-size={SIZE},控制大列表分批返回,改善大型集群的操作感知延迟,传 0 关闭;
  • API 分块(limit/continue)整体进入 beta,使用 Informer/ListWatch 的 client 自动启用;
  • --etcd-quorum-read 默认改为 true(保障 HA etcd 正确性),随后连参数带“可关闭性”一起弃用;
  • 新增 --etcd-compaction-interval 控制 API server 对 etcd3 的压缩请求;
  • 新增 events.k8s.io API 组(v1beta1),携带重新设计的 Event 类型;
  • apiserver proxy 在 service 返回绝对路径时重写 URL host;NO_PROXY 支持 CIDR 写法;修复聚合 API server 与 webhook 准入端点的服务端名称校验。

3. Auth

Audit: 审计事件新增 RequestReceivedTimestampStageTimestamp;高级审计策略支持策略级的 omitStage

RBAC:

  • 内置默认角色权限扩充:admin/edit 具备读写权限,view 可读 poddisruptionbudget.policy
  • 规则支持 */(subresource) 通配写法(如 */scale 匹配任意资源的 scale 子资源);
  • 引导策略允许已认证用户创建 selfsubjectrulesreviews
  • ClusterRole 可聚合其他角色(本版本 Auth 主题的核心);
  • 修复 API server 重启时某些引导 RoleBinding 出现重复 subject 的问题。

Other Auth:

  • PodSecurityPolicy 可管理对特定 FlexVolume 驱动的访问;
  • 审计策略文件缺少 apiVersion/kind 时判定为非法;
  • 修复经 apps API 组访问 ReplicaSet/DaemonSet 偶发 forbidden 的问题;
  • 降低 PodSecurityPolicy 准入延迟;
  • 多个 PSP 都允许某 Pod 时,优先选择无需为任何字段填默认值的策略;若必须填默认值,则取按名称排序后的第一个;
  • 新增控制器自动清理 “Approved+Issued” 或 “Denied” 状态的 CertificateSigningRequest;
  • 为全部 in-tree 集群插件补充 PodSecurityPolicy(GCE 侧通过 ENABLE_POD_SECURITY_POLICY=true 开启并安装默认策略)。

4. Autoscaling

  • HPA 通过多态 scale client 正确作用于任意 API 组的可伸缩资源;
  • horizontal-pod-autoscaler-tolerance 参数使 HPA 容忍度可配置
  • 修复某些情况下 HPA 分配的 desiredReplicas 超过 maxReplicas 的问题。

5. AWS

  • 支持 NVMe 实例类型(如 C5)的节点;EBS 卷长时间 attaching 时对节点打 taint 使其不可达;attach/delete 前检查卷 available 状态;卷从已停止节点上卸载;
  • ELB 健康检查参数可注解覆盖:service.beta.kubernetes.io/aws-load-balancer-healthcheck-{healthy-threshold,unhealthy-threshold,timeout,interval}
  • 新增 Amazon NLB 支持(alpha);中国区支持 ECR 凭据;AWS SDK 升级到 1.12.7。

6. Azure

  • Service 注解 service.beta.kubernetes.io/azure-dns-label-name 设置公网 IP 的 DNS 标签;
  • Azure Load Balancer Auto 模式:service.beta.kubernetes.io/azure-load-balancer-mode=auto|as1,as2... 支持自动选择可用负载均衡器或指定可用集;
  • azurefile StorageClass 的自定义 mountOptionsdir_mode/file_mode)得到尊重;磁盘支持 GRS/RAGRS 账号类型;NSG 规则收敛以规避 Azure 资源限额;Windows 挂载路径与无限挂载点支持。

7. CLI / Kubectl

  • kubectl cp 支持把远端文件拷入本地目录、并正确处理目录复制;
  • kubectl get 支持 fieldSelector
  • kubectl apply 基于 OpenAPI spec 计算新旧配置 diff,不可用时回退到内置类型;
  • kubectl explain 改用 OpenAPI,可解释 apiservicescustomresourcedefinition
  • kubectl get 默认用 OpenAPI schema 扩展选择自定义类型列;
  • kubectl top node 按名称、top pod 按命名空间排序(修复不稳定排序);
  • kubectl drain 新增 --dry-runkubectl create 新增 --raw 直发请求;新增 create priorityclass 子命令;
  • 自定义列输出缺字段时输出 <none> 而非报错;create pdb 不再默认设置 min-available

8. Cluster Lifecycle

API Server:

  • alpha 级 --endpoint-reconciler-typemaster-count(默认)、lease(存于存储层、便于清理已删除 apiserver)、none(no-op,用于自托管)。

Cloud Provider Integration:

  • cloud-controller-manager 打入 hyperkube;新增 --concurrent-service-syncs 控制 worker 数量。

kubeadm:

  • 新增 --print-join-command(配合 kubeadm token create);
  • kubeadm upgrade apply 支持 --etcd-upgrade,将 etcd 静态 Pod 升到目标 Kubernetes 版本官方推荐的 etcd 版本;
  • alpha 级 Kubelet Dynamic Configuration 支持;CoreDNS 实验性支持(设置 CLUSTER_DNS_CORE_DNS=true 用 CoreDNS 替代 kube-dns);支持添加 Windows 节点。

基础设施:

  • 基础镜像升级到 Debian Stretch(9);Go 升级到 go1.9;addon-manager 支持 HA master;hyperkube 可从非标准路径运行。

GCP:

  • 节点可用可配置的 service account;GCE 上带 NVIDIA GPU 的节点改以 nvidia.com/gpu 资源名暴露;元数据隐藏由 ENABLE_METADATA_CONCEALMENT 控制;GCE/GKE 默认添加 masquerade 规则。

9. Instrumentation

  • 批处理型 audit webhook 默认参数调整(增大队列/批次大小与初始退避),并新增节流(默认 10 QPS),这些参数此后也全部可配置;
  • fluentd 支持 CRI 日志格式;[fluentd-elasticsearch addon] 的 ES/Kibana 升级到 5.6.4。

10. Multicluster(Federation)

  • kubefed init 支持 --imagePullSecrets--imagePullPolicy(私有镜像仓库场景)与 --nodeSelector(指定控制器安装节点)。

11. Network

IPv6(alpha):

  • 支持 IPv6-only 集群(不含双栈);控制面与数据面均支持 IPv6;kubeadm 可建 IPv6 集群;iptables 代理用 ip6tables;依赖 CNI 0.6.0;kube-dns 用 SRV 记录提供 IPv6 解析;
  • 限制:alpha 阶段仅测试了 CNI bridge 与 local-ipam 插件;不支持 HostPort;Pod/Cluster CIDR 的 IPv6 掩码必须为 /66 或更长(如 2001:db1::/66 合法,2001:db1::/64 不合法)。

IPVS:

  • kube-proxy 新增 --cleanup-ipvs,控制启动时是否清空既有 ipvs 规则;
  • IPVS 代理模式升级为 beta。时至今日,pkg/proxy/ipvs/ 目录下的 proxier.goipset.gocleanup.gograceful_termination.go 及配套测试仍是该代理模式的核心实现。

kube-proxy:

  • 即使宿主 iptables 默认策略为 REJECT,也加入允许 Pod 流量的规则;
  • 恢复 conntrack min/max/per-core 与 TCP close-wait/established 超时传 0 的能力(1.8 中被破坏)。

CoreDNS: 作为 kube-dns 替代品实验性支持(同 kubeadm 条目)。

其他网络变化:

  • Pod 进入优雅终止后即从 endpoints 中移除地址;AWS 新增 service.beta.kubernetes.io/aws-load-balancer-ssl-negotiation-policy 注解;
  • PodSpec 新增 alpha dnsConfig 字段并支持 DNSPolicy 的 None 模式;dnsPolicy: Default 时宿主 resolv.conf 的 options 会复制进 Pod;
  • kube-dns 新增 --no-negcache 关闭 NXDOMAIN 缓存。

12. Node

Pod API:

  • Downward API 支持把单个 label/annotation 值传入容器;删除过程中的 Pod 不再短暂进入 Pending;Summary API 增加 Pod 级临时存储指标。

硬件加速器:

  • kubelet 暴露 NVIDIA GPU 相关容器指标;Device Plugin alpha API 的 AllocateResponse 不再返回 per-device artifacts;忽略未注册的扩展资源。

容器运行时 / CRI:

  • CRI 生态齐头并进:cri-tools v1.0.0-alpha.0、cri-containerd v1.0.0-beta.0、cri-o v1.9(稳定并成为 PR 门禁)、frakti v1.9、rktlet 首次发布 v0.1.0;
  • CRI 日志格式新增字段以支持超长行拆分;status 函数支持 verbose 调试选项;kubelet 可为 CRI 运行时提供完整 summary API。

Kubelet 配置:

  • EvictionHard/EvictionSoft/EvictionSoftGracePeriod/EvictionMinimumReclaim/SystemReserved/KubeReserved 等字段改为 map[string]string,方便编写 JSON/YAML;
  • --manifest-url-header 支持多组头;KubeletConfiguration 中的 feature gates 改为 map 形式;
  • 大规模集群删除 Pod 的性能问题通过主动移除已删 Pod 容器解决;device plugin 生命周期(含 kubelet 重启后的 checkpoint 恢复)大幅增强;NodeController 不再支持 kubelet 1.2。

13. OpenStack

  • Cinder 版本探测修复并支持 V3 API;LBaaS v2 Provider 可配置,新增 Octavia v2,移除 Neutron LBaaS V1;
  • 自动探测节点安全组,且节点可属于多个安全组

14. Scheduling

  • 新增 ExtendedResourceToleration 准入控制器:若节点以扩展资源名(GPU/FPGA 等)打 taint 以做“专用节点”,开启该控制器后,请求此类资源的 Pod 会被自动加上对应 toleration;
  • 抢占(preemption)改进:考虑 PodDisruptionBudget;调度时计入 nominated Pod,避免高优先级 Pod 饥饿;
  • 新增调度队列优先调度最高优先级 Pending Pod;kubelet 驱逐也纳入 Pod 优先级;
  • 调度器缓存忽略仅注解变化的 assumed Pod 更新;Pod 可在多个 IP 上监听同一端口;
  • 所有标准资源支持 count/<resource>.<group> 形式对象数配额。

15. Storage

  • [stable] 校验收紧:PV/PVC capacity 必须大于 0;创建后不得修改 PersistentVolumeSource
  • [alpha] PVC 保护:被 Pod 使用的 PVC 禁止删除(需开启 alpha 特性);
  • [alpha] CSI:新 CSIVolumeSource 允许使用外部 CSI 驱动完成供给、挂接与挂载;
  • [alpha] Raw block volumes:卷可作为原始块设备暴露(本版本仅 Fibre Channel 插件支持);
  • [alpha] 卷在线扩容:GCE PD、Ceph RBD、AWS EBS、OpenStack Cinder 支持文件系统扩容;
  • [alpha] 拓扑感知卷调度:让调度器在做 Local PV 绑定时尊重 Pod 调度约束(动态供给暂不支持);
  • [alpha] 容器化挂载工具:挂载工具可运行在容器内而非宿主机;
  • 一批 bug 修复:ScaleIO 摆脱 drv_cfg 二进制依赖、EBS 卷从停止/错位节点正确卸载、PV Recycle 支持非 x86、FlexVolume 受 PSP 管控、CHAP Secret 通过 secretNamespace 隔离、vSphere 跨多 vCenter、跨集群 datastore 正确卸载等。

五、Known Issues:1.9 已知问题清单

  • Windows + 虚拟化兼容:Windows kubelet 调用 GetPhysicallyInstalledSystemMemory 上报物理内存,在 VMware/VirtualBox 虚拟化下失败(裸金属、Hyper-V 及主流公有云不受影响);
  • kubectl get po 误导性报错:API server 不可达时报 the server doesn't have a resource type "po",规避方式是用全名 kubectl get pods
  • Webhook 配置轮询开销:变更/校验 webhook 配置被 API server 每秒轮询一次;
  • 审计日志慢:日志写盘与请求同步执行;
  • CRD 删除异常:特定条件下无法正确删除;
  • etcd 滚动更新后 API server 超时
  • GC 误删竞态:命名空间资源先于其集群级 owner 被观察到时可能被误删。

六、Deprecations:弃用清单

归属 内容
API Machinery --etcd-quorum-read 弃用;apiserver 的 /ui 重定向将在 1.10 移除;etcd2 后端弃用(计划 1.13/1.14 移除)
Auth controller-manager 默认的 --cluster-signing-cert-file/--cluster-signing-key-file 弃用;RBAC 对象在 etcd 中改为 v1 存储,v1alpha1 支持弃用
Cluster Lifecycle apiserver --ssh-user/--ssh-keyfile 弃用;kubeadm --skip-preflight-checks 弃用;云厂商探测 external hostname 弃用
Network NetworkPolicy extensions/v1beta1 API 弃用,迁移到 networking.k8s.io/v1
Storage volume.beta.kubernetes.io/storage-class 注解弃用,改用 spec.storageClassName
Scheduling kube-scheduler --config 成为推荐方式,其余 flag 大多弃用
Node kubelet --enable-custom-metrics 弃用

七、External Dependencies:外部依赖版本基线

v1.9.0 的依赖版本在变更日志中有精确记录,是判断“某个第三方组件是否与 1.9 匹配”的官方依据:

  • etcd:支持版本为 3.1.10(v1.8 为 3.0.17);后续补丁版本 v1.9.2 将其更新到 3.1.11
  • Docker:与 v1.8 相同,校验范围为 1.11.2–1.13.1 与 17.03.x
  • Go:由 go1.8.3 升至 go1.9.2,最低支持版本提到 go1.9.1;v1.9.4 起用 go1.9.3 构建;
  • CNI:升级到 v0.6.0(与 IPv6 alpha 支持的依赖关系呼应);
  • Dashboard:v1.8.0(以 https 部署,经 kubectl proxy 访问);
  • Heapster:v1.5.0(补丁期后续升至 v1.5.2);
  • Cluster Autoscaler:v1.1.0(补丁期迭代到 1.1.1 / 1.1.2 / 1.1.3);
  • kube-dns:1.14.7(补丁期更新至 1.14.9 / 1.14.10);
  • influxdb/grafana:v1.3.3 / v4.4.3。

八、补丁维护周期:v1.9.1 – v1.9.11 的关键修复

主版本之外,补丁记录的 “Action Required” 和典型修复同样值得梳理,它们是评估生产集群是否必须跟进升级的依据:

强制动作:

  • v1.9.7:从 1.7.14、1.8.9、1.9.4 原地升级到本版本不支持 subpath+PVC 场景,相关 Pod 应先行 drain;
  • v1.9.11:API server 与 client-go 修复了 UserInfo extra 数据键中的非字母数字字符(含 /)支持,两者需同步更新才能正确处理;
  • v1.9.3:webhook 现在不再跳过集群级资源——升级前若曾为 node/PV 等集群级对象配置 webhook,需确认或删除这些配置(否则会开始生效)。

安全与健壮性:

  • v1.9.4 修复 CVE-2017-1002101(对应 issue.k8s.io/60813);同版本起 secret/configMap/downwardAPI/projected 卷改为只读挂载(可用 ReadOnlyAPIDataVolumes=false 保留旧行为至 1.11);
  • v1.9.11 批量升级 debian-iptables、hyperkube-base 等基础镜像以携带 CVE 修复;fluentd-gcp / event-exporter / prometheus-to-sd 等插件镜像同步升级;
  • v1.9.3 修复 apiserver 在存在故障 webhook 时重启失败的隐患、加密密钥与 provider 轮换修复。

组件稳定性修复(节选):

  • 调度器缓存改用 Pod UID 作为缓存键(v1.9.8);修复抢占可能永久阻塞(v1.9.10);API server 在并发 GET/LIST 携带非空 resourceVersion 时的 panic(v1.9.10);
  • 修复 kube-proxy 在 iptables 1.6.2+ 上的兼容(v1.9.7);HTTP/2 并发流饥饿问题调整 apiserver 缓冲区(v1.9.11);
  • 新增 --http2-max-streams-per-connection,聚合 API server 默认 1000(v1.9.7);
  • GC 支持 CRD 与 APIService(v1.9.10);修复多种 GC 卡死/竞态(v1.9.1、v1.9.6);
  • subpath 只读挂载、UNIX socket 等特殊文件挂载问题修复(v1.9.7、v1.9.8);
  • Azure/vSphere/OpenStack 云厂商的大量细节修复:跨资源组磁盘、SMB 挂载、NSG 收敛、vSphere 升级兼容等;
  • 审计 webhook 批量参数开放为命令行配置(beta.2 起)、批处理节流默认 10 QPS(v1.9.0 系列)。

九、如何获取与核验这些结论

需要说明的是,当前仓库主干已远新于 1.9(其 CHANGELOG 已收录至 v1.37),因此上表列出的许多 API 与 flag 早已在后续版本中进一步演化或移除;若你的生产集群仍运行 1.9 分支,务必以本文件对应的 release-1.9 分支源码与官方发布页的二进制哈希为准。本文用于理解 1.9 的架构转折与升级注意点,可作为研究 Kubernetes 存储、网络、准入控制三大主线历史的起点。

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