带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.1(三)

简介: 带你读《云原生应用开发 Operator原理与实践》第二章 Operator 原理2.1

3. k8sAPI设计规范

 

Kubernetes   API   是集群系统中的重要组成部分,Kubernetes    中各种资源(对象)的数据通过该   API  被传送到后端的持久化存储(ETCD)中。Kubernetes   集群中的各部件之间通过该 API实现解耦合,KubernetesAPI中的资源对象都拥有通用的元数据,资源对象也可能存在嵌套现象,比如在一个 Pod中嵌套多个 Container。创建一个API    对象是指通过    API   调用创建一条有意义的记录,该记录一旦被创建,Kubernetes 将确保对应的资源对象会被自动创建并托管维护。在Kubernetes系统中,大多数情况下, API定义和实现都符合标准的 HTTPREST格式,如通过标准的 HTTP动作POSTPUTGETDELETE来完成对相关资源对象的查询、修改、删除等操作。但同时Kubernetes为某些非标准的REST行为提供了附加的 API,例如,监听某个资源变化的 Watch接口等。另外,某些 API可能违背严格的REST模式,因为接口不是返回单一的 JSON对象,而是返回其他类型的数据,如 JSON对象流Stream)或非结构化的文本日志数据等。 从上面的 CRD定义中可以发现,在 Kubernetes中要想完成一个 CRD,需要指定 Group、VersionKind,这在 KubernetesAPIServer中简称为 GVK。当我们在 Kubernetes中谈论API时,经常会提起 4个术语:GroupsVersions、KindsResources。

(1)      Groups/Versions

Kubernetes中的 API 组简单来说就是相关功能的集合。每个组都有一个或多个版本,它允许我们随着时间的推移改变 API的职责。

(2)      Kinds/Resources

