温馨提示×

Ubuntu Kubernetes与Docker兼容性

小樊
45
2025-12-14 16:12:27
栏目: 智能运维

Ubuntu 上 Kubernetes 与 Docker 的兼容性要点

Ubuntu 上,Kubernetes 自 v1.24 起移除了内置的 dockershim,Kubelet 不再直接对接 Docker 引擎;因此“直接用 Docker 作为运行时”的做法仅能在 v1.23 及更早版本使用。若要在新版本继续使用 Docker,需通过 cri-dockerd 提供 CRI 适配层;更推荐的方式是改用 Containerd 作为运行时(原生 CRI,资源占用更低、维护更简单)。

版本兼容矩阵与运行时选择

Kubernetes 版本 推荐/可用运行时 说明
≤ v1.23.x Docker 19.03–20.10.x 可直接使用 Docker(内置 dockershim)。历史实践中常见组合如:v1.19 配 Docker 19.03、v1.20–v1.23 配 Docker 20.10。
≥ v1.24.x Containerd ≥1.6(推荐);或 Docker + cri-dockerd v1.24 起移除 dockershim;若必须用 Docker,需额外部署 cri-dockerd 作为 CRI 接口。
  • 历史兼容参考:v1.21–v1.23 通常与 Docker 19.03/20.10 搭配;v1.19 常见搭配为 Docker 19.03。以上矩阵用于快速选型与排障基线。

在 Ubuntu 上的实践建议

  • 新集群(Ubuntu 20.04/22.04,K8s ≥v1.24
    • 直接采用 Containerd:安装 containerd.io,生成默认配置并将 SystemdCgroup = true,使用 kubeadm 初始化集群(无需再安装 Docker 引擎作为运行时)。该路径与 Kubernetes 的 CRI 原生集成、维护成本更低。
  • 既有 Docker 集群升级或必须使用 Docker CLI
    • 保留 Docker 用于构建/本地开发,但为 K8s 节点部署 cri-dockerd,在 kubeadm 初始化/加入时通过 –cri-socket=unix:///var/run/cri-dockerd.sock 指定 CRI 套接字;注意 cri-dockerd 的版本需与 K8s 版本匹配(如 v0.3.x 对应 K8s v1.30.x 场景)。

快速自检与常见问题

  • 查看运行时与版本
    • kubectl get nodes -o wide(查看节点与容器运行时)
    • docker --version(若已安装 Docker)
    • crictl version / ctr version(Containerd 工具)
  • 常见报错与处理
    • “kubelet 不支持 Docker”:K8s ≥v1.24 未装 cri-dockerd 或未指定 –cri-socket;安装 cri-dockerd 并在 kubeadm 命令中显式指定套接字即可。
    • 镜像拉取慢:为 Containerd 配置 registry mirrors(/etc/containerd/config.toml 的 [plugins.“io.containerd.grpc.v1.cri”.registry.mirrors]),或使用国内镜像源加速。
    • 资源占用偏高:迁移至 Containerd 可显著降低节点资源开销(无 dockershim 额外层)。

0