K8S是云原生最核心的内容,也是云计算的未来,下满我就全面来详解K8S架构@mikechen
K8S
Kubernetes(简称 K8S),是容器编排平台,由 Google开发,现由云原生计算基金会(CNCF)进行维护、和发展。
Kubernetes 提供了一种自动化部署、扩展、和管理容器化应用的机制,使开发者能够高效地构建、和运行分布式系统。
如下图所示:
K8S的核心作用:是对容器进行编排,确保容器化应用,比如:Docker…..等容器,能够在集群中高效运行。
比如:K8S提供智能的容器调度功能,能根据,比如:资源需求、策略、和约束条件,将容器调度到合适的节点上运行。
以及,K8S还能够自动管理、和协调多个容器的生命周期,使得应用能够平稳运行、扩展、和升级。
K8S的这些功能,使其成为现代云原生应用开发、和部署的核心工具,应用于大规模的企业、和开发团队。
Kubernetes架构
K8S架构,如下图所示:
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节点的整体架构,如下图(黄框)所示:
主要负责,如下内容:
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 服务,是所有其他组件、和用户交互的入口。
如下图所示:
提供 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集群中的控制器,这些控制器通过监控集群状态并进行相应的调整,确保集群处于预期的状态。
如下图所示:
常见的控制器,包括: 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 节点通常包括以下组件,如下图所示:
kubelet
和 kube-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面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》