每个 API- 版本包含一个或多个API类型,我们称之为 Kinds。虽然一个Kind可以在不同版本之间改变表单内容,但每个表单必须能够以某种方式存储其他表单的所有数据(我们可以将数据存储在字段或者注释中。 这意味着,使用旧的API版本不会导致新的数据丢失或损坏。

Resources只是 API中的一个 Kind 的使用方式。通常情况下,KindResources间是一对一的映射。 例如,Pods资源对应于 Pod 种类。但是有时同一类型可能由多个资源返回。例如,ScaleKind是由所有 Scale子资源返回的,它由 Deployments/ScaleReplicasets/Scale组成。这就是允许 KubernetesHPA(HorizontalPodAutoscaler)与不同资源交互的原因。然而,使用 CRD每个 Kind 都将对应一个 Resource。

GVK 是定义一种类型的方式。例如,Daemonsets就是 Kubernetes中的一种资源,当我们要求 Kubernetes创建一个 Daemonsets的时候Kubectl是如何知道该怎么向APIServer发送这个信息呢?是所有的不同资源都发向同一个URL,还是每种资源都是不同的?例如Daemonsets资源内容(见代码清单2-5

apiVersion:apps/v1kind:DaemonSetmetadata:

name:node-exporter

这里声明了 apiVersionapps/v1,其实就是隐含了 Groupapps,Versionv1,Kind就是定义的 DaemonSet,而   Kubectl  接收到这个声明之后,就可以根据这个声明去调用 APIServer对应的 URL来获取信息。例如,/api/apps/v1/daemonset这样API 就是由上面的设计规则实现的。Kubernetes  以符合 REST规范的 URI来组织资源。

 

前面介绍了  GVKGroupVersionKind,接下来介绍APIServer的第二个概GVRGroupVersionResource其实理解了GVK  之后再理解GVR  就很容易了,这就是面向对象编程中的类和对象的概念是一样的。Kind     相当于一个类,Resource是具体的 Kind,可以理解为一个类的对象资源。那么 GVR资源如何对应到GVK?这就是RESTMapping 的功能:RESTMapping 可以将指定的一个GVRDaemonset资源过转换映射返回对应的GVK 以及支持的操作等。

(3)      API版本

为了在兼容旧版本的同时不断升级 API,Kubernetes提供了多版本   API   的支持能力,每个版本的API通过一个版本号路径前缀加以区分,例如   /api/v1beta3。通常情况下,新旧几个不同的 API版本都能涵盖所有的 Kubernetes资源对象,在不同的版本之间这些 API存在一些细微差别。Kubernetes开发团队基于 API级别选择版本而不是基于资源和域级别来选择版本,是为了确保API能够描述一个清晰、连续的系统资源和行为的视图,能够控制访问的整个过程和实验性API的访问 。

API 详细说明如下。

GET/<资源名的复数格式>:获得某一类型的资源列表,例如GET/Pods返回一Pod资源列表。

POST/<资源名的复数格式>:创建一个资源,该资源来自用户提供的JSON 对象。

GET/<资源名复数格式 >/<名字 >:通过给出的名称(Name)获得单个资源,例GET /pods/podname返回一个名称为“podname”Pod。

DELETE/< 资源名复数格式 >/< 名字 >:通过给出的名字删除单个资源。删除选项(DeleteOptions)中可以指定的优雅删除(GraceDeletion)的时间(GracePeriodSeconds,该可选项表明了从服务端接收删除请求到资源被删除的时间间隔单位为s不同的类别(Kind)可能为优雅删除时间(Grace    Period)申明默认值。用户提交的优雅删除时间将覆盖该默认值,包括值为0 的优雅删除时间。

PUT/<资源名复数格式 >/<名字>:通过给出的资源名和客户端提供的 JSON对象来更新或创建资源。

PATCH/<资源名复数格式 >/<名字>:选择修改资源详细指定的域。此外,KubernetesAPI 添加了资源变动的观察者模式的API

GET/watch/<资源名复数格式>:随时间变化,不断接收一连串的JSON对象,这些JSON 对象记录了给定资源类别内所有资源对象的变化情况。

GET/watch/<资源名复数格式 >/:随时间变化,不断接收一连串的JSON对象,这些JSON 对象记录了某个给定资源对象的变化情况。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
缓存 Java API
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
【云原生】Spring Cloud Gateway的底层原理与实践方法探究
|
1月前
|
Kubernetes Cloud Native 开发工具
带你读《云原生应用开发:Operator原理与实践》精品文章合集
带你读《云原生应用开发:Operator原理与实践》精品文章合集
|
2月前
|
人工智能 缓存 Kubernetes
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
.NET 9 首个预览版发布:瞄准云原生和智能应用开发
|
3月前
|
存储 SQL Cloud Native
深入了解云原生数据库CockroachDB的概念与实践
作为一种全球领先的分布式SQL数据库,CockroachDB以其高可用性、强一致性和灵活性等特点备受关注。本文将深入探讨CockroachDB的概念、设计思想以及实践应用,并结合实例演示其在云原生环境下的优越表现。
|
3月前
|
Cloud Native 关系型数据库 大数据
CockroachDB:云原生数据库的新概念与实践
本文将介绍CockroachDB,一种先进的云原生数据库,它具备分布式、强一致性和高可用性等特点。我们将探讨CockroachDB的基本原理、架构设计以及在实际应用中的种种优势和挑战。
|
1月前
|
Cloud Native 安全 持续交付
构建未来:云原生架构的演进与实践
【2月更文挑战第30天】 随着数字化转型的深入,企业对于信息技术的需求日益复杂化和动态化。传统的IT架构已难以满足快速迭代、灵活扩展及成本效率的双重要求。云原生技术作为解决这一矛盾的关键途径,通过容器化、微服务、持续集成/持续部署(CI/CD)等手段,实现了应用的快速开发、部署及运维。本文将探讨云原生架构的最新发展,分析其如何助力企业构建更加灵活、高效的业务系统,并结合实际案例,展示云原生转型过程中的最佳实践和面临的挑战。
|
13天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
17 4
|
28天前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
39 0
|
1月前
|
运维 Cloud Native 持续交付
云原生技术的未来展望:如何塑造下一代应用开发
【2月更文挑战第30天】 随着云计算的不断发展,云原生技术已经成为推动现代应用开发的重要力量。本文将深入探讨云原生技术的核心概念,分析其在提高开发效率、降低运维成本以及支持复杂业务场景中的作用。同时,文章还将预测云原生技术的发展趋势,并讨论如何在不断变化的技术环境中保持应用的敏捷性和可靠性。
|
1月前
|
消息中间件 存储 Cloud Native
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程
【Spring云原生系列】Spring RabbitMQ:异步处理机制的基础--消息队列 原理讲解+使用教程

热门文章

最新文章