K8S基础学习-了解kubernetes机理

kubernetes集群分为俩部分:

kubernetes控制平面

工作节点

 

控制平面的组件:

etcd分布式持久化存储

API服务器

调度器

控制器管理器

这些组件用来存储,管理集群状态。但他们不是运行应用的容器。

 

工作节点上的组件:

kubelet

kube-proxy

docker

 

附加组件:提供额外的功能

DNS服务器

仪表板DASHBOARD

INGRESS控制器

性能监控工具 HEAPSTER METRICS

容器网络接口插件 FLANNEL CALICO  

 

 

组件间如何通信

组件间只能通过API服务器通信,它们之间不会直接通信。API服务器是和ETCD通信的唯一组件,其他组件不会直接和ETCD通信,而是通过API服务器来修改集群状态。

API服务器和其他组件的连接基本都是由组件发起的。

如果使用kubectl来连接容器时,API服务器会向kubelet发起连接。

高可用性: etcd和api服务器的多个实例可以同时并行工作,但是,调度器和控制器管理器只能有一个实例起作用,其他实例处于待命模式。

etcd是k8s存储集群状态和元数据的唯一的地方。

ETCD集群需要对系统的实际状态保持一致,使用的是一致性算法(脑裂算法)如果分裂成不互联的节点组,包含节点多的可以更改状态,小的不可以。恢复连接后,第二个组会更新成第一个的状态。

因此,etcd实例数量应该是奇数,偶数分裂更加容易因为数量相同而宕机。

k8s API服务器作为中心组件,其他组件或客户端都会去调用它,以RESTful的形式提供了可以查询,修改集群状态的CRUD(Create,Read,Update,Delete),并将状态存储到etcd中。

API服务器除了提供一种一致的方式将对象存储到etcd,也对这些对象做校验,这样客户端就无法存入非法对象。

 

 

 通过认证插件认证客户端,用户信息可以从客户端证书或者HTTP标头获取。插件抽取客户端的用户名,用户ID和归属组。

通过授权插件授权客户端,确认用户是否有权限执行操作。

通过准入控制插件验证资源请求

 

 验证资源以及持久化存储

请求通过了所有的准入控制插件后,API服务器会验证存储到ETCD的对象,然后返回一个响应给客户端。

 

API服务器如何通知客户端资源变更。

API服务器没有做其他额外的工作。当你创建一个RS资源时,他不会去创建pod,同时它不会去管理服务的端点。那是控制器管理器的工作。

API服务器甚至没有告诉这些服务器去做什么。

 

调度器:

调度器做的就是通过API服务器更新pod的定义,然后API服务器再去通知kubelet。当目标节点上的kubelet发现该pod被调度到本节点,他就会创建并且运行pod的容器。

 

 控制器:

API服务器只做了存储资源到ETCD和通知客户端有变更的工作。调度器只是给POD分配节点。控制器包括

 

 

 控制器做了许多不同的事情,都通过API服务器监听资源(部署,服务),不论是创建新对象还是更新,删除已有对象,都对变更执行相应操作。

控制器执行一个"调和"循环,将实际状态调整为期望状态,然后将新的实际状态写入资源的status部分。

控制器之间不会直接通信,他们甚至不知道其他控制器的存在。

RC控制器自己不会去运行pod,会创建新的pod清单,发布到API服务器。让调度器和kubelet来做调度工作并运行pod。

在POD中,有应用容器和基础容器,

 

posted @ 2019-05-14 16:46  Normanlin  阅读(440)  评论(0编辑  收藏  举报