REST是representational state transfer的缩写,意为“表征状态转移”,它是一种程序架构风格,基本元素为资源(resource)、表征(representation)和行为(action)。

资源可以分组为集合(collection),每个集合只包含单一类型的资源,并且各资源间是无序的。资源也可以部署于任何集合,它们称为单体资源。事实上,集合本身也是资源,它可以部署于全局级别,位于api的顶层,也可以包含于某个资源中,表现为“子集合”。

k8s系统将一切事物都抽象为api资源,其遵循rest架构风格组织并管理这些资源及其对象,同时还支持通过标准的http方法对资源进行增删改查等管理操作。

1、k8s的资源对象

依据资源的主要功能作为分类标准,k8s的api对象大体可分为工作负载(workload)、发现(discovery)和负载均衡(loadbalance)、配置(config)和存储(storage)、集群(cluster)以及元数据(metadate)五个类别。它们基本上都是围绕一个核心目的而设计:如何更好的运行和丰富pod资源,从而为容器化应用提供更灵活、更完善的操作与管理组件。

(1)工作负载型资源:

pod是工作负载型资源中的基础资源,应用程序分为无状态和有状态两种类型,它们对环境的依赖及工作特性有很大不同,因此,分属两种不同类型的pod控制器来管理,replicationcontroller、replicaset和deployment负责管理无状态应用,statefulset用于管理有状态应用。还有些应用较为独特,他们需要在集群中的每个节点上运行单个pod资源,负责收集日志或运行系统服务等任务,这些pod资源的管理则属于daemonset控制器的分内之事。另外,有些容器化应用需要继续运行以守护进程不间断地提供服务,而有些则应该在正常完成后推出,这些在正常完成后就应该退出的容器化应用则由job控制器负责管控。

replicationcontroller:用于确保每个pod副本在任一时刻均能满足目标数量,保证每个容器或容器组总是运行并且可访问;它是上一代的无状态pod应用控制器。

replicaset:新一代replicationcontroller,它与replicationcontroller的唯一不同之处仅在于支持的标签选择器不同,replicationcontroller只支持等值选择器,而replicaset还额外支持基于集合的选择器。

deployment:用于管理无状态的持久化应用,它用于为pod和replicaset提供声明式更新,是建构在replicaset之上的更为高级的控制器。

statefulset:用于管理有状态的持久化应用,其与deployment的不同之处在于statefulset会为每个pod创建一个独有的持久性标识符,并会确保各pod之间的顺序性。

daemonset:用于确保每个节点都运行了某pod的一个副本,新增的节点一样会被添加此类pod;在节点移除时,此类pod会被回收;daemonset通常用于运行集群存储守护进程,如glusterfs和ceph,还有日志收集进行,如fluentd和logstash,以及监控进程,如prometheus的nodeexporter、collected等

job:用于管理运行完成后即可终止的应用,例如批处理作业任务,job创建一个或多个pod,并确保其符合目标数量,直到pod正常结束而终止。

(2)发现和负载均衡:

pod资源可能会因为任何意外故障而被重建,于是它需要固定的可被发现的方式。另外pod资源仅在集群内可见,它的客户端也可能是集群内的其他pod资源,若要开放给外部网络中的用户访问,则需要事先将其暴露到集群外部,并且要为同一种工作负载的访问流量进行负载均衡。k8s使用标准的资源对象来解决此类问题,它们时用于为工作负载添加发现机制及负载均衡功能的service资源和endpoint资源,以及通过七层代理实现请求流量负载均衡的ingress资源。

(3)配置与存储:

k8s的volume资源支持众多类型的存储设备或存储系统,如glusterfs、ceph rdb和flocker等。configmap资源能够以环境变量或存储卷的方式接入到pod资源的容器中,并且可被多个同类的pod共享引用,从而实现“一次修改,多处生效”。不过,这种方式不适用于存储敏感数据,那是另一类资源类型secret的功能

