关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

Kubernetes 简介

发布时间:2021-04-21 08:59:41

  Kubernetes是Google开源的一款容器编排工具,它是诞生在Google内部运行N多年的博格系统之上的产物,因此其成熟度从其诞生初期就广泛受到业界的关注,并且迅速成为编排工具市场的主流,其社区活跃度非常高,版本迭代速度也很惊人,它的主要作用是对Docker容器做编排工作,当然,Docker只是容器工具的一种引擎,K8s可支持多种容器引擎,但从目前来说Docker容器引擎是具有绝对优势的,容器需要编排,也很容易理解,因为我们最核心要跑到业务通常都是LNMT/P的不同形式的扩展,但NMT/P他们的运行是有先后顺序的,也就是说MySQL要先启动,然后是Tomcat或PHP,最后是Nginx,而控制这种顺序就需要有容器编排工具来帮我们实现,另外,我们的业务希望7x24小时在线,如何保障?靠人是很难做到实时的,但编排工具可以,K8s帮我们实现了很多控制器,这控制器可以帮我们监控容器运行的状态,并自动帮我们重建(在容器时代重启就是重建)容器,并且还可以在容器处理能力不足时,自动根据我们定义的扩展规则,自动创建新Pod(k8s中最小单元,每个Pod中可有一个或多个容器),并且在压力下去后,自动删除Pod等等功能。

 另外这里是K8s的中文官方文档zh站点:

  https://k8smeetup.github.io/docs/

Kubernetes:
  它至少需要3个Master节点
  Master节点的主要组件:
   API Server: 主要用来接收其它组件发来的请求,并作出相应的处理.
   Scheduler: 主要负责挑选出一个最佳node节点来运行pod,它挑选合适的node,通常分两个阶段,
    第一个阶段:是先通过初步筛选, 根据运行pod的最大要求,如: 4G内存, 6颗CPU等需求,来做
    初步筛选,假如从20台中选出了3台, 则进入第二阶段,在从这3台中选出一台最符合的节点,
    这时就需要综合考量各种因素,最后将选出了一台最佳运行节点告诉给API Server,在由
    Master节点负责调度Pod在该node节点上运行起来。
  Controller:它是负责监控Node上运行的Pod是否正常工作,若它发现自己监控的某个Pod故障了,
    它会向API Server发出通告,并要求Master在其它节点上再重新启动一个相同的Pod,
    然后将故障的Pod Kill掉。
  Controller-Manager:它是负责监控所有Controller是否正常工作的,在Kubernetes集群中,有很多
    个功能各异的Controller, 监控Pod健康状态的Controller只是其中之一,Controller-Manager
    它用于监控这些Controller工作状态的,一旦Controller故障,它将重启一个新的Controller来
    代替它工作。
  但是若Controller-Manager故障怎么办? 其实Master在创建时,要求最少要有3个节点,每个节点都会启动一个Controller-Manager,启动一个为主Controller-Manager,其它两个或多个为备用的Controller-Manager,一旦主Controller-Manager故障,则备用的Controller-Manager将代替它继续工作。


Node0:
  Pod:它是Kubernetes中最基本的单元,一个Pod其实是一个容器的抽象,或叫容器的壳,它内部
    其实就是一个或多个容器。一个容器中只能运行一个应用程序,所以有时一个应用程序需要
    强依赖另一个应用程序一起工作,如:ELK中要收集每个应用的日志,它就需要在每个应用
    节点上部署自己的日志收集器,如Logstash, 那么对于Nginx,它的日志要放入ELK中,它就需要
    和Logstash放到一起,但一个容器中只能运行一个应用程序,所以就需要在一个Pod中运行
    两个容器,来完成这个需求,所以在K8s系统中,将一个Pod做为一个整体,一个基本原子来管理。
  Label Selector:在一个Kubernetes集群中,需要管理的Pod有很多,它们被调度到不同的Node节点上
    运行,这么多Pod运行在不同的Node节点上,怎么对它们做管理? 通过字符串名称?那么一个
    Pod运行过程中故障,又被重启到其它Node上,那么它的字符串名称必然要改变,那么这又怎么
    能唯一标示一个Pod? 所以这就需要用到Label Selector(标签选择器),实际上,Pod在K8s系统
    中它们都有一类标签,如:将运行Nginx的Pod都打一个App=Nginx的标签,将运行HAProxy的Pod
    都打上App=HAProxy,等等...那么在查找所有运行Nginx的Pod时,就可以通过标签选择器,通过
    条件App, 并且其值为Nginx来查询,就可以将所有是App=Nginx的Pod都标记出来,进行管理操作了。
  Kubelet:它运行在Node上,接受APIServer发来的启动,停止或删除Pod请求,并按照请求,在Node实际执行
    操作的守护进程。
  Docker: 是实际Pod的运行环境提供者.



/template/Home/Renwen/PC/Static
×