Kubernetes v1.9 版本特性全景解读:Workloads API 正式化、动态准入控制与 CSI 存储生态(基于 CHANGELOG 源码仓库)
本文以仓库内 CHANGELOG/CHANGELOG-1.9.md 为唯一主线,完整梳理 Kubernetes v1.9 从 alpha 到正式发布、再历经 v1.9.1–v1.9.11 补丁维护的全过程。你将系统掌握 v1.9 的核心变化:
apps/v1Workloads 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 中至今保留的 StatefulSet、Deployment、DaemonSet、ReplicaSet 四类 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.gz 与 kubernetes-src.tar.gz 两个源码包、按平台划分的 Client / Server / Node 三类二进制包及其哈希校验值、相对于上一版本(Changelog since ...)的变更清单。补丁版本还需额外说明 Action Required(强制动作)与 Other notable changes(其他重要修复)。
以 v1.9.11 为例,其下载矩阵包括:
- Client Binaries:
kubernetes-client-{darwin,linux,windows}-{386,amd64,arm,arm64,ppc64le,s390x}交叉编译产物; - Server Binaries:
kubernetes-server-linux-{amd64,arm,arm64,ppc64le,s390x}; - Node Binaries:
kubernetes-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
- 准入 API 版本迁移(不向后兼容):API server 调用 admission webhook 所用的 admission API 从
admission.v1alpha1迁移到admission.v1beta1;admissionregistration API 中的 webhook 配置也升级到v1beta1。升级前必须删除所有既有 webhook 与配置,再按新版本 API 重建。 ValidatingAdmissionWebhook取代GenericAdmissionWebhook:新的校验型动态准入控制器进入通用 API server,需在 API server 的--admission-control参数中同步调整插件名(对应 PR #55988、#54513)。- 移除废弃参数: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。 - 新增特性门控:
ServiceNodeExclusiongate 必须开启,节点上的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-pressuretaint 现在遵循 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 上同时打开;
NoVolumeNodeConflictpredicate 已移除,非默认 scheduler 需改用CheckVolumeBindingpredicate 并更新策略。
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 中——StatefulSet、Deployment、DaemonSet、ReplicaSet 四类类型均定义于此。
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 Plugin、CPU 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.ownerReferences(controller: 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.namespace的 field 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: 审计事件新增 RequestReceivedTimestamp 与 StageTimestamp;高级审计策略支持策略级的 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 的自定义
mountOptions(dir_mode/file_mode)得到尊重;磁盘支持 GRS/RAGRS 账号类型;NSG 规则收敛以规避 Azure 资源限额;Windows 挂载路径与无限挂载点支持。
7. CLI / Kubectl
kubectl cp支持把远端文件拷入本地目录、并正确处理目录复制;kubectl get支持fieldSelector;kubectl apply基于 OpenAPI spec 计算新旧配置 diff,不可用时回退到内置类型;kubectl explain改用 OpenAPI,可解释apiservices、customresourcedefinition;kubectl get默认用 OpenAPI schema 扩展选择自定义类型列;kubectl top node按名称、top pod按命名空间排序(修复不稳定排序);kubectl drain新增--dry-run;kubectl create新增--raw直发请求;新增create priorityclass子命令;- 自定义列输出缺字段时输出
<none>而非报错;create pdb不再默认设置min-available。
8. Cluster Lifecycle
API Server:
- alpha 级
--endpoint-reconciler-type:master-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.go、ipset.go、cleanup.go、graceful_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 系列)。
九、如何获取与核验这些结论
- 本篇文章的一切事实均源自 CHANGELOG/CHANGELOG-1.9.md,该文件位于仓库
CHANGELOG/目录,与其并列的 CHANGELOG-1.10.md 至 CHANGELOG-1.37.md 可追溯后续各版本的演进; - 若要阅读 v1.9 时代“今日仍在服役”的源码形态,可对照以下路径:
- GA 工作负载类型:staging/src/k8s.io/api/apps/v1/types.go;
- 动态准入 Webhook 的 API 类型(v1beta1 与最终 v1):staging/src/k8s.io/api/admissionregistration/;
- IPVS 代理实现:pkg/proxy/ipvs/;
- kubeadm 演进后的入口:cmd/kubeadm/;
- kube-proxy 模式与 kubectl 客户端入口:cmd/kube-proxy/、cmd/kubectl/。
需要说明的是,当前仓库主干已远新于 1.9(其 CHANGELOG 已收录至 v1.37),因此上表列出的许多 API 与 flag 早已在后续版本中进一步演化或移除;若你的生产集群仍运行 1.9 分支,务必以本文件对应的 release-1.9 分支源码与官方发布页的二进制哈希为准。本文用于理解 1.9 的架构转折与升级注意点,可作为研究 Kubernetes 存储、网络、准入控制三大主线历史的起点。
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 StartedRust0624
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