Kubernetes v1.21 系列版本全解读:1.21.0 特性毕业与弃用、关键 API 变更、CVE-2021-25741 修复与 v1.21.1~v1.21.14 补丁演进
【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes
本文基于仓库中的 CHANGELOG/CHANGELOG-1.21.md 完整梳理 Kubernetes v1.21 整个版本系列(v1.21.0-rc.0 → v1.21.0 → v1.21.1 ~ v1.21.14)的变更脉络:既覆盖 v1.21.0 的十大主题特性、紧急升级注意事项与大量 API 变更/弃用项,也逐版本归纳后续 14 个补丁版的安全修复(尤其是 CVE-2021-25741)、回归修复与 Go 工具链演进,并结合当前仓库源码印证这些特性在代码中的落地位置,帮助运维与开发者完成升级决策、版本选型与变更验证。
一、v1.21 版本系列总览
CHANGELOG 以“每个发布版本一个章节”的结构组织,章节固定包含四部分:
- Downloads:源码包、客户端二进制、服务端二进制、节点二进制的文件名与 sha512 校验和,以及容器镜像清单;
- Changelog since vX.Y.Z:相对上一版本的变更;
- Changes by Kind:按 Deprecation(弃用)、API Change(API 变更)、Feature(特性)、Documentation、Failing Test、Bug or Regression(缺陷/回归)、Other(清理或 Flaky 测试)分类;
- Dependencies:Added / Changed / Removed 三类依赖变更。
v1.21 系列的完整版本链为:
| 类别 | 版本 |
|---|---|
| 预发布 | v1.21.0-alpha.1 ~ alpha.3、v1.21.0-beta.0 ~ beta.1、v1.21.0-rc.0 |
| 正式版 | v1.21.0 |
| 补丁版 | v1.21.1 ~ v1.21.14(共 14 个) |
其中 v1.21.14 的 “Changelog since v1.21.13” 各分类均为 “Nothing has changed”,说明末期补丁版趋于静默维护。
编译工具链演进(可作为版本指纹快速识别):v1.21.0 使用 go1.15.7/1.15.8 过渡并正式切换到 Golang 1.16(后续补丁持续追平小版本:v1.21.1 → 1.16.3/1.16.4,v1.21.2 → 1.16.5,v1.21.3 → 1.16.6,v1.21.4 → 1.16.7,v1.21.5 → 1.16.8,v1.21.6 → 1.16.9,v1.21.7 → 1.16.10/1.16.11/1.16.12,v1.21.9 → 1.16.13/1.16.14,v1.21.11 → 1.16.15)。
二、v1.21.0 主题特性(What's New Major Themes)
CHANGELOG 的 “What's New (Major Themes)” 章节列出了 10 个官方主题,以下逐一展开,并尽量给出仓库内源码印证。
2.1 PodSecurityPolicy 进入弃用轨道
PSP 作为准入控制器资源被正式弃用:已部署的 PodSecurityPolicy 可继续工作到 1.25(其目标移除版本)。官方以工作名 “PSP replacement policy” 的新特性(KEP-2579)承接安全策略能力。CHANGELOG 中对应的条目为:“The PodSecurityPolicy API is deprecated in 1.21, and will no longer be served starting in 1.25.”。这是一个跨越多个小版本的弃用周期起点,升级团队需要在此版本之后规划 Pod 安全标准(Pod Security Admission 的前身)迁移。
2.2 kubectl 内置 Kustomize 从 v2.0.3 跃升到 v4.0.5
kubectl kustomize {arg}与kubectl apply -k {arg}两个命令的代码被替换为与 kustomize CLI v4.0.5 相同的实现,且 Kustomize 从此被当作库依赖引入(Dependencies 的 Added 部分新增了sigs.k8s.io/kustomize/api: v0.8.5、sigs.k8s.io/kustomize/kustomize/v4: v4.0.5等,同时 Removed 中移除了旧的sigs.k8s.io/kustomize: v2.0.3+incompatible)。v1.21.1 进一步将 kustomize 相关依赖升级到 v4.1.2。这意味着kubectl apply -k的行为与独立 kustomize v4 CLI 对齐,脚本中依赖旧版 kustomize 语义的用法需要复核。
2.3 默认容器注解(Default Container Annotation)
多容器 Pod 可用kubectl.kubernetes.io/default-container注解为 kubectl 命令预置默认容器;此外还引入了kubectl.kubernetes.io/default-exec-container注解供 exec 类命令使用(对应 KEP-2227)。这解决的是kubectl logs/exec/attach在多容器 Pod 中必须手动-c指定容器的痛点。
2.4 Immutable Secrets 与 ConfigMaps 毕业到 GA
Immutable Secrets/ConfigMaps 在本版本提升为 Stable:在 Secret 或 ConfigMap 对象上设置immutable字段即可声明其内容在对象生命周期内不可变。对这类对象,kubelet 不再 watch/poll 变更,从而降低 apiserver 负载。
仓库源码可以直接印证该字段已是一等公民:staging/src/k8s.io/api/core/v1/types.go 中 Secret 定义为
// Immutable, if set to true, ensures that data stored in the Secret cannot // be updated (only object metadata can be modified). // If not set to true, the data field can be updated at any time. // ... Immutable *bool `json:"immutable,omitempty" protobuf:"varint,5,opt,name=immutable"`ConfigMap 在同文件中(约 L8441-L8446)有完全对称的Immutable *bool字段。升级实践上:将静态凭证类 Secret 标记为 immutable 后,任何kubectl edit secret的数据修改都会被 API 层拒绝,可用于防止误改。
2.5 Kubelet 结构化日志(Structured Logging)
Kubelet 在本版本全面采用结构化日志,这是整个项目结构化日志改造的关键一环。CHANGELOG 的 beta/rc 章节记录了大量 “Migrate pkg/kubelet/... to structured logging” 条目(kubelet.go、kuberuntime、prober、cm/cpuset、pluginmanager、stats、eviction 等包逐批迁移)。需要注意两个附带影响:
- 部分组件退出码从 255 变为 1(如 cpuset.go 迁移条目注明 “Exit code changed from 255 to 1”);
- 日志文本格式变化,基于旧日志格式的解析脚本/告警需要更新。
2.6 存储容量跟踪(Storage Capacity Tracking)
此前调度器默认假设“到处都有无限容量的持久存储”。CSIStorageCapacity 特性(本版本毕业 Beta 并默认开启)为 CSI 驱动提供上报可用容量的 API,调度器在选节点时会参考剩余容量。storage.k8s.io/v1alpha1/VolumeAttachment与storage.k8s.io/v1alpha1/CSIStorageCapacity对象随之弃用。该特性被官方定位为支持本地卷等容量受限卷类型的动态供给的基石,并伴随新指标ephemeral_volume_controller_create[_failures]_total(kube-controller-manager)。
2.7 通用临时卷(Generic Ephemeral Volumes)进入 Beta
Generic ephemeral volumes 允许任意支持动态供给的存储驱动以“生命周期绑定到 Pod”的临时卷形式使用,可作为不同于根盘的 scratch 存储(如持久内存、独立本地盘)。它支持 StorageClass 全部供给参数,以及 PVC 支持的全部能力:容量跟踪、快照与恢复、卷扩容。相关联动变更包括:PSP 仅在 GenericEphemeralVolume 特性门开启时把 “generic” 记为允许的卷类型;apiserver 修复了“特性关闭时更新带通用临时卷的 Pod 会丢掉该卷”的缺陷。
2.8 CSI Service Account Token 进入 Beta
该特性默认开启,让 CSI 驱动能够拿到 Pod 的 bound service account token(有时效、自动刷新、Pod 删除后失效),改善了驱动调外部 API 的安全姿态,并提供了一个重新发布卷的开关用于刷新短生命周期卷。仓库 pkg/features/kube_features.go 中可以看到其后继门CSIServiceAccountTokenSecrets的注册形态,印证该特性族在特性门体系中的延续。
2.9 CSI 健康监控第二次 Alpha
CSI health monitoring 以第二次 Alpha 形式发布:CSI 驱动可将底层存储系统的卷异常条件上报给 Kubernetes,以事件形式报告在 PVC 或 Pod 上。同版本还 “Enables Kubelet to check volume condition and log events to corresponding pods”,即 kubelet 侧开始消费卷条件并记录事件,构成“驱动上报 → 控制器记录 → kubelet 呈现”的完整链路雏形。
2.10 其他值得注意的主题
- Kubelet Graceful Node Shutdown毕业 Beta 并默认开启:节点关机期间同步节点状态,并新增 Pod 准入处理器拒绝向关机中节点调度新 Pod;
- EndpointSlice / Endpoints 控制器 GA:EndpointSlice API 毕业 GA,v1alpha1 移除,topology 字段从 GA API 中移除并由每个 Endpoint 的 Zone 字段替代(旧 topology 会转换为注解);
- CronJob 提升到 batch/v1,
batch/v2alpha1的类型定义与客户端被弃用移除; - audit.k8s.io/v1beta1 与 v1alpha1 弃用,1.24 前必须迁移到 v1.13 起可用的
audit.k8s.io/v1; - kubeadm内置 CoreDNS v1.8.0、etcd v3.4.13、支持证书链校验(外部 CA 模式可用中间 CA)、
kubeadm alpha kubeconfig user毕业为kubeadm kubeconfig user等。
三、紧急升级注意事项(Urgent Upgrade Notes)
CHANGELOG 以 “(No, really, you MUST read this before you upgrade)” 为标题的段落集中了必须人工评估的变更:
- kube-proxy IPVS 不再设置
net.ipv4.conf.all.route_localnetsysctl。升级节点上该值仍为 1,新节点则继承系统默认(通常为 0)。如果你的行为依赖该参数,必须自行确保其为 1——kube-proxy 不再自动设置。此变更也是 CVE-2020-8558 缓解的一部分。 - kubeadm init 时空的 cgroupDriver 默认设为 systemd。存量机器必须把容器运行时配置为 systemd 驱动;
kubeadm upgrade保留旧值,但该默认化在 1.22 也会应用到 upgrade 路径。 - EBS / OpenStack Cinder / gce-pd 新供给的 PV 不再打
failure-domain.beta.kubernetes.io/zone、failure-domain.beta.kubernetes.io/region标签,改为 GA 的topology.kubernetes.io/zone与topology.kubernetes.io/region。依赖旧标签做拓扑约束/打标的存储与调度策略需要同步更新。 - OpenStack Cinder CSI 迁移默认开启:Cinder 卷要工作必须在 OpenStack 集群上安装 Cinder CSI 驱动。
CSIMigrationXXCompletealpha 标志移除,新增InTreePluginXXUnregisteralpha 标志;CSIMigrationvSphereComplete弃用并将在 1.22 移除。- 存储指标调整:
storage_operation_errors_total未删除而是标记 deprecated(storage_operation_status_count同样标记 deprecated),两者等价计数可通过storage_operation_duration_seconds(配合status=fail-unknown)恢复。 ServiceNodeExclusion、NodeDisruptionExclusion、LegacyNodeRoleBehavior毕业 GA:前两者无条件开启,后者无条件关闭。为防止控制面节点被自动加入负载均衡,升级用户需要给控制面节点打node.kubernetes.io/exclude-from-external-load-balancers标签(kubeadm 在 init/join/upgrade 时会自动加,可手动移除以选择退出)。- 静态 Pod 的 UID 计算方式变化:原地从 1.20 升级到 1.21 的 kubelet 会导致所有静态 Pod 容器重建/重启;官方支持的跨小版本升级路径是“先排空 Pod 再升级 kubelet”。
- gce-pd 新 PV 不再有 beta FailureDomain 标签(同上第 3 点的 gce 版本)。
四、v1.21.0 关键 API 变更与源码印证
除主题特性外,“Changes by Kind → API Change” 是数量最多的变更区,挑选影响面最大者:
4.1 Service:InternalTrafficPolicy 与 loadBalancerClass
- 新增
spec.internalTrafficPolicy字段:Cluster(默认,内部流量路由到所有端点)与Local(只路由到节点本地端点,无本地就绪端点则丢流量); - 新增
spec.loadBalancerClass,允许 Service 指定自定义负载均衡器实现。
仓库 staging/src/k8s.io/api/core/v1/types.go 中可以看到该类型的当前形态:
// ServiceInternalTrafficPolicy describes how nodes distribute service traffic they // receive on behalf of a service. type ServiceInternalTrafficPolicy string const ( // ServiceInternalTrafficPolicyCluster routes traffic to all endpoints. ServiceInternalTrafficPolicyCluster ServiceInternalTrafficPolicy = "Cluster" // ServiceInternalTrafficPolicyLocal routes traffic only to endpoints on the same node. ServiceInternalTrafficPolicyLocal ServiceInternalTrafficPolicy = "Local" )以及LoadBalancerClass *string与InternalTrafficPolicy *ServiceInternalTrafficPolicy在 ServiceSpec 中的定义(约 L6493-L6502)。同期topologyKeys字段被弃用,其能力由 Topology Aware Subsetting 与 Service Internal Traffic Policy 后续工作替代。
4.2 Job:Indexed Job 与 suspend
spec.completionMode:取值NonIndexed(默认)与Indexed(当 0..(completions-1) 索引的 Pod 全部成功时 Job 完成),alpha 字段,需IndexedJob特性门;spec.suspend:新增 alpha 字段,配合SuspendJob特性门可暂停/恢复 Job;batch/v1类型在仓库 staging/src/k8s.io/api/batch/v1 目录中的生成代码里可看到Suspend与CompletionMode字段均已编入 protobuf 序列化逻辑,说明这两个字段随 batch/v1 正式落库。
4.3 网络与调度
- NetworkPolicy 支持
endPort(端口范围); - Topology Aware Hints 以 alpha 提供,由
TopologyAwareHints特性门控制; - Service 注解
service.kubernetes.io/topology-aware-hints在 v1.21.1 起接受"Auto"取值; - EndpointSlice 最大端口数从 100 提升到 20,000;Endpoints 超过 1000 地址时控制器打上
endpoints.kubernetes.io/over-capacity: warning注解; - kubectl exec/port-forward 启用了 SPDY ping 保活,长连接不再轻易中断。
已知问题:v1.21.0 的TopologyAwareHints特性门在多数场景下会回落到默认行为——开启它只是往 EndpointSlice 加 hints,实际效果仅见于非双栈 kube-proxy 实现;该问题由 v1.21.1 的 “Adds node event handlers to dual stack kube-proxy implementation to fix Topology Aware Hints” 修复。使用 hints 的用户应至少升级到 v1.21.1。
4.4 kube-apiserver / kubelet 安全与可观测配置
- 新增
--permit-address-sharing标志(SO_REUSEADDR),允许通配与具体 IP 并行监听,减少 TIME_WAIT 等待从而缩短重启时间; - kubelet 可配置
enableProfilingHandler/enableDebugFlagsHandler关闭/debug/pprof与/debug/flags/v(二者设为 true 的前提是enableDebuggingHandlers也为 true); - 新准入控制器
DenyServiceExternalIPs:不需要externalIPs的集群应启用它以收紧安全面; --disabled-metrics=metric1,metric2允许显式禁用指标(v1.21.7 修复了该标志不生效的 bug);--lease-reuse-duration-seconds、--strict-transport-security-directives等新标志;- BoundServiceAccountTokenVolume 毕业 Beta:容器内
/var/run/secrets/kubernetes.io/serviceaccount/token变为有时效、自动刷新、Pod 删除即失效;客户端建议每分钟重读;可用serviceaccount_stale_tokens_total监控仍依赖延长效期的负载,确认无依赖后以--service-account-extend-token-expiration=false将注入 token 寿命缩短到 1 小时。
4.5 被移除/弃用的能力清单(升级检查表)
export查询参数彻底移除,请求携带它将收到 400;kubectl alpha debug移除,改用kubectl debug;kubectl run移除--generator/--replicas/--service-generator/--service-overrides/--schedule,并弃用--serviceaccount/--hostport/--requests/--limits;- kube-proxy 移除
--cleanup-ipvs,--cleanup恒定 flush IPVS; - kubeadm 移除
alpha selfhosting pivot与alpha certs(改用kubeadm certs);ClusterConfiguration.dns.type: kube-dns直接报错; - 调度指标
scheduling_algorithm_preemption_evaluation_seconds、binding_duration_seconds移除,建议用scheduler_framework_extension_point_duration_seconds; etcd_object_counts更名apiserver_storage_object_counts并标记 stable;apiserver_request_total提升 stable 且不再带 content-type 维度(依赖该维度的告警/图表会失效);- 构建层面:移除 bazel 构建支持与 docker-machine/远程 docker 构建支持;
- dockershim 相关 kubelet 命令行标志开始显示弃用提示。
五、v1.21.5 安全修复:CVE-2021-25741
v1.21.5 的 “Important Security Information” 章节是该系列唯一的安全公告,内容必须完整掌握:
- 漏洞:CVE-2021-25741 “Symlink Exchange Can Allow Host Filesystem Access”——攻击者可构造带subpath 卷挂载的容器,借助符号链接交换访问卷之外的文件与目录,包括宿主机文件系统;
- 受影响版本:kubelet v1.22.0 - v1.22.1、v1.21.0 - v1.21.4、v1.20.0 - v1.20.10、以及 ≤ v1.19.14;
- 修复版本:v1.22.2、v1.21.5、v1.20.11、v1.19.15;
- 评级:CVSS 3.0 高危 8.8(AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H);
- 报告人:Fabricio Voznika 与 Mark Wolters(Google)。
同版本还合入了一批与挂载/网络相关的加固修复,如 “Pass additional flags to subpath mount to avoid flakes in certain conditions”,与上述漏洞同属 subpath 挂载攻击面。若集群中存在使用subPath的 Pod(尤其是不可信用户可提交 Pod 的场景),升级到 v1.21.5+ 是硬性要求。
六、v1.21.1 ~ v1.21.14 补丁版本演进
以下按“版本 → 关键变更 → 升级建议”归纳,全部条目均可在 CHANGELOG/CHANGELOG-1.21.md 对应章节核对。
6.1 v1.21.1(首个补丁版)
- API:
topology-aware-hints注解接受Auto;新增 P&F 规则豁免/readyz、/healthz、/livez探针,避免 kubelet 重启健康的 kube-apiserver 实例; - 修复:双栈 kube-proxy 补上 node 事件处理器修复 Topology Aware Hints(对应 v1.21.0 已知问题);startupProbe 在容器首次重启后失效的修复;port-forward 长连接内存泄漏修复;EndpointSlice IP 校验与 Endpoints 对齐;
- 依赖:kustomize 全家桶升级到 v4.1.x(
kustomize/kustomize/v4: v4.0.5 → v4.1.2)。
6.2 v1.21.2
- 修复 systemd cgroup driver 下的资源强制、cgroup v2 + systemd 处理;
- Endpoints 镜像为 NotReady 的端点被错误镜像为 Ready 的 bug 修复;调度器抢占者幽灵 Pod 修复;
- kubeadm:etcd 静态 Pod 移除
ephemeral-storagerequest(规避 LocalStorageCapacityIsolation 下的 cadvisor 问题);自定义 CoreDNS 镜像仓库拼接逻辑恢复(clusterConfiguration.dns.imageRepository需含嵌套路径,如registry.company.xyz/coredns→.../coredns/coredns); - 注意:portforward 清理的修复因引入 segfault 回归被回退。
6.3 v1.21.3
- 调度器改用 pod status 的 merge patch(替代整 Pod 更新),并修复
NodeResourcesMostAllocated/NodeResourcesBalancedAllocation在“无 requests 容器”节点上的打分(该修复后因引入意外行为在 v1.21.6 被回退); - 大量 Azure(VMSS/NSG/路由清理)与 vSphere 回归修复;调度器抢占时 extender 未被调用的修复。
6.4 v1.21.4
- kube-apiserver 弃用的
/api/<version>/watch/...路径指标修复; - Pod defaulting 在无关 Pod 间泄漏的修复;Service websocket watch 超时不关闭的修复;不可解析
status.certificate的 CSR 清理问题修复; - 调度器抢占未调用 extender 的修复(#103019)。
6.5 v1.21.5(安全版,见上文第五节)
另有:kube-proxy 清理 LB 入口 IP 的过期 conntrack UDP 条目;cgroup v1 + systemd 下偶发 Pod cgroup 冻结与 “unit already exists” 修复;kubectl replaceService 时自动沿用原对象分配的clusterIP/nodePort(免去 read-modify-write);apiserver 对空闲 keep-alive 连接与请求头读取时间设定上限。依赖层面 runc 升级到 v1.0.2。
6.6 v1.21.6
- 回退v1.21.3 引入的“均衡资源分配”意外调度行为(#105238 revert #102925)——这是补丁版“修修复”的典型案例;
- klog 升级 v2.9.0(修复渲染为字节数组的日志行);golang.org/x/text 升级修复 CVE-2020-28852;
- CRD schema 中字面 null enum 值处理修复;重启时日志文件覆盖的 kubelet 修复。
6.7 v1.21.7
- 基础镜像 CVE 修复:debian-base v1.9.0、debian-iptables v1.6.7、setcap v2.0.4;
--disabled-metrics标志失效修复;并发 map 访问导致 kube-apiserver 记录超时 API 调用时 panic 的修复;- EndpointSlice Mirroring 控制器在 Service 增加 selector 时清理受管 EndpointSlice;
- Windows 支持超过 100 个磁盘挂载;kubelet 离线期间 Pod 删除导致的 FibreChannel 卷损坏修复(错误后重试设备清理)。
6.8 v1.21.8
- kubeadm
certs check-expiration两项改进:检查 kubeconfig 中托管证书时不再强制要求集群 CA key(ca.key)存在;etcd CA 在缺少 etcd/ca.key 时按外部 CA 处理并正确校验签名证书,且输出表中所有条目(磁盘证书与 kubeconfig 证书)都包含 CA 信息; - CSI 驱动失败后 SELinux 重标注修复;
- 调度器 assumed pod 等待 nodeName 更新的时间从 30s 放宽到 2min(缓解大规模集群下假设 Pod 超时)。
6.9 v1.21.9
- Server Side Apply 合并列表时优先采用提交请求的次序而非已持久化对象次序;
- EndpointSlice 控制器 metrics cache 的锁重构(大 Service 数集群中网络编程延迟显著降低);
- client-go 分页 list 带
ResourceVersionMatch在启用分页后失败的修复; kubectl create secret非法输出格式 panic 修复;mount-utils 检测潜在 stale file handle;- konnectivity-network-proxy 升级 v0.0.27(内存泄漏修复)。
6.10 v1.21.10
- daemonset 控制器对 status 更新冲突的重试修复;
- Azure CSI 迁移的 volumeid 冲突与“删除不存在磁盘”修复;
- Go 1.16.13 → 1.16.14。
6.11 v1.21.11
- API 回归修复:v1beta1 PodDisruptionBudget 对
selector字段的 strategic merge patch 行为在 1.21 被错误改成“整 selector 替换”(v1beta1 应保持“合并 matchLabels、替换 matchExpressions”的旧语义;v1 与 SSA 的整替换语义才是正确的)——本版本为 v1beta1 恢复旧行为; - kube-apiserver goroutine 泄漏修复(konnectivity-client 升级 v0.0.30);EndpointSlice 部分更新丢失 nodeName 的修复;kubelet inotify 子系统内存使用修复;
- Go 1.16.15。
6.12 v1.21.12
- kubectl 下游包共用的方法错误处理修复;
- kube-scheduler 不再为已删除或已调度到节点的 Pod 提名(nominating)节点。
6.13 / 6.14 v1.21.13、v1.21.14
- v1.21.13:修复多调度插件下的事件注册——该问题可能导致不可调度 Pod 重新入队出现显著延迟;InTree AzureFile PV 在未定义 secret namespace 时启用 CSI 迁移后可从 ClaimRef 获取 namespace;
- v1.21.14:无任何代码变更(Changelog 各节均为 “Nothing has changed.”),属维护性收尾版本。
6.15 补丁版选型建议
- 所有 1.21 存量集群的最低线是 v1.21.5(CVE-2021-25741 修复);
- 使用 v1beta1 PDB + strategic merge patch 的集群建议v1.21.11+;
- 大规模集群关注调度器重排队延迟问题建议v1.21.13+;
- 追求完整修复面可直接采用系列最终版v1.21.14。
七、下载工件与校验方式
CHANGELOG 每个版本章节的 Downloads 表给出了可审计的发布工件清单(以 v1.21.0 为例):
| 工件类别 | 典型文件 | 说明 |
|---|---|---|
| Source Code | kubernetes.tar.gz/kubernetes-src.tar.gz | 发布版与源码版包,均附 sha512 |
| Client Binaries | kubernetes-client-{darwin\|linux\|windows}-{amd64\|arm64\|386\|arm\|ppc64le\|s390x}.tar.gz | 含 kubectl 等客户端,darwin/arm64 自 v1.21 起新增 |
| Server Binaries | kubernetes-server-linux-{amd64\|arm\|arm64\|ppc64le\|s390x}.tar.gz | kube-apiserver、kube-controller-manager、kube-scheduler 等 |
| Node Binaries | kubernetes-node-linux-{...}.tar.gz、kubernetes-node-windows-amd64.tar.gz | kubelet、kube-proxy 等 |
| Container Images | k8s.gcr.io/kube-apiserver:v1.21.x、kube-controller-manager、kube-proxy、kube-scheduler、conformance | manifest list 多架构,支持-amd64、-arm64等-$ARCH后缀直接拉取指定架构 |
每个二进制条目均附 sha512 hash,下载后可用sha512sum校验完整性。容器镜像章节的原文说明:
All container images are available as manifest lists and support the described architectures. It is also possible to pull a specific architecture directly by adding the "-$ARCH" suffix to the container image name.
这为 ARM64 集群(v1.21 起 node 工件支持 arm64 安装)与多架构混合部署提供了直接拉取路径。
八、总结与升级路径建议
- v1.21.0 是特性版本:PSP 弃用启动、Immutable Secret/ConfigMap GA、EndpointSlice GA、CronJob batch/v1、Service
internalTrafficPolicy/loadBalancerClass、CSI 存储容量跟踪 Beta、通用临时卷 Beta、kubelet 结构化日志、kube-proxy IPVS 与 cgroup driver 默认值变化——这些决定了它是 1.2x 系列中“必读升级说明”的版本; - v1.21.5 是安全门槛:CVE-2021-25741(CVSS 8.8,subpath 挂载符号链接逃逸到宿主文件系统)修复,凡使用 subPath 的集群必须跨越此线;
- v1.21.11 是 API 语义门槛:v1beta1 PDB 的 patch 行为回归修复;
- v1.21.14 是系列终点:依赖此分支做 CVE 复核与长周期维护收尾,但无任何代码变更,升级窗口可任意选择;
- 变更核验一律以 CHANGELOG/CHANGELOG-1.21.md 为准——注意本小节链接路径请以仓库根目录
CHANGELOG/CHANGELOG-1.21.md为准确;特性在代码中的落点可对照 staging/src/k8s.io/api/core/v1/types.go、staging/src/k8s.io/api/batch/v1 与 pkg/features/kube_features.go 中的字段与特性门定义逐一确认。
(完)
【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考