在阿里云 ECS(Elastic Compute Service)上运行 Docker 和 Kubernetes(如通过 ACK、K3s、或自建 K8s),对操作系统有明确且关键的要求。以下是分层说明,涵盖最低要求、推荐配置、兼容性注意事项及最佳实践:
✅ 一、基础前提:ECS 实例要求
- 实例规格:建议 ≥2 核 CPU + 4 GiB 内存(生产环境 Kubernetes 控制平面至少需 2C4G;Worker 节点根据负载调整)。
- 系统盘:≥40 GiB(Docker 镜像、容器层、K8s 组件日志等需充足空间)。
- 网络:确保 VPC 内网互通、安全组开放必要端口(如 6443、10250、2379/2380 等)。
✅ 二、操作系统要求(核心)
| 组件 | 官方支持的 Linux 发行版(x86_64 / ARM64) | 关键内核与依赖要求 |
|---|---|---|
| Docker | • CentOS 7.6+ / 8.x / Stream 8/9 • Alibaba Cloud Linux 2/3(强烈推荐) • Ubuntu 20.04 LTS / 22.04 LTS • Debian 10/11/12 • Rocky Linux 8/9 • Oracle Linux 7.9+/8.x |
• 内核 ≥ 3.10(但推荐 ≥ 4.18 或 ≥ 5.4) • 必须启用 cgroup v1 或 cgroup v2(Docker 20.10+ 支持 cgroup v2,但需确认 runtime 兼容)• overlay2 存储驱动(需内核支持 overlay 模块,≥ 4.0)• iptables(或 nftables,但需配置为 iptables 模式以兼容 kube-proxy) |
| Kubernetes(v1.25+) | • 同上主流发行版(Alibaba Cloud Linux 3 / Ubuntu 22.04 / CentOS Stream 8/9 最佳) • 不支持 Windows Server 作为节点(仅可作客户端) |
• 内核 ≥ 4.18(推荐 ≥ 5.4,尤其对 eBPF、cgroup v2、io_uring 等特性支持更佳) • systemd(K8s 组件(kubelet/kube-proxy)依赖 systemd 管理)• conntrack 工具(必须,用于网络连接跟踪)• ipset, iptables-nft 或 iptables-legacy(kube-proxy 依赖)• 禁用 swap( swapoff -a + /etc/fstab 注释 swap 行)• net.bridge.bridge-nf-call-iptables=1(启用网桥流量转发至 iptables) |
🔍 特别注意:
- CentOS 7:虽仍被部分旧版 K8s 支持,但已于 2024-06-30 停止维护,不推荐新部署(存在安全与兼容风险)。
- CentOS 8:已 EOL(2021-12),完全不推荐。
- Alibaba Cloud Linux(ACL):阿里云深度优化的 OS,原生适配 ECS、默认启用 cgroup v2、预装 tuned profile、长期 LTS 支持 → 生产环境首选。
- Ubuntu 22.04 LTS:内核 5.15,开箱即用支持 cgroup v2、eBPF,社区活跃,ACK 自动支持。
✅ 三、关键内核参数配置(必须设置)
在 /etc/sysctl.d/99-kubernetes-cri.conf 中添加并执行 sysctl --system:
# 启用网桥流量转发(必需)
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
# 启用 IPv4/IPv6 转发(Pod 网络通信必需)
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
# 允许非本地绑定(K8s Service NodePort 需要)
net.ipv4.ip_nonlocal_bind = 1
⚠️ 若使用 cgroup v2(推荐),还需在内核启动参数中添加
systemd.unified_cgroup_hierarchy=1(Alibaba Cloud Linux 3 / Ubuntu 22.04 默认启用),并确保 Docker/K8s 配置兼容(如 containerd 配置cgroup_parent = "system.slice")。
✅ 四、容器运行时要求(Kubernetes v1.24+)
- Docker Engine 已弃用:K8s v1.24+ 移除了 dockershim,不再直接支持 Docker 作为 CRI。
- ✅ 正确方案:
- 使用 containerd(推荐,ACK 默认运行时,轻量、稳定、K8s 原生支持)
- 或 CRI-O(符合 OCI 标准,适合 OpenShift 场景)
- ❌ 不再支持:直接通过
kubelet --docker启动(需改用--container-runtime-endpoint=unix:///run/containerd/containerd.sock)
💡 提示:即使安装 Docker,也应将其作为
containerd的镜像构建工具(docker build),而运行时由containerd承担。
✅ 五、ACK(阿里云容器服务 Kubernetes)特别提示
- 托管版 ACK:无需手动部署 K8s,但节点 OS 需满足上述要求;ACK 控制台会自动校验(如 ACL 3、Ubuntu 22.04、CentOS Stream 8/9)。
- Serverless 版 ACK(ASK):无需管理节点,无 OS 要求(但镜像仍需兼容 Linux x86_64/ARM64)。
- 节点池 OS 镜像:ACK 控制台提供官方优化镜像(如
aliyun_3_2104_64_20G_alibase_20231219.vhd),已预装 containerd、kubelet、tuned 等,强烈建议选用。
✅ 六、最佳实践总结(生产环境)
| 项目 | 推荐方案 |
|---|---|
| OS 发行版 | ✅ Alibaba Cloud Linux 3(首选) ✅ Ubuntu 22.04 LTS(次选) ❌ CentOS 7/8(避免) |
| 内核版本 | ≥ 5.4(支持 cgroup v2、eBPF、io_uring 等现代特性) |
| 容器运行时 | containerd(v1.6+,搭配 runc v1.1+) |
| 存储驱动 | overlay2(需内核 ≥ 4.0,modprobe overlay 可用) |
| 初始化脚本 | 使用 kubeadm init 或 ACK 控制台部署,避免手动配置 kubelet 参数错误 |
| 安全加固 | 启用 SELinux/AppArmor、限制容器 Capabilities、使用 PodSecurityPolicy(v1.25+ 替换为 PSA) |
📚 参考文档
- Docker 官方系统要求:https://docs.docker.com/engine/install/#supported-platforms
- Kubernetes 官方系统要求:https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin
- 阿里云 ACK 系统要求:https://help.aliyun.com/zh/ack/ack-managed-and-dedicated/user-guide/system-requirements-for-ack-clusters
- Alibaba Cloud Linux 优势:https://help.aliyun.com/zh/alinux/
如需进一步帮助(例如:一键部署脚本、ACL 3 上安装 containerd + kubeadm 的完整命令、或 ACK 节点池 OS 镜像选择指南),欢迎随时告知,我可以为你定制化生成 👇
云计算导航