文章中如果有图看不到,可以点这里去 csdn 看看。从那边导过来的,文章太多,没法一篇篇修改好。

【容器】从 Docker 到 Kubernetes,娓娓道来

一、简要时间线(关键节点)

在这里插入图片描述

来源(时间线中重要节点):LXC / cgroups 起始说明、Docker 首发年份、Kubernetes 源起与 Borg 的影响等均有文献与厂商博客说明。(Aqua)


二、为什么会有 Kubernetes(问题与动机)

简单回答:Docker/容器解决了“打包与单主机运行”的问题,但在真实生产环境里需要跨主机、跨机群的调度、伸缩、发现、弹性与自愈——这就是 k8s 的位置。

更详细的理由:

  1. 从“单机容器”到“集群管理”

    • Docker 把应用和依赖打包为镜像并运行为容器,方便开发与部署。但当服务需要在成百上千台机器上运行、要自动扩容/升级/故障恢复时,单靠 Docker CLI/单机运行不够。Kubernetes 提供跨主机的统一控制平面来管理这些需求。(techtarget.com)
  2. Google 的经验传承(Borg/Omega)

    • Google 内部长期运行大规模任务,形成了 Borg、Omega 这样的集群调度系统。Kubernetes 借鉴了这些思路(任务调度、租户隔离、配额、声明式 API 等),并把它开源化,成为社区可用的通用编排层。(Google Research)
  3. 声明式、可扩展与生态

    • k8s 提供声明式 API(你声明 desired state,controller 去保证),并设计了扩展点(CRD、operator),适合构建复杂的云原生平台与生态。(Google Cloud)

三、Docker(容器运行时 / 工具)——优点与缺点

优点(为什么 Docker 重塑了开发与交付)

  1. 简单易用的镜像/容器模型与工具链Dockerfile、镜像层(layered FS)、镜像仓库(Docker Hub)使得“开发机器→测试→生产”变短且一致。(Medium)
  2. 轻量、快速启动:比传统虚拟机更轻,资源开销低,启动快,利于微服务架构。(NetworkComputing)
  3. 丰富生态:大量基础镜像、CI/CD 集成、第三方工具支持(Compose、Swarm、Podman、BuildKit 等)。(Medium)

缺点与限制(为什么单靠 Docker 不够)

  1. 不是集群编排器(早期):Docker Engine 主要侧重单节点容器运行;虽然 Docker Swarm 存在,但社区/产业选择有差异,无法满足大规模复杂场景的统一治理需求。(techtarget.com)
  2. 安全面向需要注意:容器共享内核,镜像供应链与运行时安全(漏洞、非可信镜像、权限配置)需要专门治理。(NetworkComputing)
  3. 性能与资源隔离边界:对于需要直接访问 GPU / 高性能网络或需要严格隔离的大型状态服务,容器仍需额外调优。(DEV Community)

(上面 Docker 的优/劣观点参考了多篇技术与行业分析。)。(DEV Community)


四、Kubernetes(k8s)——优点与缺点

优点(为什么大公司/云厂商与开源社区选择它)

  1. 自动化编排: 自动调度、自动伸缩(HPA/VPA/Cluster Autoscaler)、滚动升级、回滚、重启失败 Pod 等。非常适合大规模微服务与弹性需求。(groundcover.com)
  2. 声明式控制平面: 用 YAML/CRD 声明期望状态,控制器负责收敛,便于自动化和平台化。(Google Research)
  3. 强大的生态与可扩展性: 大量社区项目(Ingress、Service Mesh、CNI、CSI、Operator 等),且云厂商提供托管 k8s 服务(EKS/GKE/AKS 等)。(Google Cloud)
  4. 资源抽象与多租户能力: Namespace、Quota、NetworkPolicy 等机制支持复杂组织需求。(Google Research)

