浅说Kubernetes中API的概念

一、Kubernetes API Conventions
	· 个人觉得深入Kubernetes之前,首先学习一下Kubernetes的API基本概念可能会更有利于去理解整体的代码设计;

	· 从整体看,大体分为了Kind、Resource、API Group三个模块;
	  其中Kind最为负责,下面又分为了Simple Kind、List、Object三类;
	  Object下面又有CRD(Customer Resource Definition) 去定义 CR(Customer Resource);


二、Resource
	· Resource是Kubernetes中API Conventions中最重要的一个模块;

	· Resource是Kubernetes中的实体,api server以yaml或者json等格式在HTTP协议下接收或者发送;
	  Resource可以单独对API server外部暴露,通过一个URL定位到一个具体的Resource;
	  也可以通过集合的方式对外暴露一组同类型的Resource;

	· Resource可以理解为Restful中的资源概念,例如 用户数据库中的一个用户就是resource;
	  一个Resource逻辑上就是一个 有唯一id的 实体; 一个Resource与他的URL一一对应;


三、API Group
	· API Group就是对一组Resource的集合,代表了一组一同暴露的Resource,这组Resource划分为不同的Version暴露出去(GVK中的G);

	· group的命名方式采用域名式命名,而kubernetes自己可以使用空域名定义group,例如"apps"、"events"、"node"、"policy"(这些都是group但是没有域名);

	· Group和Version共同构建了API Version的概念,格式为group/Version(也就是GVK中的GV),例如"policy.k8s.io/v1";
	  一个Group下面可以有多个Version,例如"apps/v1beta1"、"apps/v1beta2"、"apps/v1";


四、Kind
	· 每一个Kind就是一个"Schema",就是定义一个事务可以拥有什么属性的"文档";

	· 例如 可以说"狮子"是一个Kind,"大象"又是另一个Kind,它们分别定义了两种事物拥有不同的属性的集合;

	· 在Kubernetes中,常见的Kind有"Pod"、"ReplicaSet"、"StatefulSet"等等,它们都是不同属性集,而不同方法的对象就是不同的Kind;

	· Kind和Resource的关系:
		举个例子,Resource就像是动物园中一只只动物构成的群体,而Kind就是教科书上"狮子"、"大象"的类型定义;
		每一个Resource对应唯一的Kind,而Kind可能需要多个Resource构成,例如 Pod(Kind)需要除了Pods(Resource)以外还需要status等;

	· Kind的三种类型(Type:sub category):
		1. Object:	表示该type下kind的实例代表的是存储的实体(etcd);
		2. List:	表示该type下Kind的实例代表一组实体;
		3. Simple Kind:	表示该type下的kin的实例一般是那些临时使用的、虚拟的、不会单独存储的实体;

	· Object:	
		· Object代表了存储在系统中的实体的类型,
		  使用者创建一个Object实例时描述的是"期望",记录在Spec部分;
		  而系统在得到这个实例时,会负责满足该期望,把实时状态记录在Status中;

		· 一个Object实例可以通过一个或者多个Resource来进行操作;
		  例如一个Pod实例,可以通过操作pods Resource和其status Resource进行操作;

		· Object定义的Schema中必要的属性:
			1. apiVersion + kind:也就是GVK;
			2. metadata:用于区分于其他对象的信息,例如"name"、"annotation"等等;
			3. spec:用于描述实例期待的资源状态;
		  可以发现这就是yaml文件中的字段。

	· List:	
		· List类型的Kind是以List结尾,他代表了一个类型,该类型的实例是由多个resource实例构成的集合;
		  List描述的是这类集合具有的属性(Schema);
		  可以通过URL返回该Kind对应的所有Resource(所有Object实例中的Resource)

		· 例如 PodList、ServiceList、NodeList

	· Simple Kind:	
		· 是一些不会被单独存储的实体类型,往往以子Object的形式出现,用于对外暴露针对主Object某些方面;

		· 例如 Scale就是一个Simple Kind,它是deployment Kind的一个"投影",通过Scale使用者使用"Kubectl scale"命令来对deployment进行扩容或者缩容;
		  同时作为一个资源,它也会对应Url,就可以被外界通过restful访问;

		· 当主Object过大,内容过多时,如果他的"操作面"始终是整体的话,那么所有使用者就能修改那些与自己无关的部分;
		  通过定制小粒度的simple kind,让它只包含一部分object属性,去暴露给相关的操作人,就可以正对这个simple Kind去制定RBAC(基于角色的访问控制);
		  从这个角度来看,simple kind可以理解为view;


五、CRD 和 CR
	· CRD:
		· Custom Resource Definition(自定义资源类型),根据之前的介绍,或许成为COD更合适一点;
		  它的产物是Custom Resource (Custom Object),是一个Schema,规定了一类实体可以有什么属性;

		· CRD自身也是一个API Object(Kind -- Object),它的GVK是:
			"group": "apiextensions.k8s.io",
			"kind": "CustomResourceDefinition",
			"version": "v1"

	· CR:
		· CR(或者说CO)是CRD的产物,根据CRD确定自身有什么属性,为这些属性赋值来定义一个该实例;

		· 一个CR实例可以直接类比为一个Pod实例,可以像Pod这个Object一样去使用一个CR;
		

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值