Kubernetes架构原理详解

简介: Kubernetes架构原理详解


Kubernetes是什么,为什么上手这么难?

Kubernetes是一个基于容器技术的分布式集群管理系统。它是谷歌在大规模应用容器技术方面数十年经验的实际成果。因此,支持大规模的集群管理承载着非常多的组件,分布式本身的复杂度非常高。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

Kubernetes到底有什么?

接下来我们一步步来看看Kubernetes到底有什么?

首先,既然是分布式系统,那么肯定有多个Node节点(物理主机或者虚拟机),它们共同构成了一个分布式集群,而这些节点之间会有一个Master节点,统一管理Node节点。如图所示:

问题1:Master节点和Worker节点如何通信?

首先,当Master节点启动时,会运行一个Kube-apiserver进程,它提供了集群管理的API接口,是集群中各个功能模块之间进行数据交互和通信的中心枢纽,同时也提供了一个完善的集群安全机制。

在Node节点上,利用Kubernetes中的kubelet组件,每个Node节点上都会运行一个kubelet进程,负责向Master汇报本节点的运行状态,如Node节点注册、终止、定期健康报告等等,并接收来自Master的命令并创建相应的Pod。

在Kubernetes中,Pod是最基本的运行单元。它与Docker容器略有不同,因为Pod中可能包含一个或多个容器(可以是Docker容器),这些容器内部共享网络资源,即可以通过localhost相互访问。

关于如何在Pod中实现网络共享,每个Pod启动,内部都会启动一个pause容器(谷歌的image)。它使用默认的网络模式,其他容器的网络设置为它,完成网络共享问题。

如图所示:

问题2:Master如何将Pod调度到指定的Node上?

这项工作由Kube-scheduler完成。整个调度过程通过执行一系列复杂的算法,最终为每个Pod计算出一个最优的目标Node,这是由Kube-scheduler进程自动完成的。

最常见的是循环调度(RR)。当然也有可能我们需要将Pod调度到指定的Node上。我们可以通过将节点的标签(Label)与Pod的节点选择器属性进行匹配来达到指定的效果。

如图所示:

问题3:各个节点和Pod的信息统一在哪里维护,谁来维护?

从上面的Pod调度来看,我们必须有一个存储中心来存储每个节点的每个Pod的资源使用情况、健康状态和基本信息,这样Pod调度才能正常进行。

在Kubernetes中,etcd组件被用作高可用和一致的存储库。该组件可以内置在Kubernetes中,也可以外部构建供Kubernetes使用。

集群上的所有配置信息都存储在etcd中。考虑到各个组件的相对独立性和整体的可维护性,这些存储的数据的增删改查都是统一由Kube-apiserver来调用的,并且apiserver还提供了REST支持,不仅为各个内部组件提供服务但也向集群外的用户公开服务。

外部用户可以通过REST接口或kubectl命令行工具管理集群,该工具内部与apiserver通信。

如图所示:

问题4:外部用户如何访问集群中运行的Pod?

前面我们讲了外部用户如何管理Kubernetes,但我们更关心的是内部运行的Pod如何对外访问。

用过Docker的同学应该都知道,如果使用bridge模式,在创建容器的时候会分配一个虚拟IP,外部无法访问该IP。我们需要做一层端口映射,将容器中的端口映射到宿主机的端口Map并绑定,这样外部就可以通过访问宿主机的指定端口来访问容器内部的端口。

那么,Kubernetes的外部访问也是这样实现的吗?答案是否定的,Kubernetes中的情况更加复杂。因为上面说的Docker是单机模式,一个容器对外暴露一个服务。在分布式集群中,服务往往由多个应用提供,以分担访问压力,而这些应用可能分布在多个节点上,这就涉及到跨主机通信。

这里Kubernetes引入了Service的概念,将多个相同的Pod包装成一个完整的服务,对外提供服务。至于获取这些相同的Pod,每个Pod在启动时都会设置labels为attribute。

在服务中,我们传递选择器Selector,选择与整体服务具有相同Name标签属性的Pod,将服务信息通过Apiserver存储到etcd中,由Service Controller完成。同时在每个节点上启动一个kube-proxy进程,负责从服务地址到Pod地址的代理和负载均衡。

如图所示:

问题5:Pod如何动态扩容和伸缩?

既然我们知道服务是由Pod组成的,那么服务的扩展也意味着Pod的扩展。通俗地说,就是在需要的时候将Pod做多个副本,在不需要的时候将Pod缩减到指定的副本数。

在Kubernetes中,使用Replication Controller进行管理,为每个Pod设置一个预期的副本数。当实际副本数量不符合预期时,动态调整数量以达到预期值。所需值可以由我们手动更新,也可以由自动缩放代理更新。如图所示:

问题6:各个组件如何协同工作?

最后说一下Kube-controller-manager进程的作用。我们知道ectd是作为集群数据的存储中心,而apiserver是用来管理数据中心,充当其他进程与数据中心通信的桥梁。

Service Controller和Replication Controller由Kube-controller-manager管理。作为一个守护进程,每个Controller都是一个控制回路,通过apiserver监控集群的共享状态,并尝试将实际状态中不符合预期的变化。关于Controller,管理器还包括Node Controller、ResourceQuota Controller、Namespace Controller等。

如图所示:

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

总结

本文通过问答的方式不涉及任何深入的实现细节。从整体的角度,从概念上介绍了Kubernetes涉及的基本概念。相关用途包括:

  • Node
  • Pod
  • Label
  • Selector
  • Replication Controller
  • Service Controller
  • ResourceQuota Controller
  • Namespace Controller
  • Node Controller

与运行过程相关的是:

  • kube-apiserver
  • kube-controller-manager
  • kube-scheduler
  • kubelet
  • kube-proxy
  • pause


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
9天前
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
23天前
|
人工智能 前端开发 编译器
【AI系统】LLVM 架构设计和原理
本文介绍了LLVM的诞生背景及其与GCC的区别,重点阐述了LLVM的架构特点,包括其组件独立性、中间表示(IR)的优势及整体架构。通过Clang+LLVM的实际编译案例,展示了从C代码到可执行文件的全过程,突显了LLVM在编译器领域的创新与优势。
44 3
|
26天前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
59 1
|
1月前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
1月前
|
SQL Java 数据库连接
Mybatis架构原理和机制,图文详解版,超详细!
MyBatis 是 Java 生态中非常著名的一款 ORM 框架,在一线互联网大厂中应用广泛,Mybatis已经成为了一个必会框架。本文详细解析了MyBatis的架构原理与机制,帮助读者全面提升对MyBatis的理解和应用能力。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Mybatis架构原理和机制,图文详解版,超详细!
|
22天前
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。
|
26天前
|
Kubernetes Cloud Native 持续交付
容器化、Kubernetes与微服务架构的融合
容器化、Kubernetes与微服务架构的融合
45 1
|
1月前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
1月前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
1月前
|
Kubernetes API 调度
【赵渝强老师】Kubernetes的体系架构
本文介绍了Kubernetes的体系架构及其核心组件。Kubernetes采用主从分布式架构,由master主节点和多个node工作节点组成。master节点负责集群管理和调度,运行API Server、scheduler、controller-manager等服务组件;node节点运行kubelet、kube-proxy和Docker容器守护进程,负责实际业务应用的运行。文章还简要介绍了Kubernetes的附加组件及其作用。