1.

 服务之间的发现,服务之间的通信‘’

 三种:

      集群内部之间的服务的访问

         通过Service,Service有ClusterIp,service可以指向多个pod,但是程序中布满了service的ip显然不雅,所以k8s提供了DNS

        可以通过service的名字去访问service的ip。

        

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress

        第二种情况,多个实例之间需要交互的时候,需要知道服务列表具体有哪些pod,这种类型的Service就返回给podA一个列表。

         

k8s服务暴露指ingress k8s内部做服务发现_DNS_02

      

      集群内的服务和集群外的服务之间的通信

        集群内部的容器访问外部的mysql的时候,第一种是直接写死的ip去访问。

        

k8s服务暴露指ingress k8s内部做服务发现_命名空间_03

                第二种方式是我可以像访问集群内部的服务一样去访问这个Mysql,先定义一个空的Service, 然后我们手动的定义一个EndPoint,他们的名字一样,然后他们会绑定在一起,EndPoint配置的就是一个具体的外部服务的地址。

               

k8s服务暴露指ingress k8s内部做服务发现_配置文件_04

               

集群外的服务到集群内的服务的通信(常见)

       通过NodePort,  NodePort是一种Service的类型,跟上面的Service相比除了有一个ClusterIp,之外他还会在每一个节点上都暴露一个端口出来,集群中的任何一个节点都会有一个端口,(用的少)

      

k8s服务暴露指ingress k8s内部做服务发现_命名空间_05

      另外一种方式HostPort,  只是一个简单的端口映射。

      

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress_06

        第三种情框  浏览器访问集群内部的一个pod,

k8s服务暴露指ingress k8s内部做服务发现_命名空间_07

      ingress:  配置文件,在哪个域名下,哪个路径下,要解析到哪个Service,具体的实现由IngressController实现,

      

k8s服务暴露指ingress k8s内部做服务发现_命名空间_08

 

 

   社区的Ingress实现

    Ingress-nginx:使集群服务具备通过ip访问的能力

    

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress_09

    支持多个:

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress_10

  NameSpace:


k8s服务暴露指ingress k8s内部做服务发现_配置文件_11

   k8s会创建一个叫default的默认的命名空间。

   

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress_12

   拿到命名空间下的所有资源:

  

k8s服务暴露指ingress k8s内部做服务发现_配置文件_13

  

k8s服务暴露指ingress k8s内部做服务发现_配置文件_14

  Resources:

   

k8s服务暴露指ingress k8s内部做服务发现_配置文件_15

   每个节点都要想主节点上报自己的资源情况。

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress_16

  

k8s服务暴露指ingress k8s内部做服务发现_k8s服务暴露指ingress_17

 Request是需要预留出来的资源,哪怕服务跑起来自用一点点资源,但是还是要预留出来,其他服务不能占用这个被预留的资源。如果内存改的非常的大,那么pod就会一直处于pending状态,他就一直起不来,没有满足他的需求的条件。cpu改的非常的大,pod处于pending的状态.,也是因为没有满足要求的条件。

  pending状态的时候可以通过describe来查看原因

 

k8s服务暴露指ingress k8s内部做服务发现_命名空间_18


 当CPU不满足的时候就可以看到没有足够的CPU资源的错误信息

k8s服务暴露指ingress k8s内部做服务发现_DNS_19

 

如果内存的使用超过了limit的限制值,那么这个pod会被直接kill掉,如果cpu则不会,因为CPU是压缩资源。

内存资源出现竞争会杀pod,而cpu资源出现竞争不会杀pod。

那么如何查看这个服务用了多少的内存和CPU呢?

找到在这个节点上运行的容器:

k8s服务暴露指ingress k8s内部做服务发现_DNS_20

k8s服务暴露指ingress k8s内部做服务发现_命名空间_21

服务的可靠性的最高,这两个的值相等的时候,如果这两个值都没有设置就是最不可靠。

k8s服务暴露指ingress k8s内部做服务发现_命名空间_22

label:

  label的本质就是key value   ,label可以贴到多个资源

 

k8s服务暴露指ingress k8s内部做服务发现_命名空间_23

k8s服务暴露指ingress k8s内部做服务发现_命名空间_24

   意思就是这个Deploy只负责,具有app(key)为web-demo(value)这样标签的pod

   

k8s服务暴露指ingress k8s内部做服务发现_配置文件_25