K8s更新有哪些变化

wen IT资讯 6

本文目录导读:

K8s更新有哪些变化

  1. 核心架构与组件变化
  2. 资源对象与 API 版本变化
  3. 调度与资源管理变化
  4. 安全与认证授权变化
  5. 存储变化
  6. 网络变化
  7. 集群运维与工具变化
  8. 关键变化示例(近几个版本)
  9. 如何应对更新?

Kubernetes(K8s)的更新是一个高频且关键的操作,其变化主要体现在架构、资源对象、调度、安全、存储以及运维工具等多个方面,由于 K8s 每三个月发布一个大版本(如 v1.28、v1.29、v1.30),每次更新都会引入新功能、废弃旧功能或修改默认行为。

下面从几个核心维度总结 K8s 更新的主要变化:

核心架构与组件变化

  • 控制面组件升级
    • kube-apiserver:API 版本变更(autoscaling/v2 成为稳定版),新的准入控制器(Admission Controller)被引入或默认启用。
    • kube-controller-manager & kube-scheduler:引入新的控制器或调度策略(如 v1.28 引入的 NodeLogQuery、v1.29 引入的 ReadWriteOncePod 持久卷访问模式)。
    • kubelet:对 CRI(容器运行时接口)的依赖更强,逐步移除对 Docker 的直接支持(已通过 dockershim 在 v1.24 移除)。
  • node 节点:可能要求更新操作系统内核(如为了支持新的 cgroup v2、eBPF 特性)或新的 CNI 插件版本。

资源对象与 API 版本变化

这是最直接的变化,通常会影响 YAML 文件:

  • GA(稳定版):之前处于测试版(Beta)的功能升级为稳定版,意味着你需要更新 API 版本(如 batch/v1beta1 -> batch/v1)。
  • 弃用(Deprecated):某些老 API 版本被标记为弃用,将在未来几个版本中被移除。
    • 例子extensions/v1beta1 的 Ingress、DaemonSet 等已在较早版本中被移除。
    • 注意:每次更新前务必检查 Deprecated API Migration Guide
  • 新资源类型:新的对象类型被引入。
    • 例子ValidatingAdmissionPolicy(v1.28 稳定)、ResourceClaim(用于动态资源分配)、StorageVersionMigration

调度与资源管理变化

  • 调度框架:新的调度插件挂载点或默认调度器行为改变。
  • NUMA 感知:对多 CPU 和内存拓扑更智能的调度支持(Node Topology Manager 改进)。
  • 节点资源管理:引入或改进对 PodOverheadPodResource 的支持。
  • 公平调度:可能引入新的 Pod 分组调度策略(如 PodGroup)。

安全与认证授权变化

  • ServiceAccount:默认禁用了自动挂载服务账户令牌(automountServiceAccountToken: false 成为推荐配置)。
  • Pod Security Standards:现已被 Pod Security Admission(PSA)替代,PodSecurityPolicy(PSP)已在 v1.25 移除。
  • 证书轮换:kubelet 证书轮换行为可能改变。
  • OIDC:对 OIDC 组映射、身份验证器的改进。
  • CEL(Common Expression Language):在准入控制、ValidatingAdmissionPolicy、自定义资源(CRD)验证中更广泛应用 CEL 表达式。

存储变化

  • CSI(Container Storage Interface):成为唯一推荐的存储插件方式,in-tree(内嵌)存储驱动(如 AWS EBS、GCE PD)正在逐步迁移到 CSI 驱动(可能要求你安装 CSI 驱动)。
  • 卷快照VolumeSnapshotVolumeSnapshotClass API 进入稳定版。
  • Ephemeral Volume:内联临时卷(如 CSI 驱动的临时卷)更成熟。
  • ReadWriteOncePod:新的访问模式,确保一个卷只能被一个 Pod 挂载(v1.29 稳定)。

网络变化

  • Service 类型:可能对 ExternalNameNodePortLoadBalancer 行为有微调。
  • Ingressnetworking.k8s.io/v1 成为稳定版,networking.k8s.io/v1beta1 被移除。
    • 例子pathType 字段变为必填项。
  • Gateway API:作为下一代入口/服务网格标准快速发展,但更新通常通过 CRD 提供,而非内置。
  • IPv4/IPv6 双栈:更多功能进入稳定。

集群运维与工具变化

  • kubeadm:更新命令参数、默认配置(如 kubeadm initkubeadm upgrade 的行为变化)。
  • kubectl:新命令(如 kubectl debugkubectl events)或已有命令的输出格式变化。
  • 节点管理cordondrainuncordon 行为可能改变(v1.28 改变了 drain 的 Pod 驱逐行为)。

关键变化示例(近几个版本)

版本 主要变化
v1.30 引入 MatchLabelKeys 用于 Pod 拓扑分布约束;Pod Security Admission 默认开启;对 InPlace Pod Vertical Scaling 的 alpha 支持;节点日志查询功能增强。
v1.29 ReadWriteOncePod 进入稳定版;Job 对象引入 PodReplacementPolicyNodeExpansion 在 CSI 中稳定; SidecarContainers 成为 Beta。
v1.28 ValidatingAdmissionPolicy 进入稳定版;NodeLogQuery alpha;RecoverVolumeExpansionFailure alpha;ServiceAccountTokenNodeBinding alpha。
v1.27 移除 SelfLink 功能; SeccompDefault 进入稳定; StatefulSetPodIndexLabel;旧 API 版本(如 flowcontrol.apiserver.k8s.io/v1beta1)被移除。
v1.26 移除 CriExecProbeTimeout 等弃用功能; PodSecurity 默认启用; CSIInlineVolume GA; PDB(PodDisruptionBudget)支持 unhealthyPodEvictionPolicy

如何应对更新?

  1. 阅读 Release Notes:这是最重要的步骤,关注 Deprecation & RemovalNew FeaturesMajor Changes 章节。
  2. 更新工具链:先升级 kubectlhelm 等客户端工具,确保它们与新 API 版本兼容。
  3. 升级控制平面:先升级 Master 节点(控制平面),再逐个升级 Worker 节点。
  4. 更新 YAML 文件:使用 kubectl convertpluto 等工具检测并修复过时的 API 版本。
  5. 测试兼容性:在非生产环境(Dev/Staging)先升级,验证应用、监控、日志、网络、存储均正常工作。
  6. 关注 CVE 和安全公告:更新通常包含安全修复,跳过多个大版本更新风险较高,建议遵循 N-2 支持策略(即当前版本和最近两个版本)。

K8s 更新的核心变化是:

  • API 版本升级与移除(需要修改YAML)
  • 引入新的安全模型(PSA替代PSP)
  • CSI 成为存储标准(逐渐移除内嵌驱动)
  • 调度和资源管理更精细化(如NUMA、公平调度)
  • 运维工具的默认行为改变(如kubeadm,kubectl)

建议每次更新前,仔细阅读 官方变更日志升级说明,并利用 kubeadmupgrade 命令或商业发行版(如 Rancher、OpenShift)的自动化升级工具来降低风险。

抱歉,评论功能暂时关闭!