直接给结论:首选 Ubuntu 22.04 LTS (Jammy Jellyfish),次选 Ubuntu 24.04 LTS (Noble Numbat)。
别去碰 20.04 了,除非你有极其特殊的遗留系统兼容性包袱。也别在生产环境随意尝试非 LTS 版本(如 23.10),那是给尝鲜玩家准备的,不是给运维背锅侠准备的。
下面从几个核心维度拆解为什么这么选,以及你在实际落地时需要注意的“坑”。
1. 内核与硬件支持:LTS 是底线
Docker 和 Kubernetes 对 Linux 内核的特性依赖很重,尤其是 cgroups v2、eBPF 和网络命名空间的管理。
- Ubuntu 22.04 LTS:搭载 Linux Kernel 5.15。这个版本非常成熟,社区验证充分,对绝大多数云厂商(阿里云、腾讯云、AWS、Azure)的实例类型支持完美。它的稳定性经过了多年生产环境的考验,Bug 率极低。
- Ubuntu 24.04 LTS:搭载 Linux Kernel 6.5+。如果你跑的是最新一代的云服务器(比如基于 ARM Graviton 3 或者最新的 x86 Genoa/Strix 架构 CPU),24.04 的内核能更好地利用新硬件特性(如更好的 NUMA 感知、更高效的调度)。但要注意,部分较旧的第三方容器网络插件或存储驱动可能在 6.x 内核上需要重新编译或更新版本。
避坑指南:千万不要为了追求“最新”而去用 23.10 或 24.10。Kubernetes 官方对非 LTS 发行版的支持周期很短,一旦中间版本停止维护,你的集群升级路径会断掉,到时候排查问题能把你逼疯。
2. 包管理与依赖冲突:Debian 系的优势
Ubuntu 基于 Debian,这意味着 apt 包管理器是你最好的朋友。相比 CentOS/RHEL 系列,Ubuntu 的软件源更新更快,且默认开启了 unattended-upgrades 的安全补丁自动更新机制。
- Docker CE:在 Ubuntu 上安装 Docker 官方仓库是最稳妥的方式。
docker-ce包与 Ubuntu 的系统库兼容性最好,很少出现因为 glibc 版本差异导致的二进制文件报错。 - Kubernetes:虽然 K8s 本身不绑定 OS,但其组件(kubelet, kubeadm, kubectl)在 Ubuntu 上的初始化脚本(init scripts)和社区提供的 Ansible/Terraform 模板覆盖率最高。你遇到的 90% 的问题,网上都有现成的 StackOverflow 答案是基于 Ubuntu 的。
3. 云厂商的“潜规则”与镜像优化
在国内主流云厂商(阿里云、腾讯云、华为云等)中,Ubuntu 镜像通常经过深度定制:
- 云助手与元数据服务:Ubuntu 官方镜像默认可能没有预装某些云厂商特有的 Agent,但社区版的 Cloud-Init 配置非常完善。相比之下,CentOS Stream 在某些云上已经不再提供最新镜像,或者更新滞后。
- 安全组与防火墙:Ubuntu 默认使用
ufw(Uncomplicated Firewall),配置简单直观。对于新手来说,比理解 iptables/nftables 的复杂规则要友好得多。但在高并发场景下,建议直接使用云厂商的安全组(Security Group)来管理端口,而不是在 OS 内部层做太多限制,减少性能损耗。
4. 实际部署建议:如何避免“翻车”
既然决定了用 Ubuntu,以下几个实操细节决定了你是“优雅运维”还是“半夜报警”:
A. 禁用 Swap(交换分区)
这是 Kubernetes 的硬性要求。Kubelet 默认会拒绝在启用 Swap 的节点上启动。
# 临时禁用
sudo swapoff -a
# 永久禁用(修改 /etc/fstab,注释掉 swap 行)
sudo sed -i '/swap/s/^/#/' /etc/fstab
注意:如果内存确实不够,不要靠 Swap 续命,而是加机器或扩容内存。Swap 会导致严重的 IO 延迟,直接影响 Pod 的响应时间。
B. 调整 sysctl 参数
为了让 CNI(容器网络接口)和 kube-proxy 工作得更顺畅,建议在 /etc/sysctl.d/99-kubernetes.conf 中添加:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
然后执行 sudo sysctl --system 生效。这一步经常被忽略,导致 Pod 之间无法通信。
C. 选择合适的 CRI(容器运行时)
现在默认推荐 containerd 作为底层运行时,而不是老牌的 docker shim(后者已在 K8s 1.24+ 移除)。
Ubuntu 22.04/24.04 默认已集成 containerd。确保你安装的 Docker 版本是最新的,并且配置了正确的 systemd socket。
D. 日志轮转(Log Rotation)
Docker 和 K8s 会产生大量日志。如果不配置 logrotate,磁盘很快会被写满,导致节点宕机。
# 示例:在 /etc/docker/daemon.json 中限制单个容器日志大小
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
总结
| 维度 | 推荐选择 | 理由 |
|---|---|---|
| 操作系统版本 | Ubuntu 22.04 LTS | 生态最成熟,文档最全,云厂商支持最好,风险最低。 |
| 备选版本 | Ubuntu 24.04 LTS | 适合新项目,硬件支持更好,但需确认所有第三方插件兼容性。 |
| 内核版本 | 5.15+ (22.04) / 6.5+ (24.04) | 必须大于 5.0,以支持现代容器特性。 |
| 绝对避免 | CentOS 7/Stream, Ubuntu 非LTS | CentOS 已死,非LTS 版本无长期支持,出事没人管。 |
最后一句忠告:不管选哪个版本,保持内核和基础软件的定期更新是关键。Ubuntu 的 apt upgrade 比 RHEL 系的 yum update 更流畅,善用这个优势,定期打补丁,能省去 80% 的安全漏洞排查时间。
云技术博客