缺点与挑战

  1. 复杂性高、学习曲线陡峭:理解 API、controller、调度、网络、存储、RBAC、Operator 模式需要较多投入。许多团队为此选择托管 k8s(如 GKE)。(plural.sh)
  2. 运维成本与资源开销:控制平面(etcd、API server、controller)和节点上的组件会消耗资源,且需要持续运维(备份 etcd、升级、监控)。(plural.sh)
  3. 过度设计风险:对小型团队或简单应用,引入 k8s 可能是“过度工程”(开销大于收益)。(plural.sh)

(k8s 的优势在于“规模与可维护性”,代价是“复杂度与运维成本”)。(Ostride Labs)


五、两者如何配合?(现实中的常见模式)

  • 本地开发/构建/镜像:开发者用 Docker 构建镜像、在本地用 Docker Compose 或 kind/minikube 测试。
  • 生产部署与编排:把镜像推到镜像仓库(Docker Hub / 私有 Registry),用 k8s 在集群中以 Deployment/StatefulSet/DaemonSet 运行,k8s 负责调度、弹性、服务发现、负载均衡、持久化卷(PVC)等。(Medium)

六、架构图(Mermaid)与流程图 —— 帮助把抽象变直观

1) Docker 单机 vs k8s 集群 对比(架构概览)

在这里插入图片描述

说明:Docker 更关注“本地(或单机)容器生命周期”;Kubernetes 是一个跨节点的控制平面(API server + etcd + controllers + kubelets)来实现集群级别的调度与自愈。(Google Cloud)

2) 部署流程序列(开发→镜像→k8s 部署)

Developer CI/CD Registry Kubernetes API Scheduler Node User commit ->> trigger build (Dockerfile) push image: repo/app:tag kubectl apply deployment.yaml (image: repo/app:tag) schedule pods kubelet pulls image ->> run pod service endpoint available Developer CI/CD Registry Kubernetes API Scheduler Node User

说明:典型 GitOps / CI/CD 流程。(Medium)

3) k8s 核心控制面组件(更细的组件关系图)

在这里插入图片描述

说明:API Server 是集群的“入口”,etcd 存储声明式状态,controller / scheduler 负责收敛/调度,kubelet 在节点实际驱动容器运行。(Google Research)


七、实践建议(何时用 Docker-alone、何时上 k8s)

  • 用 Docker-alone / Docker Compose 的场景:个人开发、小型单机服务、CI 测试环境、简单的边缘部署。
  • 上 k8s 的场景:需要跨多台机器的自动伸缩、高可用、复杂网络/存储/多租户管理、或作为 PaaS/backing platform(对接 Service Mesh、Operator 等)。
  • 折中方式:使用云厂商的托管 k8s(GKE/EKS/AKS),或使用轻量 k8s(k3s)来降低运维门槛。(plural.sh)

八、常见误区(短答)

  • “k8s 会替代 Docker”? 不准确。k8s 管理容器(runtime),而 Docker/Container runtime 负责创建/运行容器。k8s 与容器 runtime(containerd、CRI-O、以前的 Docker Engine)是合作关系。(techtarget.com)
  • “k8s 适合所有团队”? 否。对于非常小或简单的项目,k8s 的复杂性与运维成本可能不值得。(plural.sh)

九、延伸阅读(我用来整理上面内容的代表性来源)

  • 容器发展与 LXC 概述(历史):AquaSec / TechTarget。(Aqua)
  • Kubernetes 起源(Google 博客 / Wired):关于 Borg、Omega 的影响与 k8s 开源历史。(Google Cloud)
  • k8s 与容器优/缺点分析(行业综述、2024-2025 年观点):Plural、NetworkComputing 等。(plural.sh)

十、小结(三句话)

  • 容器(Docker) 把应用“打包并单机运行”变得简单并广泛普及。(Medium)
  • Kubernetes 解决的是“跨主机/集群的编排、调度与运维”问题,其设计深受 Google 内部 Borg/Omega 系统启发并开源到社区。(Google Research)
  • 选择取舍:小团队/单机场景可用 Docker;需要可扩展、高可用与平台化时选 k8s,但要预估学习与运维成本。(plural.sh)
posted @ 2025-10-02 15:02  NeoLshu  阅读(1)  评论(0)    收藏  举报  来源