【k8s学习笔记】Kubernetes API概念

Kubernetes(以后简称k8s)集群通过提供一系列 API(基于OpenAPI规范),使用户可以简易查询与操作 k8s的资源对象状态。其关键在于k8s的控制平面中的kube-apiserver 组件以HTTP API形式将API暴露出来。即 用户与集群中的对象都是通过kube-apiserver提供的API进行通讯的。

k8s的HTTP API支持JSON和Protobuf 序列化语法来传参

API版本

为了平缓地进行添加或修改API,k8s设计了API版本的概念,即新的API或资源字段是在新的API版本上变更的,所以它能保持频繁的更新。对应到k8s的配置文件上,API版本对应的关键字是apiVersion

比如每个k8s可接受的配置文件都要以apiVersion开头,举例如下:

apiVersion: v1

API级别

apiVersion分为三种级别,分别为可能会有bug随时变更特性的alpha经测试等待提建议与即时修正的beta稳定不变更的stable

alpha与beta版本的名称中分别包含两者的级别,举例,v1alpha1、v1beta3等;而stable版本仅由v与数字组成,如v1

API分组

为了简化扩展API方式,k8s使用API Groups(API组)进行标识。即通过指定REST URL来设置序列化对象的apiVersion值。当前支持两类API Groups:

  • Core Groups(核心组):无分组标识,通常作为通用组,例:使用/api/v1设置为apiVersion: v1
  • Named Groups(命名组):使用/apis/$GROUP_NAME/$VERSION设置为apiVersion: $GROUP_NAME/$VERSION,举例为batch/v1

开关API分组

通过--runtime-config来开关相应的分组,举例:

  • 禁用batch/v1,只需设置--runtime-config=batch/v1=false

  • 开启使用batch/v2alpha1,设置--runtime-config=batch/v2alpha1即可。

此标记支持同时传入一系列用逗号分离的key=value对来动态修改运行中的配置

注意:开关API分组需重启kube-apiserver与kube-controller-manager以获取runtime-config配置的值

开启extensions/v1beta1组

在extensions/v1beta1的API组下的组件(DaemonSets, Deployments, StatefulSet, NetworkPolicies, PodSecurityPolicies and ReplicaSets)默认都是禁用的,开启deployments和daemonsets只需设置--runtime-config=extensions/v1beta1/deployments=true,extensions/v1beta1/daemonsets=true

注意:为了通用性,个别资源的开关仅支持extensions/v1beta1

持久化

所有的API资源对象都被序列化保存在etcd中

原文地址:https://www.cnblogs.com/hellxz/p/13265381.html