(4)集群级资源:

pod、deployment、service和configmap等资源属于名称空间级别,k8s还存在一些集群级别的资源,用于定义集群自身配置信息的对象,集群级资源主要包含以下几种类型:

namespace:资源对象名称的作用范围,默认为“default”。

node:k8s集群的工作节点,在当前集群中时唯一的。

role:名称空间级别的由规则组成的权限集合,可被rolebingding引用。

clusterrole:cluster级别的由规则组成的权限集合,可被rolebinding和clusterrolebinding引用

rolebinding:将role中的许可权限绑定在一个或一组用户之上,它隶属于且仅能作用于一个名称空间;绑定时,可以引用同一名称空间中的role,也可以引用全局名称空间中的clusterrole

clusterrolebinding:将clusterrole中定义的许可权限绑定在一个或一组用户之上,它能够引用全局名称空间的clusterrole,并能够通过subject添加相关信息

(5)元数据型资源

此类资源对象用于为集群内部的其他资源配置其行为或特性,如horizontalpodautoscaler资源可用于自动伸缩工作负载类型的资源对象的规模,pod模板资源可用于为pod资源的创建预制模板,而limitrange则可为名称空间的资源设置其cpu和内存等系统级资源的数量限制等。

2、资源及其在api中的组织形式

k8s通常利用标准的resteful术语来描述api概念:

资源类型是指在url中使用的名称,如pod、namespace和service等。

所有资源类型都有一个对应的json表示格式。

隶属于同一种资源类型的对象组成的列表称为集合。

某种类型的单个实例称为资源或对象

kind代表资源对象所属的类型,而这些资源类型大体可以分为三类:对象类、列表类、简单类。

k8s将api分割为多个逻辑集合,称为api群组,它们支持单独启用或禁用,并能够再次分解。apiserver支持在不同的群组中使用不同的版本,允许各组以不同的速度演进,而且也支持同一群组同事存在不同的版本,如apps/v1、apps/v1beta2、apps/v1beta1等。也因此能够在不同的群组中使用同一个资源类型。群组化管理的api使得其可以更轻松地进行扩展。

k8s的api以层级结构组织在一起,每个api群组表现为一个以/apis为根路径的rest路径,不过核心群组core有一个专用的简化路径“/api/v1”.目前,常用的api群组分为两类:

核心群组:rest路径为/api/v1,在资源的配置信息apiversion字段中引用时可以不指定路径,而仅给出版本,如“apiVersion:v1”。

命名的群组:rest路径为/apis/$GROUP_NAME/$VERSION,例如/apis/apps/v1,它在apiversion字段中引用的格式为:“apiVersion:$GROUP_NAME/$VERSION”

另外,k8s还支持用户自定义资源类型,目前常用的方式由三种:修改k8s源代码自定义类型、创建一个自定义的apiserver并将其聚合至集群中、使用自定义资源

3、访问k8s rest api

一种常用的方式是使用curl作为http客户端直接通过apiserver在集群上操作资源对象模拟请求和响应的过程。

