Kubernetes是将一组主机上的内存、cpu、硬盘等资源,整合为一个大的资源池。当需要运行容器时,用户不需要指定其运行再哪个主机上,只需要向Kubernetes的接口提出请求,然后由Kubernetes自行调度运行到一个最适合其运行的宿主机上作为容器运行起来。用户无需再面对一个个独立的主机,只需要向Kubernetes资源池的接口提出请求即可。
若用户需要运行两个容器,且2个容器间需要通信,Kubernetes则会抽象出一些组件。当一个服务容器启动时,会注册到Kubernetes的注册中心,当第二个容器启动后要访问第一个容器时,先向Kubernetes的注册中心查询服务,而后直接拿着查询获得的地址直接请求即可。
当所创建的实例无法承载客户端的请求时,传统的做法是,加服务器部署服务接入负载均均衡。而Kubernetes则为自动扩展一个容器,然后自动加入到负载均衡中。当然可以手动介入。
Kubernetes的自动扩容也可以为纯自动模式的,只需要在各个容器前加一个控制器用来监控控制器下面容器的数量要完全符合用户的请求。我们还可以在此控制器之前再加一层控制器,此二层控制器接入到监控系统上去,监控系统用来监控容器的CPU、内存等容量,当发现容器内资源不足时,自动指挥其一级控制器进行添加实例。当容器的CPU和内存使用率低于一定指标后,Kubernetes会自动删除一些实例。从而实现自动扩缩容。
控制器相关
在Kubernetes上有2种控制器,controller
和operator
。
-
controller:为简单的控制器 -
operator:为复杂的、能单独管理应用集群的控制器。
Kubernetes运行流程
当需要在Kubernetes集群上运行容器时,首先需要先创建出一个控制器,并告诉控制器需要干什么(如运行3个nginx容器),其会自己调用Kubernetes的api,更具用户需要创建的容器的要求,如镜像、容器数等等,在Kubernetes上创建出相应的容器。
Kubernetes节点的角色
Kubernetes的节点分为2类角色,第一类角色为Master,第二类为worker。
-
Master Node:主要用来管理集群中的所有Worker Node,包括Master Node自己。 -
Worker Node:主要为集群中的工作节点,所有的容器均会运行在此节点上。
Kubernetes的组件
Kubernetes在Master和Worker上的组件拥有各种组件。
Master Node:
-
API server:用来提供API -
Controller Manager:控制器管理器,负责管理各种各样的控制器。 -
Scheduler:调度器 -
Etcd:强一致的分分布式注册中心,KV存储服务器,此为Master的状态存储。
Worker Node:
-
kubelet:用来和master建立通信,始终watch着API server,执行Master所下发的任务。 -
kube-proxy:代理服务组件。 -
continer engine:容器引擎,docker或其他。
Worker Node上的三个组件和API server建立关联关系,他们都是API server的客户端,他们不和Master的其他组件建立交互。所以API server为整体的交互中心,但是API server除了交互不做其他事情,真正做事情的是Controller Manager。
Kubernetes各组件的工作流程
当用户请求创建容器时,API server接收到请求将其写入etcd
中,Controller Manager
和Scheduler
根据API server
中保存的所有worker
节点 的相关状态和用户所需要创建的容器的相关要求,选出最优的节点发送给API server
。各worker
节点 上的kubelet
始终watch着API server
,当查看到有和自己节点相关的创建容器请求时,自动在自己的worker
节点上创建出相应的容器。
原文始发于微信公众号(TechOps之窗):kubernetes功能组件介绍
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/278862.html