努力
加油

Ubuntu 22.04相比20.04在内核和软件支持上有哪些更新?

Ubuntu 22.04 LTS (Jammy Jellyfish) 相比 20.04 LTS (Focal Fossa),在底层内核和上层软件栈上确实有几处比较显著的“硬”变化。如果你是从 20.04 升级或者新部署,以下几个点是最值得关注的:

1. 内核版本:从 5.4 到 6.x(HWE 栈的变化)

这是最核心的区别,也是影响硬件兼容性和性能的关键。

  • 20.04:默认搭载的是 Linux Kernel 5.4。这是一个非常稳定的 LTS 内核,但在对较新硬件(如 Intel 11th/12th Gen CPU、新网卡、NVMe 控制器)的支持上相对保守。虽然可以通过 HWE (Hardware Enablement) 栈升级到更新的 5.15 内核,但默认出厂镜像依然是 5.4。
  • 22.04:默认搭载的是 Linux Kernel 5.15,并且通过 HWE 栈支持最新的 6.2/6.5+ 系列内核。
    • 意义:6.x 系列内核引入了更完善的 BPF(Berkeley Packet Filter)支持、更好的调度器优化以及更广泛的 ARM64 架构支持。对于跑在云服务器上的业务来说,这意味着更好的 I/O 性能和网络吞吐潜力,尤其是在使用最新一代实例规格时。
    • 注意:如果你依赖某些闭源驱动(比如旧版 NVIDIA 显卡驱动或某些专有无线网卡驱动),请务必检查驱动是否支持 6.x 内核,否则可能会遇到编译失败的问题。不过对于服务器场景,这通常不是问题。

2. 编译器与基础库:GCC 11 和 Glibc 2.35

开发环境的基础工具链升级了,这对编译大型项目(如数据库、大数据组件)有影响。

  • GCC:从 9.x 升级到了 GCC 11。GCC 11 改进了 C++20 的支持,并优化了代码生成效率。
  • Glibc:从 2.31 升级到了 2.35。新版 glibc 移除了一些已废弃的 API,强化了安全性(如 PIE 默认开启)。
  • Python:默认版本从 Python 3.8 升级到了 Python 3.10。Python 3.10 在性能上有小幅提升,且语法上增加了一些新功能(如 match-case 语句)。如果你的项目强依赖 Python 3.8 或 3.9,可能需要调整虚拟环境配置。
  • Node.js:官方仓库中 Node.js 的版本也更新到了较新的 LTS 版本(目前通常是 18.x 或更高,取决于具体源配置),比 20.04 时期的 14.x/16.x 有显著代差。

3. 容器化支持:Docker 与 Podman 的生态变化

在云原生领域,Ubuntu 22.04 对容器运行时有了更明确的支持倾向。

  • Docker:依然支持,但 Docker 官方现在更推荐使用其自己的安装脚本或 APT 仓库,而不是依赖 Ubuntu 自带的 snap 包。值得注意的是,Ubuntu 22.04 默认启用了 systemd-cgroup 作为 cgroup v2 的管理器,这与 Docker 和 Kubernetes 的现代实践更契合。
  • Podman:作为无守护进程的容器引擎,在 22.04 中的集成度更高,适合那些担心 rootless 容器安全性的用户。
  • cgroup v2:22.04 默认启用 cgroup v2,而 20.04 是混合模式或默认 v1。cgroup v2 提供了更清晰的层级管理和更好的资源隔离,对于 K8s 节点来说,这是必须适配的环境。如果你的老应用依赖 cgroup v1 的路径或权限模型,需要做迁移测试。

4. 安全模块:AppArmor 和 SELinux 的强化

  • AppArmor:22.04 进一步强化了 AppArmor 的策略默认设置。例如,对 /usr/bin/docker 等常见应用的 profile 更加严格。这在一定程度上减少了因容器逃逸导致的安全风险,但也可能导致一些老旧容器内的进程被意外阻断,需要关注日志。
  • SELinux:虽然 Ubuntu 默认不启用 SELinux(主要用 AppArmor),但 22.04 提供了更好的 SELinux 支持选项,以便用户在需要时切换。

5. 网络栈:eBPF 的初步落地

  • 22.04 开始更深入地整合 eBPF 技术。这对于使用 Cilium、Istio 等基于 eBPF 的网络插件的 Kubernetes 集群来说,是一个重大利好。eBPF 允许在内核空间中运行沙箱程序,用于网络监控、流量控制和安全策略,无需修改内核源码。
  • 相比之下,20.04 虽然也支持 eBPF,但内核版本较低,功能受限较多。

6. 云服务厂商的适配情况(以阿里云、腾讯云为例)

在国内主流云厂商中,Ubuntu 22.04 的镜像已经成熟:

  • 阿里云:提供 Ubuntu 22.04 公共镜像,预装了最新的 cloud-init 和 aliyun-service,对 ECS 实例的元数据服务支持更好。
  • 腾讯云:同样提供完整支持的镜像,CVM 实例启动速度和网络配置自动化方面做了优化。
  • 华为云:针对鲲鹏架构(ARM64)的 Ubuntu 22.04 镜像支持更为完善,因为 22.04 对 ARM 生态的支持力度更大。

总结建议

  • 如果你是新用户:直接选择 Ubuntu 22.04。它提供了更好的硬件兼容性、更现代的软件栈和更强的云原生支持。
  • 如果你是从 20.04 升级:
    • 生产环境谨慎操作:先备份,再测试。重点检查你的应用程序是否依赖特定版本的 GCC/Glibc,以及是否有闭源驱动需求。
    • 关注 cgroup v2:确保你的容器编排系统(K8s, Docker Swarm)和监控工具(Prometheus, cAdvisor)支持 cgroup v2。
    • 内核回滚:如果升级后遇到硬件兼容性问题,可以在 GRUB 菜单中选择旧版内核启动,然后排查问题。

总的来说,Ubuntu 22.04 是一次面向“未来几年”的稳定发布,它在保持 LTS 稳定性的同时,引入了更多现代 Linux 特性,特别适合云计算和容器化场景。