对象式编程语言
以数据为中心,代码服务于数据
数据: 对象
代码: 方法
我们首先会写class类,定义一类事务的属性和方法,给属性赋值,就是实例化一个对象。这些对象支持类中的方法,就称为对象式编程语言。
方法限制了一类操作事务上的接口
k8s api
restful风格的api
REST是秒针状态转移,它相当于对象式编程语言,它把这个秒针可操作的事务称之为类别。在REST API中,不是称之为类别,而是称之为resource(资源),定义了只支持哪些方法的一类事务。我们给这些事务,赋值。就能创建出object对象。
resource---> object
对象式编程语言,可以使用语言自己定义方法。而k8s api是在http 和https上做的。所以支持以下方法
method: GET,PUT,POST,PATCH... 等http协议中的方法
k8s的核心任务
k8s本身是个cluster,容器编排系统。k8s运行在一组物理节点上,并提供公共接口,使用户对pod进行增删改查。
Pod里面就是容器,容器里面跑的是程序。由Pod Controller,使用Deployment 控制器来监控Pod,当pod运行失败,重新起一个新的pod,它的IP就会改变。客户端访问原先的IP就会访问不到。为此k8s,基于服务注册和发现功能实现
k8s用户访问服务,是基于service。由于Pod的IP变动,因此每建立一个Pod,如果这个Pod提供服务,我们应该在这个Pod之前提供service,用户访问这个service,service反代给pod,而且可以反代多个Pod。
service也有IP,称为serviceIP或clusterIP
Pod的IP,称为pod-IP
此时service拥有反代和调度功能(pod 有多个), service如何识别相同服务的pod。k8s使用label来给每一个pod进行标识。
label: <key>:<value>
因此service只关联具有相同标签的pod,由label selector(标签选择器来完成)。pod的IP可能会变,但创建出的新pod,都会关联上标签。
service就是使用iptables和ipvs规则来进行调度
service也可能会被使用者删掉,因此它的IP也会改变,用户依然访问不到服务。因此使用DNS,service向DNS注册一个A记录,因此用户访问service名称,当此service被重建会依然向DNS注册一个相同名字的A记录,用户访问名字即可
k8s的 三个IP
node-ip: 出现在物理网卡上
pod-ip: 出现在虚拟网卡上
service-ip:只出现在iptables和ipvs规则和DNS解析记录中
例:一个mnt
n的client:远程客户端
t的client: nginx
m的client: t上的程序
image.png
即k8s上运行一个nmt架构,需要创建3个service和3个controller
kubernets Network
image.png假设node01上的pod为client,node02上的pod为server端,node01 pod通过service访问node02 pod,service拿到node02的pod的IP,返回给node01的pod。node01 的pod,拿到IP直接与ndoe02的pod进行通信。
此过程中,service就是充当个DNS服务,拿到server 端的pod IP,返回给client pod。这个DNS解析的不是主机名,而是cluser ip。
网友评论