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 指标,标签含group、version、resource、subresource、removed_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提供,不依赖任何新集群特性,可在存量集群上实验):
- 通过复制 Pod 调试工作负载(
kubectl alpha debug复制原 Pod):可在未启用 ephemeral container 的集群中插入调试容器;也可以通过改镜像(如 busybox)或改命令(如sleep 1d)的方式修改正在崩溃的容器,留出kubectl exec的窗口; - 通过宿主命名空间容器调试节点(在 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/v1,extensions/v1beta1与networking.k8s.io/v1beta1中的 Ingress/IngressClass 类型被废弃,且将在 1.22 起不再提供。v1 相对 v1beta1 的关键字段变化:
| v1beta1 字段 | v1 对应字段 |
|---|---|
spec.backend | spec.defaultBackend |
serviceName | service.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/pod与container.seccomp.security.alpha.kubernetes.io/...注解被废弃,将在 v1.22.0 移除。当前版本内置自动版本偏斜(version skew)处理:新字段与旧注解互相转换,因此存量工作负载无需手动迁移。本仓库中SeccompProfile结构定义于 staging/src/k8s.io/api/core/v1/types.go(SecurityContext的seccompProfile字段及SeccompProfile、SeccompProfileType类型)。
生产镜像移交社区管理
自 v1.19 起,Kubernetes 容器镜像存放于社区控制的存储桶{asia,eu,us}.gcr.io/k8s-artifacts-prod,k8s.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 移除; - vSphere:
CSIMigration+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 或明确的行为变化:
- 核心组件基础镜像从 debian 切换为 distroless(kube-controller-manager,kube-apiserver 与 kube-scheduler 亦同步切换):如果仍依赖脚本形态的 Flex Volumes 支持,需要自带所需软件包(如 bash)自建镜像。
--basic-auth-file基本认证支持被移除:应迁移到--token-auth-file获得类似能力。- Azure Blob 磁盘的
Shared/Dedicatedkind 被废弃:kubernetes.io/azure-diskStorageClass 应改用kind: Managed。 - CVE-2020-8559(Medium):节点被攻陷后可向集群提权。API Server 不再为 upgrade 请求代理非 101 响应。可能破坏以非 101 响应码回答 upgrade 请求的代理后端(如扩展 API server)。
- kubeadm 不再在 /var/lib/kubelet/kubeadm-flags.env 中写
--cgroup-driver:改由 kubelet 的 config.yaml 承载。若你在 kubeadm-flags.env 或 /etc/default/kubelet(RPM 为 /etc/sysconfig/kubelet)中保留了该 flag,请删除并通过 KubeletConfiguration 配置。 - kubeadm 尊重 ClusterConfiguration 中用户指定的 etcd 版本:若不希望使用该版本,需编辑并删除 kubeadm-config ConfigMap。
- kubeadm 尊重用户设置的 resolvConf:即使 systemd-resolved 处于活动状态也不再覆写;同理移除
--resolv-conf命令行 flag,请改用 KubeletConfiguration。 - kubeadm init 的 "kubelet-start" 阶段后移:调整到 "kubeconfig" 阶段之后,确保 kubelet 在 KubeletConfiguration 组件配置文件(/var/lib/kubelet/config.yaml)生成后才启动,解决 OpenRC 等 init 系统下 kubelet 服务 crashloop 的问题。
kubeadm config upload命令被彻底移除(完成完整 GA 废弃周期):请改用kubeadm init phase upload-config。- 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/v1beta1、apiregistration.k8s.io/v1beta1、storage.k8s.io/v1beta1均让位于对应v1;authentication.k8s.io/v1beta1与authorization.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/v1:
spec.signerName与spec.usages变为必填(不允许kubernetes.io/legacy-unknown,usages 不得重复且须为已知值);status.conditions新增status字段(仅Approved/Denied/Failed条件可置True,现为必填)、lastTransitionTime字段与Failed条件类型;Approved与Denied互斥且不可移除;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_version、go_version等,覆盖 kube-apiserver / kube-scheduler / kube-proxy / kube-controller-manager)。 - 新增
apiserver_current_inflight_request_measures与(开启 API Priority and Fairness 时)windowed_request_stats指标;新增/debug/flowcontrol/*调试端点族用于转储流控系统内部状态。 - apimachinery:
scheme.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-id→enableServer/providerID;--kernel-memcg-notification→kernelMemcgNotification;--volume-plugin-dir→VolumePluginDir;--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-privileges与runtime/defaultseccomp profile 运行。 - 指标更名:
kubelet_running_container_count→kubelet_running_containers、kubelet_running_pod_count→kubelet_running_pods;/metrics/resource的node_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_total;framework_extension_point_duration_seconds与schedule_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 性能:虚拟服务器地址已绑定时不再重复执行
EnsureDummyInterface;kubeproxy_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/os、beta.kubernetes.io/arch废弃,改用kubernetes.io/os、kubernetes.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新增--privileged;kubectl create deployment支持--port与 replicas;kubectl taint no可省略完整资源名;kubectl annotate --list支持。kubectl config view默认对 bearer token 脱敏(与 client 证书一致),--raw仍输出完整内容。--cache-dir同时设置 http 与 discovery 缓存目录,默认$HOME/.kube/cache;DISABLE_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 卷挂载创建容器,访问卷之外(包括宿主文件系统)的文件与目录。官方给出的受影响/修复版本矩阵:
| 组件 | 受影响版本 | 修复版本 |
|---|---|---|
| kubelet | v1.22.0 – v1.22.1 | v1.22.2 |
| kubelet | v1.21.0 – v1.21.4 | v1.21.5 |
| kubelet | v1.20.0 – v1.20.10 | v1.20.11 |
| kubelet | ≤ v1.19.14 | v1.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 debug | staging/src/k8s.io/kubectl/pkg/cmd/debug/debug.go、staging/src/k8s.io/kubectl/pkg/cmd/debug/profiles.go |
| KubeSchedulerConfiguration v1beta1 | staging/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),仅供参考