K8S是云原生最核心的内容,下满我就全面来详解K8S@mikechen
K8S
K8S,全程是“Kubernetes”,是一个开源的容器编排平台,用于自动化应用的 部署、扩展和管理。
K8S,最早由 Google 开发,后捐赠给 CNCF,如今已经成为 云原生领域的事实标准。
K8S 解决了在生产环境中管理大量容器的复杂性。
K8S 不仅是容器管理工具,更是一套用于构建云原生平台的基础设施。
K8S,把运维复杂度转化为可声明、可自动化管理的体系。
K8S架构
K8S 采用 主从架构(Master-Node 架构),如下图所示:
Master 节点(控制平面 Control Plane):负责集群的管理与调度,相当于“大脑”。
Node 节点(工作节点 Worker Node):运行实际的容器化应用,相当于“手脚”。
K8S原理
所有组件通过一个统一的 API Server 进行通信,集群的当前状态和期望状态则存储在一个叫做 Etcd 的分布式数据库中。
1.API Server
API Server:这是 K8S 的核心前端。
所有内部和外部组件(如 kubectl
命令、Kubelet)都必须通过它来与集群交互。
如下图所示:
特点:无状态、可水平扩展(通过负载均衡器对外暴露多个实例)。
集群的唯一入口,提供 RESTful API。
负责认证、鉴权、准入控制、资源…等等变更通知。
2. Scheduler
负责 Pod 调度,决定 Pod 运行在哪个 Node 节点。
调度过程包括过滤(筛选可用节点)、打分(选择最优节点)、绑定(分配 Pod)。
3. Controller Manager
负责多种控制循环(Control Loop),如节点控制器、复制控制器、端点控制器等。
例如,Deployment Controller :负责确保 Pod 的副本数量,始终符合你设置的数量。
4. etcd
分布式一致性键值存储,保存集群的持久化状态(所有 API 对象)。
提供强一致性(Raft 协议),对高可用控制面至关重要。
5.kubelet
Kubelet:这是每个节点上的核心代理。
它与主节点上的 API Server 通信,接收 Pod 的配置清单,并确保这些 Pod 中描述的容器在节点上运行和健康。
它还负责向 API Server 报告节点和 Pod 的状态。
6.kube-proxy
Kube-proxy:这是一个网络代理,负责管理节点上的网络规则。
它确保 Service 的请求能够正确地路由到后端的 Pod 上,实现 Pod 之间的网络通信和负载均衡。
7.容器运行时(Container Runtime)
Container Runtime(容器运行时):这是真正运行容器的引擎。Kubelet 依赖它来创建、启动和停止容器。
最常见的容器运行时是 Docker,但现在也支持 containerd 和 CRI-O 等。
K8S工作流程
整体工作流程,如下:
用户通过 kubectl
或 API Server 提交应用配置。
Master 组件(Scheduler、Controller Manager)做决策并存储状态(etcd)。
Node 节点上的 Kubelet 执行任务,启动 Pod 并汇报状态。
Kube-Proxy 负责服务发现与负载均衡,保证 Pod 可访问。