关注△mikechen的架构笔记△,十余年BAT架构经验倾囊相授
大家好,我是mikechen。
Kubernetes(K8S)是云计算的未来,也是云原生最核心的部分,下面我就全面来详解Kubernetes(K8S)@mikechen
最新mikechen原创超30万字《阿里架构师进阶专题合集》和《最全大厂面试题及答案总结》,请关注本公众号【mikechen的架构笔记】,后台回复:资料,即可领取。
Kubernetes(K8S)
Kubernetes (K8S) ,是“Google”开发的容器编排平台,用于自动化应用程序的部署、扩展、和管理。
Kubernetes通常被缩写为“K8S”,"8"代表中间省略的8个字母。
Kubernetes (K8S) ,主要解决以下三大关键问题:
1.容器编排和调度
Kubernetes 的核心功能之一是:容器的编排、和调度。
Kubernetes自动化地管理容器,比如:按照资源需求、可用性、拓扑位置...等,调度到合适的节点上运行。
除此之外,Kubernetes (K8S)它还负责:处理容器的生命周期管理,包括启动、停止、重启和销毁容器。
2.应用的弹性伸缩和自愈
Kubernetes 可以根据应用的负载自动调整容器的数量,从而实现弹性伸缩。
当应用负载增加时,Kubernetes 会自动扩展更多的容器来处理请求,反之亦然。
3.大规模管理集群
Kubernetes 的可扩展性、灵活性、和高可用性,能够在大规模集群中有效地管理、和调度容器化应用。
这三大点使得,Kubernetes成为现代云原生架构中不可或缺的核心技术。
Kubernetes(K8S)原理
Kubernetes起源于Google的“Borg”系统,旨在管理大规模的容器化应用。
Kubernetes 借鉴了 Google 内部的大规模集群管理系统 ”Borg“ 的整体架构思想,其核心设计与理念受到了 Borg 的深刻影响。
Kubernetes 的架构主要由:(Master/Node)结构,如下图所示:
Master 是 Kubernetes 集群的控制平面,负责:管理整个集群的状态、和调度。
Node负责运行应用,Master/与Node通过:"API"进行通信。
Kubernetes(K8S)主节点原理
Kubernetes (K8S)的 Master 节点是:整个集群的控制中枢。
整体架构,如下图所示:
Kubernetes (K8S),通过一系列组件(比如:kube-apiserver、kube-scheduler、kube-controller-manager...等)协调、调度和维护整个集群的正常运行。
kube-apiserver
kube-apiserver角色: Kubernetes 控制平面的入口点,是集群中所有操作的核心。
kube-apiserver功能: kube-apiserver 提供了 REST API,所有对 Kubernetes 集群的管理操作都通过该 API 进行。
如下图所示:
作为集群的唯一入口,kube-apiserver 确保了所有进入集群的请求,都经过了严格的验证和授权,从而保护集群的安全性。
并且,kube-apiserver:处理和验证用户的请求,并将集群的状态写入 etcd 中。
kube-apiserver 通过与 etcd 的紧密集成,保证了集群状态的一致性、和正确性,这对于大型集群中的资源调度和管理至关重要。
除此之外,API Server 也是其他控制平面组件(比如:Scheduler 、和 Controller Manager)与集群通信的接口。
scheduler
kube-scheduler 负责:将新创建的 Pod 分配到合适的节点上。
如下图,最下面”蓝色框“所示:
kube-scheduler 根据 Pod 的资源需求,(比如:CPU、内存...等等)。
以及节点的可用资源、节点的负载情况、以及其他调度策略,来决定将 Pod 调度到哪个节点上。
比如,常见的调度策略有:
资源请求与容量(Resource Requests and Limits):根据 Pod 的资源需求、和节点的可用资源进行调度;
节点亲和性与反亲和性(Node Affinity and Anti-Affinity):根据节点标签指定 Pod 应该、或不应该调度到哪些节点;
Pod 亲和性与反亲和性(Pod Affinity and Anti-Affinity):定义 Pod 与其他 Pod 之间的调度关系;
污点与容忍(Taints and Tolerations):将特定 Pod 调度到有污点的节点,或避免调度到这些节点;
拓扑感知调度(Topology-Aware Scheduling):根据数据中心的拓扑结构优化 Pod 的分布;
优先级和抢占(Priority and Preemption):高优先级的 Pod 可以抢占低优先级 Pod 的资源。
controller
角色: 负责集群状态的管理和维护。
功能: kube-controller-manager 运行多个控制器,每个控制器负责管理不同类型的 Kubernetes 资源。
常见的有:节点控制器、复制控制器、端点控制器...等,如下图所示:
ReplicationController
功能: 确保指定数量的 Pod 副本在集群中运行。
如果 Pod 崩溃或被删除,ReplicationController 会启动新的 Pod 以保持副本数量。
ReplicaSet
功能: 是 ReplicationController 的增强版本,支持基于标签选择器的更复杂匹配规则,确保指定数量的 Pod 副本始终运行。
Deployment Controller
功能: 管理应用的部署与更新,通过控制 ReplicaSet 来实现 Pod 的滚动更新、回滚等功能,确保应用无缝升级。
DaemonSet Controller
功能: 确保每个节点(或符合条件的节点)上都运行一个特定的 Pod,通常用于运行系统级服务或守护进程。
StatefulSet Controller
功能: 管理有状态应用的部署,确保 Pod 的顺序启动和停止,并保持其网络标识和存储一致性。
Job Controller
功能: 确保指定数量的 Pod 成功完成其任务(一次性任务),任务完成后 Pod 会被终止。
这些控制器,通过监控集群的状态来确保资源的实际状态与期望状态一致。
Kubernetes(K8S)工作节点
Node 是 Kubernetes 集群中的工作负载运行环境,负责运行 Pod 和管理容器。
Node 在 Kubernetes 集群中扮演着关键的角色,通过 :kubelet、kube-proxy 、和容器运行时这些组件。
Node 整体架构,如下图所示:
kubelet
是 Node 上的核心组件,负责管理本节点上的 Pod 和容器,确保它们按照预期状态运行。
它监控容器的生命周期,并与 Master Node 的 API Server 进行通信,接收调度命令、报告节点状态、以及处理 Pod 的创建、更新和删除。
kube-proxy
kube-proxy 确保集群中不同节点、和 Pod 之间的网络通信。
kube-proxy 运行在每个 Node 上,并根据 Kubernetes Service 的定义,配置网络规则(如 iptables 或 IPVS 规则),以实现流量的负载均衡、和服务发现。
负载均衡:
kube-proxy 负责将流量均匀地分配到多个 Pod 实例中,这种负载均衡使得服务能够在多个 Pod 之间分配请求,从而提高应用的可用性、和扩展性。
服务发现:
通过将服务的虚拟 IP 地址(ClusterIP)映射到实际的 Pod IP 地址,kube-proxy 使得集群中的其他 Pod 和服务能够找到目标服务。
网络代理:
kube-proxy 充当代理层,处理来自集群内部和外部的网络请求,将它们转发到相应的 Pod 上,这包括 TCP、UDP ...等协议的流量。
容器运行时(Container Runtime)
容器运行时,是 kubelet 执行容器操作的底层工具。
kubelet 通过调用容器运行时来拉取镜像、创建容器、启动和停止容器.........等。
比如:用于拉取镜像并运行容器的实际软件,如 Docker 、或 containerd......等容器。
Kubernetes(K8S)实践应用
Kubernetes是一个强大且灵活的容器编排平台,适用于各种规模的应用程序部署、和管理。
比如:
自动化集成
通过Kubernetes与CI/CD工具(如:Jenkins、GitLab CI...等)集成,自动化应用的构建、测试、和部署。
如下图所示:
多租户架构
通过Namespace和RBAC(基于角色的访问控制),实现不同团队或应用的资源隔离和安全控制。
微服务架构
使用Kubernetes管理微服务架构的多个独立服务,服务间通过Service、和Ingress进行通信和暴露。
并且,Kubernetes 为微服务架构提供了全面的支持,通过容器编排、自动化管理、服务发现和负载均衡等功能。
以及,结合 CI/CD 流水线、监控、日志和安全策略,构建大规模微服务系统。
以上
最后送大家一个福利:
送我原创超30万字阿里架构师进阶专题合集。
以及给大家整理最全大厂Java面试题及答案详解,包含:Java、多线程、JVM、Spring、MySQL、Redis、中间件...等必考题答案详解。
需要以上架构专题&面试答案的同学,加我微信即可领取!
添加时备注:资料