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

文摘   2024-08-29 17:29   四川  

关注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、中间件...等必考题答案详解。


需要以上架构专题&面试答案的同学,加我微信即可领取!


添加时备注:资料






mikechen的架构笔记
十余年BAT架构经验倾囊相授!
 最新文章