云原生技术栈中的各个核心组件就像一个专业的团队,各司其职又紧密协同,共同支撑起庞大应用的稳定运行。要理解它们如何协同工作,关键在于把握两个核心层次:容器层(Docker) 和编排调度层(Kubernetes及其生态) 。
为了让你快速建立整体印象,下表清晰地展示了各核心组件在云原生体系中的角色与协同关系。
| 组件类别 | 核心组件示例 | 核心职责 | 类比说明 |
|---|---|---|---|
| 容器运行时 | Docker | 应用打包、隔离、运行,提供最小可执行单元 | 集装箱:标准化封装应用及其所有依赖 |
| 编排调度平台 | Kubernetes | 集群管理、调度、服务发现、弹性伸缩、自愈 | 超级调度中心:管理所有集装箱的运输、存放和维护 |
| 网络治理层 | Istio(服务网格) | 服务间通信的精细化管理(流量路由、安全、可观测性) | 空中交通管制系统:精密指挥每架飞机的航线与通信 |
| 运维支撑体系 | Prometheus, Argo CD | 监控、持续交付(CI/CD)、自动化运维 | 后勤保障系统:负责监控设备状态、自动化补给与调度 |
🔄 核心协同工作流程
了解了各自角色后,我们来看看它们是如何具体配合来完成一次应用部署与管理的。这个流程可以比作一个高度自动化的智能物流系统。
-
应用打包与注册(制造与登记集装箱)
- 你编写好应用代码后,使用 Dockerfile定义一个镜像的构建规则。这个过程就像是制作集装箱的图纸。
- 通过
docker build命令,Docker 引擎会根据 Dockerfile 将你的应用及其依赖打包成一个不可变的 Docker 镜像。这个镜像就是一个标准的"集装箱"。 - 接着,使用
docker push将镜像上传到镜像仓库(如 Docker Hub、Harbor)。这相当于将造好的集装箱登记到全球统一的货柜编码系统,方便后续调度中心随时取用。
-
定义期望状态与调度部署(下达运输指令与启动物流)
- 你不再需要手动到每台服务器上启动容器,而是通过编写 Kubernetes 的配置文件(如 Deployment、Service等 YAML 文件),向 Kubernetes 集群"声明"你期望的应用状态:例如,需要运行 3 个副本,并通过某个端口对外提供服务。
- 使用
kubectl apply命令将这份"声明"提交给 Kubernetes。Kubernetes 的 API Server 接收到指令后,Scheduler 组件会智能地选择集群中最合适的节点(Worker Node),并通知该节点上的 kubelet(节点代理)去执行。 - kubelet 接到指令后,会从镜像仓库拉取指定的 Docker 镜像,并调用本地的 Docker 引擎或符合标准的其他容器运行时(如 containerd)来创建并启动容器。
-
运行时的持续管理与治理(物流系统的自动化运维)
- 服务发现与负载均衡 :Kubernetes 的 Service资源会为你的多个应用实例(Pod)提供一个稳定的访问入口,并自动将流量负载均衡到各个健康的容器实例上。
- 弹性伸缩(HPA) :当监控系统(如 Prometheus)发现应用容器的 CPU 使用率或自定义业务指标超过阈值时,Kubernetes 的 Horizontal Pod Autoscaler(HPA) 会自动增加 Pod 的副本数量,以应对流量高峰;在流量低谷时自动缩减,节约资源。
- 高级流量治理(服务网格) :对于更复杂的通信需求,例如金丝雀发布(逐步将用户流量切换到新版本)、熔断、重试等,服务网格(如 Istio) 会发挥作用。它会以 Sidecar模式在您的应用容器旁自动注入一个轻量级网络代理,接管所有进出容器的流量,实现精细化的控制,而无需修改应用代码。
- 自愈与高可用 :Kubernetes 持续监控集群状态。如果某个节点故障或容器异常退出,ReplicaSet控制器会立即检测到实际状态与期望状态不符,并自动在健康的节点上重新创建新的容器实例,确保应用始终可用。
💎 总结
简单来说,Docker 提供了应用的标准化包装和运行时隔离,是云原生的基石 ;而 Kubernetes 则在此基础上,提供了大规模、自动化、智能化的集群管理能力,是云原生的大脑和中枢神经系统。其他组件如服务网格、CI/CD工具等,则是在这个坚实基础上,为特定场景(如网络治理、自动化交付)添加的专业能力模块。