K8S原理架构详解(万字图文总结)

K8S原理架构详解(万字图文总结)-mikechen

K8S是云原生最核心的内容,也是云计算的未来,下满我就全面来详解K8S架构@mikechen

K8S

Kubernetes(简称 K8S),是容器编排平台,由 Google开发,现由云原生计算基金会(CNCF)进行维护、和发展。

Kubernetes 提供了一种自动化部署、扩展、和管理容器化应用的机制,使开发者能够高效地构建、和运行分布式系统。

如下图所示:

K8S原理架构详解(万字图文总结)-mikechen

K8S的核心作用:是对容器进行编排,确保容器化应用,比如:Docker…..等容器,能够在集群中高效运行。

比如:K8S提供智能的容器调度功能,能根据,比如:资源需求、策略、和约束条件,将容器调度到合适的节点上运行。

以及,K8S还能够自动管理、和协调多个容器的生命周期,使得应用能够平稳运行、扩展、和升级。

K8S的这些功能,使其成为现代云原生应用开发、和部署的核心工具,应用于大规模的企业、和开发团队。

 

Kubernetes架构

K8S架构,如下图所示:

K8S原理架构详解(万字图文总结)-mikechen

K8S的架构,和它的原型项目 :“Borg“ 非常类似,都由 Master 、和 Node 两种节点组成。

Master 、和 Node 两种节点,这两种角色分别对应着:控制节点、和计算节点。

Master 节点负责:全局管理、和调度,Node 节点负责:具体的容器运行、和资源管理。

所以,如果你想掌握好K8S原理,你需要对 Master(控制) 、和 Node (计算)节点有更深入的了解@mikechen

 

Master节点

首先,我们来看Master 节点,Master 节点是 K8S集群的控制中心,负责:管理、和调度集群中的所有资源。

如下所示:

        +---------------+----------------+
        |       Master-controller-manager  |
        +---------------+----------------+
                        |
                        v
+-----------------------+----------------------+
|                      Master Node             |
+-----------------------+----------------------+

Master类似人的“大脑”,负责指挥“Node节点”来调度。

Master节点的整体架构,如下图(黄框)所示:

K8S原理架构详解(万字图文总结)-mikechen

主要负责,如下内容:

1、集群管理

首先,管理集群的状态、配置、和生命周期。

其次,维护集群的元数据,确保集群的整体健康状态。

2、API 服务

提供集群的 API 接口,处理来自用户、和内部组件的请求。

3、资源调度

根据资源需求、和调度策略,将工作负载(Pod),分配到适当的节点上运行。

4、监控集群

监控集群状态,确保实际状态、与期望状态一致。

以及,处理自动化任务,如:副本管理、故障恢复…等。

 

Master主节点组件

Master 节点在 K8S集群中起着至关重要的作用,它通过 kube-apiserver 提供集群的 API 服务,通过 kube-scheduler 进行资源调度。

以及,通过 kube-controller-manager 进行控制管理,并使用 etcd 来存储集群的配置数据、和状态信息,下面我分别详解@mikechen。

1.API Server

API Server提供 Kubernetes 集群的 API 服务,是所有其他组件、和用户交互的入口。

如下图所示:

K8S原理架构详解(万字图文总结)-mikechen

提供 Kubernetes 集群的统一接口,以及处理 RESTful API 请求。

比如:所有对集群的操作,如创建、更新、删除 Pod…都通过 kube-apiserver 进行。

大致工作流程,如下:

Client --> [kube-apiserver] --> [etcd]

首先,apiserver ,负责接收请求,比如刚才提到的:创建、更新、删除 Pod……..等等操作。

其次,kube-apiserver 将接收到的请求验证和授权后,将数据写入 etcd(Key-Value)存储。

然后,其他组件,如: kube-scheduler 、和 kube-controller-manager,通过监听 API Server 来获取最新的集群状态。

 

2.键值存储etcd

etcd 是一个分布式键值存储系统,所有的集群状态信息,比如: Pod 状态、Service 配置…等,都保存在 etcd 中。

[kube-apiserver] <--> [etcd Cluster]

提供数据的一致性和高可用性。

比如:数据一致性,使用 Raft 共识算法,来保证数据一致性。

再比如:高可用性,etcd 的高可用性通过部署多个副本实现,通常是奇数个节点,来保证高可用性。

 

3.ControllerManager

kube-controller-manager 是 Kubernetes 集群管理的最核心组件,通过运行多个控制器来维持集群的期望状态。

