深度解析 | K8S API Server之入门须知

简介: 我们首先将对Kubernetes API Server进行概括性的介绍,然后对一些术语进行介绍,最后对API请求流程进行解释。后续会有新的文章对API Server的存储和扩展点等主题进行介绍。本篇是Kubernetes API Server系列第一篇。

我们首先将对Kubernetes API Server进行概括性的介绍,然后对一些术语进行介绍,最后对API请求流程进行解释。后续会有新的文章对API Server的存储和扩展点等主题进行介绍。本篇是Kubernetes API Server系列第一篇。   

API Server简介

在概念层面上,Kubernetes由一系列不同角色的节点组成。Mater节点上的控制平面由API Server,Controller Manager和Scheduler组成。API Server是中心管理实体,是与分布式存储组件(etcd)进行直接通信的唯一组件。API Server提供以下核心功能:

  • 服务于被集群内部工作节点和外部kubectl使用的Kubernetes API

  • 为集群组件提供代理,如Kubernetes UI

  • 允许对对象(例如pod和service等)的状态进行操作

  • 保持分布式存储(etcd)中对象的状态

Kubernetes API是HTTP API,以JSON作为主要的结构化数据的序列化格式,但同时它也支持Google的Protocol Buffers格式进行描述(主要用于集群内部通信)。

考虑到可扩展性原因,Kubernetes支持多个API版本,分别处于不同的API路径上,例如/api/v1或/apis/extensions/v1beta1。不同的API版本意味着不同等级的稳定性和支持度:

  • Alpha级别,例如v1alpha1,默认情况下被禁用,对此功能的支持可能随时会被舍弃,而且不会进行通知,因此只能在短期测试的集群中使用。

  • Beta级别,例如v2beta3,默认情况下启用,意味着代码已经经过良好的测试,但对象的语义可能会在后续beta版或stable版中以不兼容的方式进行更改。

  • Stable级别,例如v1,将出现在多个后续版本的released软件中。

现在来看看HTTP API空间是如何组成的。在顶层,按照以下几个组进行区分:核心组(均位于/api/v1路径下,由于历史原因位于此路径,而不在/apis/core/v1路径下),命名组(位于/apis/$NAME/$VERSION路径下),以及系统范围实体(如/metrics)。

接下来我们将聚焦一个具体的例子:批处理(batch)操作。在Kubernetes 1.5中,存在两个版本的批处理操作:/apis/batch/v1和/apis/batch/v2alpha1,分别暴露不同的可以进行查询和操作的实体集。

下面我们展示一个与API进行交互的示范性例子(使用Minishift工具和代理命令行oc proxy –port=8080,以直接对API进行访问):

$ curl http://127.0.0.1:8080/apis/batch/v1 

“kind”: “APIResourceList”, 

“apiVersion”: “v1”, 

“groupVersion”: “batch/v1”, 

“resources”: [ 

“name”: “jobs”, 

“namespaced”: true, 

“kind”: “Job” 

}, 

“name”: “jobs/status”, 

“namespaced”: true, 

“kind”: “Job” 

}

接下来,使用新的Alpha版本:

$ curl http://127.0.0.1:8080/apis/batch/v2alpha1 

“kind”: “APIResourceList”, 

“apiVersion”: “v1”, 

“groupVersion”: “batch/v2alpha1”, 

“resources”: [ 

“name”: “cronjobs”, 

“namespaced”: true, 

“kind”: “CronJob” 

}, 

“name”: “cronjobs/status”, 

“namespaced”: true, 

“kind”: “CronJob” 

}, 

“name”: “jobs”, 

“namespaced”: true, 

“kind”: “Job” 

}, 

“name”: “jobs/status”, 

“namespaced”: true, 

“kind”: “Job” 

}, 

“name”: “scheduledjobs”, 

“namespaced”: true, 

“kind”: “ScheduledJob” 

}, 

“name”: “scheduledjobs/status”, 

“namespaced”: true, 

“kind”: “ScheduledJob” 

}

通常情况下,通过标准HTTP的POST、PUT、DELETE和GET动作,以JSON作为默认有效载荷,Kubernetes API支持在给定路径上进行创建(create)、更新(update)、删除(delete)、检索(retrieve)操作。

大多数API对象会区分对象的期望状态规格(specification)和对象的当前状态。对象规格(specification)是对期望状态的完整描述,并保存在持久化存储中。

本文转移K8S技术社区-深度解析 | K8S API Server之入门须知

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1天前
|
网络协议 Windows
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
Windows Server 各版本搭建 DNS 服务器实现域名正反向解析
|
2天前
|
存储 机器学习/深度学习 算法
|
5天前
|
存储 NoSQL Redis
Redis入门到通关之数据结构解析-SkipList
Redis入门到通关之数据结构解析-SkipList
21 0
|
5天前
|
存储 NoSQL 安全
Redis入门到通关之数据结构解析-动态字符串SDS
Redis入门到通关之数据结构解析-动态字符串SDS
12 0
|
5天前
|
存储 NoSQL Java
Redis入门到通关之数据结构解析-Dict
Redis入门到通关之数据结构解析-Dict
12 2
|
7天前
|
SQL 关系型数据库 API
从API获取数据并将其插入到PostgreSQL数据库:步骤解析
使用Python处理从API获取的数据并插入到PostgreSQL数据库:安装`psycopg2`,建立数据库连接,确保DataFrame与表结构匹配,然后使用`to_sql`方法将数据插入到已存在的表中。注意数据准备、权限设置、性能优化和安全处理。
|
8天前
|
Java 程序员 数据安全/隐私保护
Javaweb之SpringBootWeb案例之AOP概述及入门的详细解析
Javaweb之SpringBootWeb案例之AOP概述及入门的详细解析
11 0
|
8天前
|
存储 开发工具 对象存储
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
Javaweb之SpringBootWeb案例之阿里云OSS服务入门的详细解析
15 0
|
8天前
|
SQL Java 数据库连接
Javaweb之Mybatis入门程序的详细解析
Javaweb之Mybatis入门程序的详细解析
16 0
|
8天前
|
SQL Java 数据库连接
Javaweb之Mybatis入门的详细解析
Javaweb之Mybatis入门的详细解析
11 0

推荐镜像

更多