K8S是云原生最核心的内容,也是云计算的未来,下满我就全面来详解K8S以及原理@mikechen
K8S
Kubernetes(简称 K8s),K8s 是云原生生态的核心组件,也是云技术最核心的内容。
K8S,通过提供容器化应用的调度、编排、以及运行、和管理,是实现 DevOps 、和微服务架构的关键。
K8S工作原理
K8S的整体架构设计,如下图所示:
K8S, 采用主节点(Master Node)、和工作节点(Master-Worker)的分布式设计,并且,支持大规模容器、和管理。
K8S主节点(Master Node)
K8S主节点,负责:整个集群的状态、与生命周期。
并且,K8S主节点,管理所有的工作节点、和容器化的应用程序。
K8S主节点,主要组件如下:
API Server
API Server,主要负责:接收用户请求,并将其传递给其他组件,是 K8S的统一入口。
整体架构,如下图所示:
API Server 是 Kubernetes(K8S)集群的“用户接口”,所有的管理、和操作请求都通过它进行。
无论是创建 Pod、更新 Deployment,还是查询集群状态,都需要与 API Server 交互。
在集群中,所有的配置、调度、控制、健康检查等工作都依赖于 API Server。
并且,API Server 管理所有资源的 CRUD 操作,并通过 etcd 保存资源状态。
ETCD
etcd ,是集群的数据存储,保存所有集群状态、和配置的键值数据库…等等重要信息。
etcd ,通常也会部署成多个副本(etcd 集群),以确保数据的持久性和一致性。
Controller Manager
Controller Manager ,是 Kubernetes(K8S)、与云平台之间的桥梁,负责:处理与云基础设施相关的资源管理任务。
Controller Manager 是由多个控制器组成的,每个控制器负责管理 Kubernetes 中某种类型的资源。
常见的控制器,如下图所示:
- Node Controller:负责管理、与云平台上的节点相关的操作,例如:节点的生命周期管理、节点的健康检查…等;
- Route Controller:负责在云平台上,配置路由规则,以便 Kubernetes(K8S)服务,可以与外部通信;
- Service Controller:管理与云负载均衡器相关的资源,负责为类型为
LoadBalancer
的 Kubernetes(K8S)服务创建、和配置云负载均衡器; - Ingress Controller:管理、和配置与云负载均衡器相关的 Ingress 资源,支持在云平台上配置 HTTP/HTTPS 路由。
Scheduler
K8S Scheduler(调度器), 在 Kubernetes(K8S)集群中扮演着至关重要的角色。
Scheduler的主要任务是:负责将 Pod(容器组),调度到适合的 工作节点 上执行。
在调度过程中,调度器需要考虑多个因素,比如:资源需求、节点的可用资源、以及定义的调度策略…等。
K8S工作节点
K8S工作节点,主要执行主节点分配的实际任务,比如:运行容器化应用程序(Pod)…等等。
+---------------------+ +---------------------+ | 工作节点 (Worker) | | 工作节点 (Worker) | +---------------------+ +---------------------+ | - Kubelet | | - Kubelet | | - Kube-proxy | | - Kube-proxy | | - 容器运行时 | <-----> | - 容器运行时 | +---------------------+ +---------------------+ | | | | +-------+ +-------+ | Pod | | Pod | +-------+ +-------+
K8S工作节点,整体架构,如下图所示:
K8S的工作流程,大致如下:
API Server 是 Kubernetes 集群的入口,接收并验证所有的请求;
首先,用户定义请求,比如:定义一个 Deployment、Pod、 或 Service;
然后,API Server 接收并处理请求,API Server 会验证用户的身份(认证),并授权其操作(授权)。
然后,交给其它组件,比如:Controller Manager 和、Scheduler,来调度 Pod 到合适的节点;
最后,管理节点上的容器,确保 Pod 持续运行,K8S自动维护集群资源的健康、和稳定。