k8架构原理

  

一、k8架构图
 k8架构原理

  

二,k8架构模式:
主(集群)/工人(节点)架构

  

主组件:
1。kube-apiserver:

  
 <代码>提供restful接口指令供客户端或者其他组件调用,客户端指的是kubectl命令行工具,其他通信组件包括控制器和调度器 
  

2. etcd:   

 <代码>负责存储集群状态 
  

3.控制器   
 <代码>管理并实现美丽的的各种流程,使用k8管理容器,而不是直接使用容器,目的就是为容器提供统一编排,为用户提供声明式的调用,k8维护着用户的期望,用户只要告诉k8需要几个服务,需要什么配置就可以了,不需要关心底层k8怎么实现的,但是k8除了正常的创建管理,还伴随着异常情况的发生,比如容器挂掉,网络不通等,这时候需要控制器监控资源状态等信息并更新到etcd,控制器相当于运维工程师的角色。
  k8把各种操作都认为是某种类型的某个方法,从而将不同的操作分给不同的方法执行,k8认为一切皆资源,繁复的内容抽象成不同的资源放到不同的方法上执行 
  

4.调度器   

 <代码>资源调度,根据系统资源的使用情况,将pod合理分配到相应的节点节点,并通过apiserve告知etcd更新数据库代码 之前
  

工人组件:
1. kubelet

  
 <代码>控制器如何监控不通资源信息,调度器如何给分仓配资源,实际的操作都是交给kubelet来完成的,例如,创建豆荚,删除仓,创建数据卷等 
  

2. kube-proxy   

 <代码>按照用户的期望创建好环境,舱容器怎么才能对外提供服务吗?
  豆荚生成是会自动分配一个ip,但这个ip是动态生成的,并不固定,这时就需要一个固定ip代理舱来对外提供服务,这个就是服务资源,扮演者服务发现和负载均衡的功能。
  但服务是怎么代理到豆荚上呢?
  这时就需要core-dns,为新创建的豆荚注册动态DNS。给仓的服务添加iptables/ipv规则,用于服务发现和负载均衡,所有网络相关的请求响应都有kube-proxy代理完成 
  

3。容器运行时

  
 <代码>负责容器运行 
  

三、工作流程

  

1。创建pod

  
      <李> apiserver接收到用户创建群的请求,会根据用户提交的参数值创建pod对象,apiserver检测用户提交的参数,参数不合规则创建失败李   <李> pod对象创建成功后,etcd会持久化这个对象,测试pod处于等待状态李   <李>调度器会通过list-watch机制调用apiserver监听etcd数据变化,如果发现有个吊舱未绑定到节点上,就会读取etcd存储的豆荚信息,根据策略算法,将舱调度到相应的节点上李   <李>此时各节点也会通过kubectl调用apiserver接口监听etcd对象状态变化,被分配到的节点发现当前的节点状态,和用户期望的状态有个舱不一致,他就会创建pod(包括挂载数据卷,创建暂停容器接管应用容器网络),创建成功后,会将信息通过apiserver更新到etcd中。   
  

2。控制器创建pod
第1步成功之后,需要控制器接手监控工作
用户期望pod副本数是3,但此时宕掉一个豆荚,控制器循环监测到etcd中存储的对象状态有些与系统当前状态不一致(此例例吗?子中就是那个宕掉的容器?导致的),replicationController, replicaSet,部署等等定义必须有3个容吗?,然?目前系统只有2个运行,然后通过对应的?用户定义时存储在etcd的对象类型,相应的控制器会去响应,发现少了了1个容器吗?,需要创建1个新容器吗?时,由该控制器请求api服务器创建新容器,接下来跟第一步相同

  

总结:   

      <李> etcd仅能通过api服务器访问李   <李> etcd中通过api服务器来保证存储数据是结构化的李   <李>控制器,调度器、kubelet kube-proxy这些组件都是实质上都是通过看etcd中存储的对象状态来进?行行对应?工作的,但是必须通过api服务器;他们之间是没有调度的上下级关系的,?而是通过etcd对象状态的变化来触发对应的事件处理理李   <李> k8内部?工作的机制实质是维持?用户提交的期望(存储在etcd)与系统当前状态?一致李   <李> k8中有个控制回路?一直循环监控着系统状态李   

k8架构原理