2022-11-04 18:58:48
Kubernetes(k8s)与Docker是互补的容器技术组合,Docker提供容器化基础能力,k8s负责容器集群的自动化管理,二者共同构建现代化应用部署体系。
一、核心定位差异底层依赖Docker是k8s管理的核心对象之一。k8s通过节点(Node)上的容器运行时(如Docker Engine)调度容器,每个节点可运行多个Docker容器,形成分布式集群。
功能互补性
Docker解决应用打包与隔离问题,但缺乏集群管理能力。例如,单机部署多个Docker容器时需手动维护依赖关系、网络配置和故障恢复。
k8s弥补这一缺陷,通过Pod(容器组)、Service(服务抽象)等资源对象,实现容器在多节点间的协同运行。例如,自动将流量分发至健康容器,或根据负载动态调整容器数量。
多容器运行时支持k8s不仅支持Docker,还兼容CRI-O、containerd等容器运行时,体现其作为通用编排框架的灵活性。

传统部署所有应用直接安装于物理机,依赖冲突和资源竞争问题突出。例如,不同应用需不同Python版本时,需通过虚拟环境隔离,但无法彻底解决内核级冲突。
虚拟机部署通过VM实现应用隔离,但每个VM需完整OS,导致资源浪费。例如,部署5个轻量级应用可能需5GB内存用于OS,而非应用本身。

容器化部署Docker容器仅包含应用二进制文件和依赖库,资源占用接近原生应用。例如,同一宿主机可运行100个微服务容器,且通过命名空间(Namespace)实现进程、网络隔离。
容器编排部署k8s进一步抽象集群资源,通过Deployment、StatefulSet等控制器管理容器生命周期。例如,自动重启崩溃容器、滚动更新应用版本,或根据CPU使用率横向扩展容器实例。
Docker适用场景
单机容器化:开发环境镜像构建、CI/CD流水线中的测试环境快速启动。
轻量级隔离:微服务拆分后的独立空派裤部署,或运行数据库等有状态服务(需结合数据卷)。
k8s适用场景
分布式系统:管理跨多台服务器的容器集群,例如电商平台的订单、支付、库存服务协同。
高可用架构:通过多副本(ReplicaSet)和健康检查(Liveness Probe)确保服务连续性。
混合云部署:统一管理公有云(如AWS EKS)和私有云(如OpenShift)的容器资源。
开发阶段开发者使用Dockerfile定义应用镜像,通过docker build构建镜像并推送至镜像仓库(如Harbor)。
部署阶段k8s通过YAML文件声明Deployment资源羡友,指定镜像版本、副本数和资源限制,调度器将容器分配至合适节点。
运维阶段k8s监控容器状态,自动处理节点故障或网络分区。例如,当某节点宕机时,将容器重新调度至健康节点。
Docker与k8s的关系类似于“集装箱”与“港口调度系统”:Docker提供标准化的应用包装方式,k8s则负责将“集装箱”高效运输至目标节点,并动态调整运输路线以应对流量变化。二者结合,成为云原生时代应用部署的事实标准。