Kubernetes(K8S)最全详解(万字图文总结)

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

Kubernetes(K8S)是云原生目核心组件,也是云计算的未来,下面我就全面来详解Kubernetes(K8S)@mikechen

Kubernetes(K8S)

Kubernetes(简称K8S),是一个容器编排平台,主要用在:自动化部署、扩展、和管理容器化应用程序。

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

其主要作用,可以总结为以下四大方面:

1.自动化容器部署和管理

根据负载情况,Kubernetes 可以自动调整应用的副本数量,支持水平扩展、和收缩。

2.负载均衡和服务发现

Kubernetes 的 Service 资源提供了内置的负载均衡功能,能够将流量均匀地分配到多个 Pod 实例上。

3.集群资源管理

Kubernetes 对集群资源进行集中管理,优化资源利用,并提高运维效率。

4.容器编排和调度

这是Kubernetes(K8S)最核心功能,调度确保容器化应用在集群中高效地运行。

 

Kubernetes(K8S)原理

K8S架构,如下图所示:

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

K8S架构,首先,从整体上看,主要会包含两大部分,比如:上面的Master(主节点)、和下图的Node(子节点)。

Master(主节点):如果用现实生活的例子来形容,特别像是我们的“大脑”,是整个容器编排的“头部中枢”,控制整个“K8S的集群运转”。

而Node(子节点):就特别像是我们的“手”、和、“脚”,主要负责:执行Master(大脑)的指令,主要就负责:干活。

上面,我们了解完“K8S”的整体架构后,下面我重点来详解各大架构的核心组件@mikechen

 

Kubernetes(K8S)主节点架构

Master节点上的组件,负责:集群的全局控制、和管理,确保整个集群的状态、和行为符合预期。

主要包括以下组件,如下图黄框所示:

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

主要包含:4大核心组件,下面我分别谈谈各大组件的实际作用、和功能。

1.apiserver

作用

作为Kubernetes的前端,接收、验证、和处理,所有REST API请求。

功能

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

提供集群管理的入口点,处理CRUD操作,比如:(创建、读取、更新、删除……..等等)操作的API。

以及,维护集群状态一致性,并将请求分发给其他Master组件。

以及,API Server还处理所有外部、和内部的REST请求,比如:执行验证、授权、变更数据…….等等,并更新到etcd。

 

2.scheduler

作用:

主要负责:将未分配的Pod,分配到合适的Node节点……等场景。

功能:

Scheduler 是集群管理的重要组成部分,主要负责以下任务:

资源调度

决定新创建的 Pod, 应该在哪个 Node 上运行;

比如:当一个新 Pod 被创建时,Scheduler 会根据其资源请求(CPU、内存等)、和节点的可用资源,选择最合适的节点进行部署。

在考虑 CPU、内存……等资源的基础上,尽量均衡地分配工作负载。

负载均衡

确保资源的高效利用、和均衡分布,避免节点过载;

比如:Scheduler 通过均衡地分配 Pod,避免将所有工作负载集中到少数节点上,从而提高集群的可靠性和性能。

满足约束

根据资源需求、和策略约束,选择合适的节点。

性能需求

以及,考虑 Pod 的资源请求、和限制,以满足应用的性能需求。

Kubernetes Scheduler 使用一系列的调度算法来决定 Pod 的分配,常见的调度算法包括:

  • Bin Packing:将资源紧密打包,以减少资源碎片;
  • Spread:尽量将 Pod ,均匀地分布在各节点上;
  • Taints and Tolerations:根据节点的污点、和 Pod 的容忍度,进行调度。

 

3.controller

负责维护集群状态的 kube-controller-manager 组件,这个类似:Master(主节点)的“中枢神经”。

具体作用包括:

  • 监控资源对象的状态;
  • 确保资源对象的实际状态、与期望状态一致;
  • 自动执行修复操作,如重新创建失效的 Pod、调整副本数量…….等。

Controller Manager 运行多个独立的控制器进程,每个控制器负责不同的资源类型。

比如:

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

  • 节点控制器(Node Controller):管理节点的生命周期,确保节点的健康和可用性。
  • 副本控制器(Replication Controller):确保指定数量的 Pod 副本在集群中运行。
  • 部署控制器(Deployment Controller):管理应用的部署,确保应用的滚动更新和回滚。

 

Kubernetes(K8S)工作节点架构

除了上述Master节点的组件外,Node节点上也是重要组件,整体架构,如下图所示:

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

Node节点是实际运行容器的地方,每个节点都包含以下组件:

kubelet

作用

与API Server通信,获取分配给节点的Pod定义,并负责容器的:创建、更新、删除…….等操作。

功能

节点上的主要代理,负责:管理Pod、和容器……..等的生命周期。

kube-proxy

作用

实现Kubernetes服务抽象,负责服务发现/和负载均衡。

功能

维护网络规则,管理Pod之间的网络通信。

Container Runtime

作用

Kubernetes支持多种容器运行时(如:Docker、containerd、CRI-O。。。等),kubelet通过CRI接口与容器运行时通信。

很多时候,大家使用最多的是:Docker,其实Kubernetes还可以支持很多别的容器。

功能

主要就是:负责运行实际的容器。

Node节点工作原理,如下:

Pod调度

首先,用户定义Pod,并通过API Server提交给集群。

调度器根据节点的资源和策略将Pod分配到合适的节点。

Pod管理

然后,kubelet在节点上接收Pod定义,拉取容器镜像,并运行容器。

kubelet持续监控Pod状态,并与API Server同步。

服务发现和负载均衡

其次,kube-proxy为服务创建一组负载均衡规则,允许Pod之间及外部的流量通过服务名称访问Pod。

扩展和缩放

最后,通过Horizontal Pod Autoscaler (HPA) 、和Vertical Pod Autoscaler (VPA),Kubernetes可以自动扩展或缩放应用,以满足负载需求。

4.Pod

Pod 是 Kubernetes 中的最小部署单元,是一组容器的逻辑集合。

一个 Pod 中的容器,共享相同的网络命名空间、IP 地址、存储卷……等资源,可以相互通信和协作。

如下图所示:

Kubernetes(K8S)最全详解(万字图文总结)-mikechen

通常一个 Pod 包含一个容器,但在某些情况下也可以包含多个容器,这些容器在同一个 Pod 中协作完成某项任务。

Pod 内的容器共享相同的网络命名空间和 IP 地址,可以通过 localhost 直接相互访问。

 

Kubernetes(K8S)的应用场景

Kubernetes 通过其强大的编排能力、和自动化管理功能,在多个应用场景中发挥着重要作用。

例如:

1.微服务架构

微服务架构:将应用拆分为多个小的、独立的服务,每个服务负责处理应用的一个特定功能。

这种架构使得应用的开发、测试、部署和维护变得更加灵活、和高效。

目前通过:Docker、结合Kubernetes(K8S)是主流的结合方式。

Kubernetes 可以实现微服务的自动化部署、滚动更新、和回滚。

 

2.大规模容器化应用

大规模容器化应用,需要管理大量的容器、和服务实例。

比如:Kubernetes 可以管理整个集群中的节点、和容器,自动调度和分配资源,确保高效运行。

 

3.DevOps 

DevOps 强调开发和运维的协作,通过自动化和标准化提升软件交付的效率和质量。

Kubernetes 自动化管理容器的生命周期,包括部署、扩展、滚动更新和自愈。

 

4.高性能计算

高性能计算任务需要大量的计算资源,通常用于:科学计算、数据分析和模拟等应用。

Kubernetes 可以管理大规模的计算集群,实现高效的资源分配和调度。

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法