负责管理 K8S集群中的控制器,这些控制器通过监控集群状态并进行相应的调整,确保集群处于预期的状态。

如下图所示:

K8S原理架构详解(万字图文总结)-mikechen

常见的控制器,包括: ReplicaSet 控制器、Deployment 控制器、Node 控制器………等。

1.ReplicaSet 控制器

确保指定数量的 Pod 副本始终运行,比如:如果有 Pod 异常终止、或被删除,ReplicaSet 控制器会创建新的 Pod 来补充。

2.Node 控制器

负责:监控节点的健康状态,并在节点失效时执行恢复操作。

比如:标记节点为不可调度或不可用,并重新调度受影响的 Pod。

3.Deployment 控制器

管理 Deployment 对象,支持滚动更新、和回滚操作。

4.Service 控制器

管理 Service 对象,确保服务的 IP 地址、和端点正确配置。

比如:处理服务发现和负载均衡,确保客户端请求能够正确路由到对应的 Pod。

总之,这些控制器负责:管理集群中的各种资源。

从 Pod 副本的管理,到节点健康状态的监控,再到服务发现、和负载均衡。

从而,确保 Kubernetes 集群能够高效、稳定地运行。

 

4.Scheduler

Scheduler:根据资源需求和调度策略,将新创建的 Pod 分配到适合的节点上运行。

[kube-scheduler] <--> [kube-apiserver] --> [Node]

举一个例子,比如:根据资源请求(如 :CPU、内存….等等)、和调度策略(如亲和性等),评估所有可用节点,来调度节点。

 

工作节点的组件

在 Kubernetes 集群中,Node 节点是运行实际应用、和服务的计算资源单元。

每个 Node 节点通常包括以下组件,如下图所示:

K8S原理架构详解(万字图文总结)-mikechen
在 Kubernetes 集群中,kubeletkube-proxy 是每个 Node 节点上运行的两个重要组件。

1.Kubelet

Kubelet 是运行在每个 Node 上的主要组件,负责:管理和维护 Node 上的 Pod。

它确保 Pod 根据 Kubernetes API Server 的定义正确地启动和运行。

以下是 Kubelet 的一个简单配置示例:

containers:
- name: kube-proxy
  image: k8s.gcr.io/kube-proxy:v1.21.0
  command:
  - kube-proxy
  - --config=/etc/kubernetes/kube-proxy-config.yaml
  volumeMounts:
  - mountPath: /etc/kubernetes
    name: kubeconfig
    readOnly: true
volumes:
- name: kubeconfig
  hostPath:
    path: /etc/kubernetes

2.Container Runtime

Container Runtime,也就是容器运行时,负责:容器的实际启动、和管理。

比如,提供容器化的运行环境,如 Docker。

3.Kube-proxy

Kube-Proxy 是每个 Node 上运行的网络代理,负责维护网络规则。

主要解决,如下4点:

负载均衡

Kube-Proxy 在每个 Node 上,配置网络规则,将流量负载均衡到多个 Pod 上;

例如,当请求到达 Service 的 Cluster IP 时,Kube-Proxy 会将请求转发到后端 Pod。

网络规则管理

Kube-Proxy 在 Node 上设置 IP 规则、和路由规则,以实现服务发现、和负载均衡;

服务发现

Kube-Proxy 处理 Service 的 IP 地址、和端点更新,确保流量能够正确路由到 Pod。

集群网络

Kube-Proxy 支持多种网络模式(如: iptables、ipvs。。。),管理 Node 上的网络流量,并保持网络规则的同步。

 

K8S工作流程

K8S工作流程,大致如下:

1.集群初始化

首先,安装和配置Master和Node节点。

2.应用部署

使用kubectl命令行工具或其他工具(如Helm)部署应用。

定义Deployment、Service等资源对象,并通过API Server提交到集群。

3.调度和运行

Scheduler根据调度策略,将Pod分配到合适的Node节点。

Kubelet在Node节点上创建、和管理Pod,确保容器按照定义运行。

4.服务发现和负载均衡

Kube-proxy设置网络规则,确保服务能正确访问和负载均衡;

Service对象提供统一的访问入口、和负载均衡。

5.监控和自动化

Controller Manager持续监控集群状态,进行自动扩展和恢复操作。

使用Prometheus、Grafana等工具监控集群和应用状态。

K8S的应用

Kubernetes 的应用广泛且灵活,涵盖了从容器化应用管理到微服务架构、CI/CD、边缘计算等多个领域。

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

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

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

评论交流
    说说你的看法