Kubernetes(K8S)是云原生目核心组件,也是云计算的未来,下面我就全面来详解Kubernetes(K8S)@mikechen
Kubernetes(K8S)
Kubernetes(简称K8S),是一个容器编排平台,主要用在:自动化部署、扩展、和管理容器化应用程序。
其主要作用,可以总结为以下四大方面:
1.自动化容器部署和管理
根据负载情况,Kubernetes 可以自动调整应用的副本数量,支持水平扩展、和收缩。
2.负载均衡和服务发现
Kubernetes 的 Service 资源提供了内置的负载均衡功能,能够将流量均匀地分配到多个 Pod 实例上。
3.集群资源管理
Kubernetes 对集群资源进行集中管理,优化资源利用,并提高运维效率。
4.容器编排和调度
这是Kubernetes(K8S)最核心功能,调度确保容器化应用在集群中高效地运行。
Kubernetes(K8S)原理
K8S架构,如下图所示:
K8S架构,首先,从整体上看,主要会包含两大部分,比如:上面的Master(主节点)、和下图的Node(子节点)。
Master(主节点):如果用现实生活的例子来形容,特别像是我们的“大脑”,是整个容器编排的“头部中枢”,控制整个“K8S的集群运转”。
而Node(子节点):就特别像是我们的“手”、和、“脚”,主要负责:执行Master(大脑)的指令,主要就负责:干活。
上面,我们了解完“K8S”的整体架构后,下面我重点来详解各大架构的核心组件@mikechen
Kubernetes(K8S)主节点架构
Master节点上的组件,负责:集群的全局控制、和管理,确保整个集群的状态、和行为符合预期。
主要包括以下组件,如下图黄框所示:
主要包含:4大核心组件,下面我分别谈谈各大组件的实际作用、和功能。
1.apiserver
作用:
作为Kubernetes的前端,接收、验证、和处理,所有REST API请求。
功能:
提供集群管理的入口点,处理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 运行多个独立的控制器进程,每个控制器负责不同的资源类型。
比如:
- 节点控制器(Node Controller):管理节点的生命周期,确保节点的健康和可用性。
- 副本控制器(Replication Controller):确保指定数量的 Pod 副本在集群中运行。
- 部署控制器(Deployment Controller):管理应用的部署,确保应用的滚动更新和回滚。
Kubernetes(K8S)工作节点架构
除了上述Master节点的组件外,Node节点上也是重要组件,整体架构,如下图所示:
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 地址、存储卷……等资源,可以相互通信和协作。
如下图所示:
通常一个 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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》