news 2026/9/7 19:02:31

Kubernetes v1.19 发布说明详解:Ingress 与 seccomp GA、EndpointSlices 默认启用及 v1.19.x 系列完整演进

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kubernetes v1.19 发布说明详解:Ingress 与 seccomp GA、EndpointSlices 默认启用及 v1.19.x 系列完整演进

Kubernetes v1.19 发布说明详解:Ingress 与 seccomp GA、EndpointSlices 默认启用及 v1.19.x 系列完整演进

【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes

本文基于官方变更日志 CHANGELOG-1.19.md 撰写,完整梳理 Kubernetes v1.19.0 的 16 项重大主题(What's New)、强制升级注意事项、废弃清单与关键 API 变更,并覆盖 v1.19.1 至 v1.19.16 共 16 个补丁版本的安全修复与依赖演进。读完后,你可以系统掌握 1.19 版本引入的新能力(Ingress v1、seccomp GA、EndpointSlices 默认启用、结构化日志、kubectl alpha debug等)、升级前必须处理的破坏性变更,以及每个发布物对应的 sha512 校验方法。

文档结构与版本清单

CHANGELOG-1.19.md 按发布倒序组织,覆盖 v1.19.0-alpha.1 到 v1.19.16 的全部 31 个发布(5 个 alpha、3 个 beta、4 个 rc、1 个 GA、16 个补丁版本)。每个版本统一包含以下固定结构:

  • Downloads:分 Source Code、Client Binaries、Server Binaries、Node Binaries 四类,列出各平台二进制包及 sha512 哈希;
  • Changelog since 上一版本:按 Changes by Kind 分类(Deprecation / API Change / Feature / Documentation / Failing Test / Bug or Regression / Other),每条标注所属 SIG 与 PR 编号;
  • Dependencies:列出 Added / Changed / Removed 三类 Go 依赖版本变化;
  • Important Security Information(补丁版本):涉及的 CVE 编号、受影响版本区间与修复版本;
  • Urgent Upgrade Notes(GA 及关键版本):升级前必须阅读的破坏性变更。

v1.19 系列 GA 后的补丁版本演进路线为:v1.19.0 → v1.19.16,其中两个版本包含安全公告(v1.19.10 修复 CVE-2021-25735,v1.19.15 修复 CVE-2021-25741)。同一系列下其他 minor 版本的变更日志入口见 CHANGELOG/README.md。

v1.19.0 的 16 项重大主题(What's New)

废弃 API 可见化:Deprecation warnings

SIG API Machinery 实现了"使用废弃 API 时发出警告"的机制,警告对kubectl用户和 API 消费者可见,同时向集群管理员暴露指标。请求废弃 API 时,响应会携带一个 Warning,其中包含目标移除版本(removed release)与替代 API;准入 Webhook 也可以返回此类警告;自定义资源(CRD)的某个版本被标记废弃后同样会触发警告。配套的度量是apiserver_requested_deprecated_apisgauge 指标,标签含groupversionresourcesubresourceremoved_release

避免"永久 beta":九个月转正政策

从 Kubernetes 1.20 起,SIG Architecture 执行新政策:所有 REST API 在 beta 停留时间不超过九个月。新 API 进入 beta 后,九个月内必须二选一:转正为 GA 并废弃 beta 版本,或发布新的 beta 版本(同时废弃旧 beta)。若倒计时耗尽仍未满足,则下一个 Kubernetes 版本直接废弃该 API 版本。

kubectl alpha debug:两类调试工作流

SIG CLI 扩展了kubectl调试能力,新增两种工作流(均通过kubectl alpha debug提供,不依赖任何新集群特性,可在存量集群上实验):

  1. 通过复制 Pod 调试工作负载kubectl alpha debug复制原 Pod):可在未启用 ephemeral container 的集群中插入调试容器;也可以通过改镜像(如 busybox)或改命令(如sleep 1d)的方式修改正在崩溃的容器,留出kubectl exec的窗口;
  2. 通过宿主命名空间容器调试节点(在 node 的 host namespaces 中创建调试容器):可以检查节点宿主文件系统中的配置文件。

当前仓库中该命令的实现位于 staging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go,与 profiles.go 配套(后者定义--copy-to-container/--copy-from-container等 profile 参数)。

结构化日志(Structured logging)

SIG Instrumentation 标准化了日志消息结构与对象引用格式,便于日志的解析、处理、存储、查询与分析。klog 库新增强制日志结构的方法;各组件(kube-apiserver、kube-scheduler、kube-controller-manager、kubelet)新增--logging-format命令行参数,默认值为text(行为与原有 klog 一致),可切换为json

EndpointSlices 默认启用

EndpointSlice 是比 Endpoints 更可扩展的替代 API:它按 Service 跟踪 Pod 的 IP 地址、端口、就绪状态与拓扑信息。自 1.19 起该特性默认启用,kube-proxy 改为从 EndpointSlices(而非 Endpoints)读取后端。官方描述这是一个"几乎不可见但对大规模集群有明显可扩展性提升"的变更,并为 Topology Aware Routing 等后续能力铺路。相关实现事实:

  • kube-proxy 在 Linux 上默认消费 EndpointSlices;
  • Windows 节点可通过 alpha 特性门WindowsEndpointSliceProxying开启同样的行为;
  • 新增EndpointSliceMirroring controller,把自定义 Endpoints(custom endpoints)镜像到 EndpointSlices;
  • 本仓库中 EndpointSlice 的类型定义位于 staging/src/k8s.io/api/discovery/v1/types.go,控制器实现位于 pkg/controller/endpointslice/ 与 pkg/controller/endpointslicemirroring/。

Ingress 毕业为 GA

SIG Network 将使用最广泛的 Ingress API 正式毕业至networking.k8s.io/v1extensions/v1beta1networking.k8s.io/v1beta1中的 Ingress/IngressClass 类型被废弃,且将在 1.22 起不再提供。v1 相对 v1beta1 的关键字段变化:

v1beta1 字段v1 对应字段
spec.backendspec.defaultBackend
serviceNameservice.name
servicePort(字符串)service.port.name
servicePort(数字)service.port.number
pathType(有默认值)不再有默认值,必须显式指定Exact/Prefix/ImplementationSpecific

其他更新:backend 支持 resource 或 service 两种类型;path不再要求是合法的正则表达式。类型定义见 staging/src/k8s.io/api/networking/v1/types.go。

seccomp 毕业为 GA

seccomp(secure computing mode)支持毕业为 GA,用于限制 Pod(作用于其全部容器)或单个容器的系统调用,提升工作负载安全性。技术上,Pod 与 Container 的securityContext新增一等公民字段seccompProfile

securityContext: seccompProfile: type: RuntimeDefault|Localhost|Unconfined # 三选一 localhostProfile: my-profiles/profile-allow.json # 仅 type == Localhost 时需要

旧的seccomp.security.alpha.kubernetes.io/podcontainer.seccomp.security.alpha.kubernetes.io/...注解被废弃,将在 v1.22.0 移除。当前版本内置自动版本偏斜(version skew)处理:新字段与旧注解互相转换,因此存量工作负载无需手动迁移。本仓库中SeccompProfile结构定义于 staging/src/k8s.io/api/core/v1/types.go(SecurityContextseccompProfile字段及SeccompProfileSeccompProfileType类型)。

生产镜像移交社区管理

自 v1.19 起,Kubernetes 容器镜像存放于社区控制的存储桶{asia,eu,us}.gcr.io/k8s-artifacts-prodk8s.gcr.io泛域名指向该新桶,生产构建产物由此纳入社区管理。

KubeSchedulerConfiguration 毕业为 Beta

SIG Scheduling 将KubeSchedulerConfiguration提升至 Beta,对应 API 版本由kubescheduler.config.k8s.io/v1alpha2升级至kubescheduler.config.k8s.io/v1beta1。该配置允许用户调整 kube-scheduler 的算法与插件:可在指定调度阶段按 profile 粒度启用/禁用特定插件而无需重写其余配置;单个 kube-scheduler 实例可服务多个 profile,Pod 通过.spec.schedulerName选择所用 profile。本仓库中 v1beta1 配置类型位于 staging/src/k8s.io/kube-scheduler/config/v1/。

CSI 迁移:AzureDisk 与 vSphere 进入 Beta

为把 in-tree 卷插件及云厂商依赖移出 Kubernetes 内核,CSI migration 特性允许使用旧 API 的存量卷在代码移除后继续工作——所有卷操作被路由到对应 CSI 驱动。1.19 中 AzureDisk 与 vSphere 两个实现进入 Beta:

  • AzureDisk:特性门CSIMigration提升为 Beta(默认开启),CSIMigrationAzureDisk为 Beta(默认关闭,因为需要安装 AzureDisk CSI 驱动)。in-tree 插件kubernetes.io/azure-disk被废弃,计划 1.23 移除;
  • vSphereCSIMigration+CSIMigrationvSphere进入 Beta,in-treekubernetes.io/vsphere-volume插件将在未来版本移除。vSAN raw policy 参数被废弃。要求 vCenter/ESXi ≥ 7.0u1、VM 硬件版本 ≥ 15。

两类迁移的官方建议一致:存量用户开启对应 CSIMigration 特性并安装 CSI 驱动以避免中断,新卷则应直接使用 CSI 驱动。

存储容量跟踪(Storage capacity tracking)

传统调度假设"持久存储在集群中处处可用且容量无限"。拓扑约束解决了"处处可用",但直到 1.19 之前的调度都未考虑剩余存储容量是否足够。新的 alpha 特性CSIStorageCapacity增加了一个让 CSI 驱动上报存储容量的 API,并在调度时纳入该信息参与节点选择;它也是本地卷等容量受限卷类型支持动态预配的基础。已知局限:受 WaitForFirstConsumer 绑定模式的一个缺陷影响(官方 issue #94217)。

CSI 卷健康监控(CSI Volume health monitoring,alpha)

允许 CSI 驱动把底层存储系统的异常卷状况上报给 Kubernetes,以事件(event)形式体现在 PVC 或 Pod 上。这是迈向"Kubernetes 程序化检测并处置单卷健康问题"的第一步。

通用临时卷(Generic ephemeral volumes,alpha)

内置卷插件的生命周期与 Pod 绑定,用作临时空间(emptyDir)或数据注入(ConfigMap/Secret、CSI inline volume)。新的 alpha 特性GenericEphemeralVolume(特性门同名)允许任意支持动态预配(dynamic provisioning)的存储驱动以临时卷形式使用,生命周期绑定 Pod:

  • 可提供不同于根磁盘的临时存储,例如持久内存或节点上的独立本地盘;
  • 支持全部 StorageClass 预配参数;
  • 支持 PVC 的全部能力,如容量跟踪、快照与恢复、卷扩容。

实现机制是复用正常的PersistentVolumeClaim预配流程,因此第三方存储厂商均可提供这类存储。

不可变 Secret 与 ConfigMap(Beta,默认开启)

Secret 与 ConfigMap 对象可设置Immutable字段标记其内容不可变,当集群中存在大量 Secret/ConfigMap 卷时可显著降低 API server 负载。本版本将该特性提升为 Beta 并默认启用。

CSI Proxy for Windows(Beta)

Windows CSI Proxy 随 1.19 进入 Beta,允许 Windows 中的容器执行特权存储操作,从而让 CSI 驱动运行在 Windows 上。Beta 阶段支持直挂磁盘(direct attached disks)与 SMB 两类存储驱动。

Dashboard v2

SIG UI 发布了 Kubernetes Dashboard 插件 v2(内置版本升级至 v2.0.1),新增 CRD 支持、新的翻译与更新版 AngularJS。最新版本在独立的 kubernetes/dashboard 仓库发布。

Windows containerd 支持进入 Beta

1.18 引入的 Windows containerd 支持在本版本进入 Beta,新增对 Windows Server 2004 的支持。SIG Windows 同期改进:

  • DSR(Direct Server Return)模式:允许大量 Service 高效横向扩展;
  • Windows 容器开始遵守 CPU limit;
  • 指标采集与 summary 的性能改进。

支持窗口延长至一年

自 v1.19 起,单个 minor 版本的补丁修复支持期从 9 个月延长至 1 年。依据是 2019 年初 WG Long Term Support(LTS)的调研:相当一部分终端用户无法在 9 个月支持期内完成升级;年度支持期更贴合常见的年度规划周期。

v1.19.0 紧急升级注意事项(Urgent Upgrade Notes)

以下条目官方标注为"升级前必读",均带有 ACTION REQUIRED 或明确的行为变化:

  1. 核心组件基础镜像从 debian 切换为 distroless(kube-controller-manager,kube-apiserver 与 kube-scheduler 亦同步切换):如果仍依赖脚本形态的 Flex Volumes 支持,需要自带所需软件包(如 bash)自建镜像。
  2. --basic-auth-file基本认证支持被移除:应迁移到--token-auth-file获得类似能力。
  3. Azure Blob 磁盘的Shared/Dedicatedkind 被废弃kubernetes.io/azure-diskStorageClass 应改用kind: Managed
  4. CVE-2020-8559(Medium):节点被攻陷后可向集群提权。API Server 不再为 upgrade 请求代理非 101 响应。可能破坏以非 101 响应码回答 upgrade 请求的代理后端(如扩展 API server)。
  5. kubeadm 不再在 /var/lib/kubelet/kubeadm-flags.env 中写--cgroup-driver:改由 kubelet 的 config.yaml 承载。若你在 kubeadm-flags.env 或 /etc/default/kubelet(RPM 为 /etc/sysconfig/kubelet)中保留了该 flag,请删除并通过 KubeletConfiguration 配置。
  6. kubeadm 尊重 ClusterConfiguration 中用户指定的 etcd 版本:若不希望使用该版本,需编辑并删除 kubeadm-config ConfigMap。
  7. kubeadm 尊重用户设置的 resolvConf:即使 systemd-resolved 处于活动状态也不再覆写;同理移除--resolv-conf命令行 flag,请改用 KubeletConfiguration。
  8. kubeadm init 的 "kubelet-start" 阶段后移:调整到 "kubeconfig" 阶段之后,确保 kubelet 在 KubeletConfiguration 组件配置文件(/var/lib/kubelet/config.yaml)生成后才启动,解决 OpenRC 等 init 系统下 kubelet 服务 crashloop 的问题。
  9. kubeadm config upload命令被彻底移除(完成完整 GA 废弃周期):请改用kubeadm init phase upload-config
  10. KubeSchedulerConfiguration 从 v1alpha2 升级到 v1beta1,具体变更:
    • .bindTimeoutSeconds移入VolumeBinding插件参数,可按 profile 单独配置;
    • .extenders解码变为大小写敏感(所有字段);.extenders[*].httpTimeout类型改为metav1.Duration.extenders[*].enableHttps重命名为.extenders[*].enableHTTPS
    • RequestedToCapacityRatio参数解码大小写敏感;
    • DefaultPodTopologySpread插件重命名为SelectorSpread
    • Profile 定义中移除Unreserve扩展点,所有Reserve插件都实现Unreserve调用;
    • .disablePreemption移除,禁用抢占需改为禁用 "DefaultPreemption" PostFilter 插件。

废弃与移除清单(Deprecation)

v1.19.0 的 Deprecation 分类包含以下条目:

  • API 版本废弃apiextensions.k8s.io/v1beta1apiregistration.k8s.io/v1beta1storage.k8s.io/v1beta1均让位于对应v1authentication.k8s.io/v1beta1authorization.k8s.io/v1beta1废弃,计划 1.22 移除;coordination.k8s.io/v1beta1废弃(目标 1.22 移除,使用 v1);autoscaling/v2beta1让位于autoscaling/v2beta2
  • componentstatus API 废弃:该 API 曾提供 etcd、kube-scheduler、kube-controller-manager 组件状态,但仅在组件与 API server 同机部署且后两者暴露非安全健康端点时才有效。替代方案:etcd 健康状态纳入 kube-apiserver 健康检查,其余组件直接探测各自健康端点。
  • kubeadm 命令废弃kubeadm config view(改用kubectl get cm -o yaml -n kube-system kubeadm-config);kubeadm alpha kubelet config enable-dynamic(改用 Dynamic Kubelet Configuration 官方指南);--experimental-kustomize让位于--experimental-patches(补丁格式与kubectl patch一致,以文件形式从目录读取,目前仅支持 static Pod 补丁);kubeadm alpha certs renew移除--use-api
  • CLI 移除kubectl get--exportflag 移除。
  • 调度器:alpha 特性 'ResourceLimitsPriorityFunction' 因无使用量被彻底移除。
  • 构建:Kubernetes 不再支持构建 hyperkube 镜像。
  • :CSI NodeExpandVolume 在 NodeStage 与 NodePublish 之间被调用的行为被废弃——具备 EXPAND_VOLUME 能力的 CSI 驱动应支持 NodePublish 之后调用 NodeExpandVolume;in-tree vSphere / AzureDisk 插件按上文 CSI 迁移路线废弃。

关键 API 与功能变更(按子系统归纳)

kube-apiserver 与 API 机制

  • 废弃 API 响应警告与指标:对废弃版本的请求返回 warning header 并产生指标;kubectl将警告输出至 stderr,且新增--warnings-as-errors选项可把警告当作致命错误;client-go默认将警告输出到 stderr,可通过config.WarningHandler(按客户端)或rest.SetDefaultWarningHandler()(按进程)覆盖;审计事件对废弃版本请求附带"k8s.io/deprecated": "true"注解,若可确定移除版本还附带"k8s.io/removal-release"注解。
  • 准入 Webhook 支持返回警告:通过 admission review 响应的.response.warnings字段把警告消息展示给 API 客户端。
  • CRD 版本废弃spec.versions[*].deprecated可置true标记版本废弃,spec.versions[*].deprecationWarning可覆盖默认警告文案。
  • CertificateSigningRequest 升级至 certificates.k8s.io/v1spec.signerNamespec.usages变为必填(不允许kubernetes.io/legacy-unknown,usages 不得重复且须为已知值);status.conditions新增status字段(仅Approved/Denied/Failed条件可置True,现为必填)、lastTransitionTime字段与Failed条件类型;ApprovedDenied互斥且不可移除;status.certificate必须为 PEM 编码且仅含 CERTIFICATE 块。certificatesigningrequests/approval子资源新增支持 patch。kube-controller-manager 的各 managed signer 可使用独立的签名证书与密钥(--cluster-signing-[signer-name]-{cert,key}-file)。
  • SO_REUSEPORT:kube-apiserver、kube-scheduler、kube-controller-manager 在 Unix 系统上对--bind-address/--secure-port监听启用 SO_REUSEPORT(不支持 Windows),允许单主机多实例优雅滚动重启。
  • /readyz 新增 "informer-sync" 检查,确保内部 informer 已同步。
  • reflector 修复:可恢复 "Too large resource version" 错误;watch bookmark 在被请求时周期性发送(而非仅在超时前)。
  • kube-apiserver 对 kubelet 的--kubelet-httpsflag 废弃,连接无条件使用 https。
  • 指标更名:kubernetes_build_info标签从 camel case 改为 snake case(git_versiongo_version等,覆盖 kube-apiserver / kube-scheduler / kube-proxy / kube-controller-manager)。
  • 新增apiserver_current_inflight_request_measures与(开启 API Priority and Fairness 时)windowed_request_stats指标;新增/debug/flowcontrol/*调试端点族用于转储流控系统内部状态。
  • apimachineryscheme.Convert()仅使用显式注册的转换(默认反射转换不可用),可用+k8s:conversion-gen标签与 code-generator 生成转换代码。
  • 服务账户:Pod 绑定的 service account token 在 Pod 删除宽限期内依然可用。
  • GODEBUG 行为:Kubernetes 以 golang 1.15.0-rc.1 构建,Go 1.15 默认禁用"X.509 服务证书无 SAN 时将 CommonName 当作主机名"的遗留行为;可临时通过GODEBUG环境变量加x509ignoreCN=0重新启用。
  • 构建最低 Go 版本要求提升至 Go 1.14.4。

kubelet 与节点

  • 新增--logging-formatflag(结构化日志);--runonce可在配置文件以runOnce设置;--node-status-max-images→ 配置字段nodeStatusMaxImage--enable-server/--provider-idenableServer/providerID--kernel-memcg-notificationkernelMemcgNotification--volume-plugin-dirVolumePluginDir--seccomp-profile-root标记废弃;--bootstrap-checkpoint-path--cloud-provider/--cloud-config相关项被移除或标记废弃。
  • SetHostnameAsFQDN:PodSpec 新字段,为 true 时把 Pod 的 FQDN 设为容器 hostname(Linux 写入内核 utsname 的 nodename;Windows 写 Tcpip 注册表键值)。
  • HugePageStorageMediumSize特性门默认开启,容器级别支持多种大小的大页资源。
  • cgroups v2:支持运行在 cgroups v2 unified mode 的宿主上,并加入节点校验。
  • RotateKubeletClientCertificate 毕业为 GA,对应--feature-gate参数将在 1.20 移除;启用客户端证书轮转的 kubelet 发布certificate_manager_server_ttl_secondsgauge 指标。
  • /logs端点可控:KubeletConfiguration 中enableSystemLogHandler置 false 可关闭;置 true 必须以enableDebuggingHandlers为 true 为前提。
  • Pod sandbox 安全加固:dockershim 与 kuberuntime 下 pod sandbox 一律以no-new-privilegesruntime/defaultseccomp profile 运行。
  • 指标更名:kubelet_running_container_countkubelet_running_containerskubelet_running_pod_countkubelet_running_pods/metrics/resourcenode_cpu_usage_seconds/container_cpu_usage_seconds恢复_total后缀(部分回滚 1.18 的改动)。
  • startupProbe 语义修正:指定了startupProbe但未指定readinessProbe的容器,在 startupProbe 完成前不再被视为 ready。
  • CVE-2020-8557(Medium):容器 /etc/hosts 文件导致的节点本地拒绝服务漏洞修复。
  • Pod Conditions 在重新调度尝试时跳过更新;mirror pod 遵循terminationGracePeriodSeconds;PodShareProcessNamespace 特性门移除,行为无条件启用。

调度器

  • PostFilter扩展点引入(调度框架在 Filter 阶段之后运行,典型实现即抢占逻辑),并进入 v1beta1 组件配置 API;DefaultPreemption 插件注册并启用,替代旧的硬编码抢占逻辑。
  • NodeResourcesLeastAllocated/NodeResourcesMostAllocated插件支持对 CPU 与内存的自定义权重。
  • PodTopologySpreading 新打分函数产生更好的打散效果;maxSkew增大时打分区分度降低;PodTopologySpread 打分权重翻倍;DefaultPodTopologySpread旧插件停用,DefaultPodTopologySpread特性门启用新PodTopologySpread插件做默认打散。
  • ImageLocality插件的maxThreshold按 Pod 镜像数量缩放,多镜像 Pod 的节点优先级区分更明显;EventRecorder()暴露给FrameworkHandle,插件开发者可记录集群级事件;详细打分结果可在 verbose level 10 输出;v1 Policy 配置可与 v1beta1 ComponentConfig 并存以辅助迁移。
  • 修复多个调度器缓存/抢占相关问题:节点先于其 Pod 删除导致的崩溃与缓存损坏、HA 环境下备用调度器失联期间的缓存损坏、phantom 抢占者 Pod、nominatedNodeName 无法随节点删除清除、"no nodes available" 现归入schedule_attempts_total的 unschedulable 统计;PodSchedulingDuration指标增加attempts标签;scheduler_total_preemption_attempts更名为scheduler_preemption_attempts_totalframework_extension_point_duration_secondsschedule_attempts_total增加profile标签。

网络

  • SCTPSupport 默认启用;kube-proxy 在 Windows 上通过WindowsEndpointSliceProxying/IPv6DualStack特性门分别支持 EndpointSlices 与 IPv6 双栈;kube-proxy IP 族按 nodeIP 推断(优先级:--bind-address非 0.0.0.0/:: 时取其值 → Node 对象主 IP → 回退 127.0.0.1/IPv4);新增--bind-address-hard-failflag 把端口绑定失败视为致命错误。
  • IPVS 性能:虚拟服务器地址已绑定时不再重复执行EnsureDummyInterfacekubeproxy_sync_proxy_rules_last_queued_timestamp_seconds新指标记录最近一次规则同步入队时间;iptablesmin-sync-period默认从 0 改为 1 秒。
  • Dual-stack:修复 Service clusterIP 不遵守指定 ipFamily 的 bug;修复 IPv6 前导零地址无法使用的问题;Service.Spec.IPFamily文档更新——在双栈特性 GA 前其语义可能变化,判断 Service 实际 IP 族应看 ClusterIP 或 Endpoints 而非 IPFamily。
  • ServiceAppProtocol特性门进入 Beta 并默认开启,Service 与 Endpoints 新增appProtocol字段。
  • 修复 ExternalTrafficPolicy 未应用于 Service ExternalIPs 的 bug;修复 NodePort 静态端口在多 master HA 集群下冲突的端口分配 bug;修复某些 VXLAN 网络插件下的 63 秒/1 秒连接延迟问题(此前需要用 ethtool 关闭校验和卸载的用户可以停止这样做)。
  • 节点标签beta.kubernetes.io/osbeta.kubernetes.io/arch废弃,改用kubernetes.io/oskubernetes.io/arch

存储与云厂商

  • Azure:新增共享磁盘支持(maxShares参数,当前仅 premium SSD;maxShares>1时 ReadOnly host caching 不可用,cachingMode: None),StorageClass 示例:

    kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: shared-disk provisioner: kubernetes.io/azure-disk parameters: skuname: Premium_LRS # 当前仅 premium SSD 可用 cachingMode: None # maxShares>1 时 premium SSD 不支持 ReadOnly host caching maxShares: 2

    另含 Azure disk/file 驱动 tags 支持、大量 attach/detach 悬挂与 API 限流修复、VMSS 缓存防限流等。

  • AWS:新增service.beta.kubernetes.io/aws-load-balancer-target-node-labels注解按标签定向节点;扩展 azToRegion 支持 Local Zones;cordoned 节点现从 AWS target group 注销;NLB 健康检查 SG 规则改用 NLB Subnet CIDR(v1.19.1 修复)。

  • GCE/GCP:修复单区超 1000 节点集群无法创建内网负载均衡器的 bug;减少 GCE API 调用(初始化、IP alias 反射)。

  • vSphere:PV 预配提速并减少 API 调用;vsphere.conf新增禁用凭据 Secret 管理的选项(性能考虑)。

  • CSI 附件扩展性:controller-manager 的 CSI volume attachment 改用 informer;PVC 请求大小溢出防护;延迟绑定 PVC 触发WaitingForPodScheduled事件。

kubectl 与客户端

  • kubectl alpha debug两条调试工作流(见前文);修复-c简写缺失、多 init/ephemeral 容器下的 panic 等问题。
  • kubectl diff支持选择器(selectors),并修复"实际持久化了补丁"的回归;kubectl scale支持客户端/服务端 dry-run;kubectl run新增--privilegedkubectl create deployment支持--port与 replicas;kubectl taint no可省略完整资源名;kubectl annotate --list支持。
  • kubectl config view默认对 bearer token 脱敏(与 client 证书一致),--raw仍输出完整内容。
  • --cache-dir同时设置 http 与 discovery 缓存目录,默认$HOME/.kube/cacheDISABLE_KUBECONFIG_LOCK环境变量可禁用 kubeconfig 文件锁。
  • jsonpath 序列化修正:复杂类型(map/slice/struct)序列化为 JSON 而非 Go 语法;嵌套 range 后表达式被忽略的 bug 修复。
  • kubectl port-forward明确警告不支持 UDP;修复与 exec 凭证插件并存时 bearer token 优先级歧义(token 优先)。
  • 各组件(cloud-controller-manager、kube-apiserver、kube-controller-manager、kube-proxy、kubeadm、kubemark 等)对非空非 flag 位置参数将报错退出,此前形如非 ASCII 破折号的畸形参数会被静默当作位置参数忽略。
  • kubectl top移除 heapster 支持(相关 flag 废弃)。

Known Issues(官方已知问题)

v1.19.0 明确列出的已知问题仅一条:新的存储容量跟踪 alpha 特性受 WaitForFirstConsumer 卷绑定模式的一个缺陷影响(官方 issue #94217)。

v1.19.x 补丁版本:安全修复与依赖演进

16 个补丁版本中,与安全直接相关的两个版本值得重点标注:

v1.19.10 — CVE-2021-25735(Validating Admission Webhook 不观测部分前置字段)

kube-apiserver 存在安全问题:node 更新可绕过 Validating Admission Webhook。修复后 v1.19.11 还新增了一条 Priority & Fairness 规则,豁免所有探针(/readyz/healthz/livez)请求,防止 kubelet 因流控误杀"健康"的 kube-apiserver 实例。该版本同时修复了 JSON 日志格式因缺少 Duration encoder 导致的 panic(对启用结构化日志的集群关键)、startupProbe 在容器首次重启后失效的 bug、port-forward 长连接内存泄漏等。

v1.19.15 — CVE-2021-25741(符号链接交换可致宿主文件系统访问,CVSS 8.8 High)

用户可通过 subpath 卷挂载创建容器,访问卷之外(包括宿主文件系统)的文件与目录。官方给出的受影响/修复版本矩阵:

组件受影响版本修复版本
kubeletv1.22.0 – v1.22.1v1.22.2
kubeletv1.21.0 – v1.21.4v1.21.5
kubeletv1.20.0 – v1.20.10v1.20.11
kubelet≤ v1.19.14v1.19.15

v1.19.15 其他修复包括:调度器中"新的不可调度 Pod 可能永不被重试"的竞态、job controller 不再变更共享缓存、静态预配 PV 的 attach/detach 尽量使用规范路径等。kube-apiserver 还为空闲 keep-alive 连接设置了生命周期上限与读取请求头超时上限(缓解连接耗尽类问题)。

构建工具链(Go)演进:v1.19.3 起使用 go1.15.2 → v1.19.11 先后升至 go1.15.11 / go1.15.12 → v1.19.12 升至 go1.15.13 → v1.19.13 升至 go1.15.14 并更新 debian / debian-iptables / setcap 基础镜像获取 CVE 修复 → v1.19.14 升至 go1.15.15。补丁版本整体遵循"仅修 bug 与安全"原则,例如 v1.19.2 修复 kubectl debug 多 init 容器 panic、更新 CNI 插件至 v0.8.7;v1.19.3 修复调度器缓存快照(Node 先于其 Pod 删除)、endpoints controller 过度 API 流量、Azure 文件迁移 panic 等;v1.19.16 回退了 v1.19.13 中引入的"基于均衡资源分配"调度行为变化(PR #102925),恢复原调度语义。

关键依赖变化(v1.19.0 相对 v1.18.0,节选自 Dependencies 清单)

  • 默认 etcd 服务端版本升级至 3.4.9(客户端同步至 3.4.9),v1.19.1 再升至 3.4.13;
  • containerd v1.3.3、runc 819fcc6、CNI v0.8.0(补丁期升至 v0.8.7)、cri-tools v1.18.0;
  • cadvisor v0.35.0 → v0.37.0、prometheus/client_golang v1.7.1、klog/v2 v2.2.0 新增;
  • Azure SDK v35.0.0 → v43.0.0+incompatible(补丁期升级至 v40.2.0 以上系列);
  • structured-merge-diff v3 被 v4 替代(v1.19.13 升至 v4.1.2);
  • 大量 lint 工具与历史测试依赖(bazel 工具链、go-lintpack 等)被整体移除,构建体系收敛。

发布物结构与校验方式

每个版本发布四组制品,均可通过 sha512 校验完整性。以 v1.19.0 GA 为例(完整哈希见 CHANGELOG-1.19.md 对应小节):

Source Code

文件名说明
kubernetes.tar.gz编译产物全集(含各组件二进制与集群清单)
kubernetes-src.tar.gz完整源码树

Client Binaries(9 个平台):darwin-amd64、linux-386、linux-amd64、linux-arm、linux-arm64、linux-ppc64le、linux-s390x、windows-386、windows-amd64 —— 即 kubectl、kubectl-convert 等客户端工具。

Server Binaries(5 个 Linux 平台):amd64、arm、arm64、ppc64le、s390x —— 即 kube-apiserver、kube-controller-manager、kube-scheduler、kubectl 等服务端组件。

Node Binaries(6 个平台):linux-amd64、linux-arm、linux-arm64、linux-ppc64le、linux-s390x、windows-amd64—— 即 kubelet、kube-proxy 与 kubeadm;Windows 节点包自 1.19 起为独立发布物(对应上文 Windows containerd beta 与 CSI Proxy 路线)。

使用方式:从官方发布渠道下载与目标版本 tag 一致的制品包后,用sha512sum与 changelog 中记录的哈希逐一比对,再解包部署。注意 server 包仅含 Linux 二进制,Windows 节点应使用 node 包。

源码级印证:1.19 主题在仓库中的落点

结合当前仓库(主干已远超 1.19)可以确认这些 1.19 主题代码的真实存在位置,便于读者从变更日志跳转到实现继续深入:

1.19 主题仓库内对应实现
Ingress/IngressClass v1(GA)staging/src/k8s.io/api/networking/v1/types.go
EndpointSlice(默认数据源)staging/src/k8s.io/api/discovery/v1/types.go、pkg/controller/endpointslice/、pkg/controller/endpointslicemirroring/
seccomp GA(seccompProfile 字段)staging/src/k8s.io/api/core/v1/types.go
kubectl alpha debugstaging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go、staging/src/k8s.io/kubectl/pkg/cmd/debug/profiles.go
KubeSchedulerConfiguration v1beta1staging/src/k8s.io/kube-scheduler/config/v1/
各组件特性门(CSIMigration*、WindowsEndpointSliceProxying 等)集中定义pkg/features/kube_features.go
结构化日志(--logging-format)各组件共享的 component-base 日志包 staging/src/k8s.io/component-base/logs/

从源码结构看,1.19 的三条主线——API 生命周期治理(废弃警告、九个月政策、大批 v1beta1 转正)、网络规模化(EndpointSlices 取代 Endpoints 作为 kube-proxy 数据源)、存储解耦(in-tree → CSI 迁移机制化)——在此后的版本中均延续为长期方向,这也是理解 1.19 在整个 Kubernetes 演进中地位的关键。

结语

v1.19 是一个"治理与规模化"并重的版本:16 项重大主题中,API 生命周期政策与废弃警告确立了可预期的演进节奏;Ingress 与 seccomp 毕业为 GA、EndpointSlices 默认启用则直接改写了大规模集群的接入与安全基线;1 年的补丁支持窗口加上 16 个补丁版本(含两个 CVE 修复版本)的持续投入,使 1.19.x 成为该时代线上集群的主力运行版本之一。升级前请以本文"紧急升级注意事项"一节为清单逐项核对,并用各版本发布物表中的 sha512 值校验下载的每一个制品包。

【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 19:00:24

从代码托管到研发协作,Gitee如何成为企业项目管理新标杆

这几年做技术管理和团队协作,我越来越觉得,工具选得好不好,直接决定一个团队能不能把事做成。Gitee这个平台,我从个人项目存代码,到带着团队做私有化项目管理,再到帮客户搭企业级研发协同方案,几…

作者头像 李华
网站建设 2026/9/7 19:00:02

单片机计算机毕设之基于 STM32 的多传感器室内环境监测与声光报警系统设计 基于 STM32 的手动自动双模式环境监控平台设计与实现(010307)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华