k8s资源对象及API群组的更多相关文章

  1. k8s资源清单定义入门

    1.资源分类 a.workload型资源:service.pod.deployment.ReplicaSet.StatefulSet.Job.Cronjob; b.服务发现及服务均衡资源型资源:Ser ...

  2. [置顶] kubernetes资源对象--Label

    概念 Label机制是K8S中一个重要设计,通过Label进行对象弱关联,灵活地分类和选择不同服务或业务,让用户根据自己特定的组织结构以松耦合方式进行服务部署. Label是一对KV,对用户而言非常有 ...

  3. ASP.NET SignalR 系列(五)之群组推送

    在上一章介绍了 一对一推送的方式,这章重点介绍下群组推送和多人推送 群组主要就是用到了方法:Groups.Add(Context.ConnectionId, groupName); 将不同的连接id加 ...

  4. 6.K8s集群升级、etcd备份和恢复、资源对象及其yaml文件使用总结、常用维护命令

    1.K8s集群升级 集群升级有一定的风险,需充分测试验证后实施 集群升级需要停止服务,可以采用逐个节点滚动升级的方式 1.1 准备新版本二进制文件 查看现在的版本 root@k8-master1:~# ...

  5. k8s管理pod资源对象(下)

    一.标签与标签选择器 1.标签是k8s极具特色的功能之一,它能够附加于k8s的任何资源对象之上.简单来说,标签就是键值类型的数据,它们可于资源创建时直接指定,也可随时按需添加于活动对象中,而后即可由标 ...

  6. k8s管理pod资源对象(上)

    一.容器于pod资源对象 现代的容器技术被设计用来运行单个进程时,该进程在容器中pid名称空间中的进程号为1,可直接接收并处理信号,于是,在此进程终止时,容器即终止退出.若要在一个容器中运行多个进程, ...

  7. Prometheus 监控K8S 资源状态对象

    Prometheus 监控K8S 资源状态对象 官方文档:https://github.com/kubernetes/kube-state-metrics kube-state-metrics是一个简 ...

  8. k8s基本概念,资源对象

    kubernetes里的master指的是集群控制节点 master负责是整个集群的管理和控制 kubernetes3大进程 API server 增删改查操作的关键入口 controller man ...

  9. K8S入门系列之集群二进制部署-->master篇(二)

    组件版本和配置策略 组件版本 Kubernetes 1.16.2 Docker 19.03-ce Etcd 3.3.17 https://github.com/etcd-io/etcd/release ...

随机推荐

  1. 【Linux开发】linux设备驱动归纳总结(六):1.中断的实现

    linux设备驱动归纳总结(六):1.中断的实现 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  2. C++学习笔记-引用

    引用是C语言中没有,而在C++中又很重要的一个概念,通过应用,可以得到变量本身,相对于得到变量的值而言,有更大的操作空间. 普通引用 变量的本质 变量名实质上是一段连续存储空间的别名,是一个标号 程序 ...

  3. mysql事务、redo日志、undo日志、checkpoint详解

    转载: https://zhuanlan.zhihu.com/p/34650908 事务: 说起mysql innodb存储引擎的事务,首先想到就是ACID(不知道的请google),数据库是如何做到 ...

  4. Java Web开发技术教程入门-数据库

    补更:阅战阅勇第六天 今天阅读了这本书的第六章-访问数据.首先,这本书讲解的是MySql数据库,它是一个关系型数据库管理系统,是由瑞典MySqlAB公司开发,目前属于Oracle旗下公司.在web应用 ...

  5. Robot Framework(三)项目实践出现的问题以及解决方法

    导航: 1.元素定位失败 2.系统自带的确认弹窗 3.ElementNotVisibleException: Message: element not visible 1.元素定位失败(使用frame ...

  6. solr学习笔记-增加mmesg4J中文分词

    solr版本6.1.centos6.7.mmesg4j版本2.30 solr安装目录:/usr/local/solr-6.1.0 1.下载mmesg4j包: 地址:https://github.com ...

  7. Echarts饼图将数据显示在 legend 旁边

    不多废话,笔记如下 var myEcharts = echarts.init(document.getElementById('doughnut')); option = { tooltip: { t ...

  8. js变量的作用域、变量的提升、函数的提升

    变量的作用域在函数之外声明的变量,叫做全局变量,因为它可被当前文档中的任何其他代码所访问.在函数内部声明的变量,叫做局部变量,因为它只能在当前函数的内部访问. ECMAScript 6 之前的 Jav ...

  9. 【转载】Linux GCC常用命令

    作者:ggjucheng 出处:https://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html 1简介 2简单编译 2.1预处理 2 ...

  10. SVM处理多分类问题

    "one-against-one" approach from sklearn import svm X = [[0], [1], [2], [3]] Y = [0, 1, 2, ...