kubernetes(二)Pod核心原理,核心组件

第二章 k8s架构原理&核心组件原理

一、Pod核心原理

pod是什么:

    1、有自己的ip地址

    2、有自己的hostname

  pod实际上也相当于是一个独立的容器(虚拟机),而这个pod容器内部封装的是由docker引擎所创建的容器,可以理解为pod就是一个虚拟化分组,pod内存可以存储一个或者多个容器。

Pod的作用:

  内部封装的是容器,容器内部运行的是开发的应用程序。Pod管理上线的运行的应用程序。

  定义:在通常情况下,在服务上线部署的时候,Pod通常被用来部署一组相关的服务。

      经验来说:(可维护的角度) 建议一个pod内部只允许部署一个容器。

pod底层核心原理:

  1、数据存储

  2、网络

    

在使用了pause容器创建共享网卡后,pod内部容器之间访问就使用localhost访问,就相当于本地访问一样,因此性能非常高。

注意: 一个pod不能分裂存储在多个node节点,但是多个pod副本可以随机分配到不同的node节点进行存储。

 

二、核心组件

  • 组件-RC

    RC (ReplicationController) ---- 副本控制器

    定义:用来确保容器应用的副本数始终保持在用户定义的副本数,即如果有容器异常退出,会自动创建新的Pod来替代,而如果异常多出的容器也会自动回收。

    

 

 

     副本控制器作用:永远保证服务数量和预期的数量保持一致。也就是说服务永远不会宕机,服务永不停机,服务永远处于高可用状态。

    如果pod全部宕机:全部重新创建。

    注意:在新版本中建议用ReplicaSet 来取代ReplicationController。

 

  • 组件二RS

     控制器和pod控制架构---副本控制器是如何控制pod副本的??

     

 

     

    RS  RC 副本控制器到底有和区别?? 为什么要是有RS,不使用RC呢??

      1、RC只支持单个标签的选择器

      2RS不仅支持单个标签选择器,还支持复合选择器。

    Labels 标签,是用来唯一标识一个组件的,k8s中所有的资源对象都可以被标签类进行标识。通过标签标识后,方便,灵活的查询到这个组件。

    查询一组相同业务pod:

      app = MyAPP  此标签可以查询出下面4pod.4个pod是一组相关副本的pod. 标签相同,说明是同一个服务部署了多个副本。

      

 

     

    标签选择器:

      根据标签 key=value 查询与之对应的匹配的资源对象(podrs, deployment……)

      标签选择器标签选择资源对象 (唯一定位一个资源对象)

    

   复合选择器:支持多个标签选择器

 

    Selector:

 

      app = MyApp

 

      release = stable

        

                      注意: 如果单独使用rs,就不支持滚动更新。(在企业中,产品经理不停提出新的需求,项目版本不停的迭代…不停机更新??)

 

 

  • 组件三Deployment  

      Deploymentrs结合使用,支持滚动更新。(发新版,不停机更新)

    

 

     

      资源对象组成关系:

         1deployment部署资源对象,管理rs ,支持滚动更新,更新模式就是新创建一个新的rs,然后由rs创建新的版本的pod.

         2rs副本控制器,控制pod的数量与预期的数量保持一致,rs副本控制器就是来管理pod.

                        注意:rs通过标签选择器选择受rs所管理的资源对象。

  • 组件四HPA

    HPA 自动更新 k8s会根据CPU利用率来进行扩缩容),如果cpu利用率超过80%,此时就会对pod进行扩容,如果cpu利用率低于50%,pod进行缩容

    

 

  • 组件五StatefullSet  

    Deployment ,StatefulSet都是用来部署服务的。

      1、但是deployment被用来部署无状态服务,不适合部署有状态服务。

      2statefulset是用来部署有状态服务的。

 

    无状态:

      1、没有实时的数据需要存储

      2、在服务集群网络中,把其中一个服务抽离出去,过一段时间在加入进来,对服务集群没有任何影响。

    有状态:

      1、有实时数据需要存储

      2、在服务集群网络中,把其中一个服务抽离出去,过一段时间在加入进来,对服务集群有影响。

      ES/MYSQL/Mongodb/……………

    

    为什么pod方式,必须使用statefulSet来进行部署????

    前提: 副本创建,滚动更新,扩容 ,都是创建一个新的pod。当一个pod宕机后,新创建一个新的pod.因此这个新的pod如何共享之前数据,如果不做任何处理,此时这个新的pod就会丢失之前的数据,对于有状态服务来说,就是灾难。

 

                                       

 

      

      Statefulset部署有状态服务网络拓扑结构:

          

 

      Statefulset保证数据不丢失根据pod的名称来挂载数据的,也就是说可以让pod的名称永远保持不变,在pod宕机,重新创建后,根据名称找回数据。

  • 组件六DaemonSet

       Daemonset就是让每一个node节点都运行一个相同的pod

 

三、核心组件

  • 外网访问pod

    Pod结构

      1、有自己的ip

      2、有自己的hostname

      3、有自己的端口

    pod实际上也相当于是一个独立的容器(虚拟机器),而这个pod容器内部封装的是由docker引擎所创建的容器,可以理解为pod就是一个虚拟化分组,pod内存可以存储一个或多个容器

    思考: pod运行在node节点内部,也就是pod实际上是物理机内部的一个进程,pod如何对外网提供服务???

 

posted @ 2020-11-24 14:45  百思得其姐  阅读(395)  评论(0编辑  收藏  举报