CRD 就像 Kubernetes 中的一张表!

作者:Hiro OSAKI

翻译:Bach(才云)

校对:星空下的文仔(才云)、bot(才云)

CRD(Custom Resource Definition)是 Kubernetes 中的特殊资源。如果我们只是以常规方式使用 Kubernetes,那就不必创建该资源,因此,CRD 对于许多用户而言并不那么重要。但它会经常出现在前沿的博客文章、kubernetes.io 的文档和社区讨论中。本文就简单介绍一下 CRD 是什么?我们什么时候使用?一旦需要,要如何创建?

K8sMeetup

CRD 是什么?

**CRD 就是一个数据库表。**举个例子,我们在数据库中创建一个名为 Fruit 的表,该表包含了许多记录(record),例如 apple 、banana 和 orange。这些记录有很多列(column),如“甜度”、“味道”和“重量”,来显示水果的特性。CRD 就像一个 Fruit 表。

CRD 就像 Kubernetes 中的一张表!

CR(Custom Resource,自定义资源)的每个记录(record)都类似于 apple。

CRD 就像 Kubernetes 中的一张表!

创建 CRD(表)之后,我们可以添加或删除 CR(记录)。

**为什么需要 CRD?**因为越来越多的用户熟悉了 Kubernetes 的用法后,希望更广泛地使用它。他们将更多数据输入 Kubernetes 来使用,这些数据格式互不相同,而且不是 Kubernetes 原本就有定义的,因此他们在 Kubernetes 中创建表的种类,并设置自定义的列名或类型,就像在数据库中那样定义表,这就是 CRD 的由来。

如何创建 CRD?

如上所述,CRD 是一个表,创建表时,我们需要定义表的格式,例如列名和类型,这些元素在 CRD 文件中以 YAML 或 JSON 格式描述。

CR 以 YAML 或 JSON 格式描述记录(record)的每个值。

CRD 就像 Kubernetes 中的一张表!

这是 CRD 内部详细信息。

CRD 就像 Kubernetes 中的一张表!

CRD 格式分为三个部分。

  • 常规部分(General part):与其他 Kubernetes 资源相同。元数据包括 CRD 的名称本身(name: "fruit-crd"等)。apiVersionkind 也是必需的。

  • 表级信息(Table level info):表名(kind: "Fruit")、命令行的小写名称(simpler: "fruit")、复数形式(plural: "fruits"

  • 列级信息(Column level info):列名("sweetness")、列类型("boolean"、"string"、"integer"、"object")、Nested Object(props: <child object name and columns>)。这些格式遵循 OpenAPISpecification v3。

更多详细信息可以参阅官方文档:

https://kubernetes.io/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/#create-a-customresourcedefinition

检验 CRD 功能

CRD 真的是表吗?下面让我们来验证一下。

有人可能不记得 CRD 的格式,这里介绍一个创建 CRD 的更简单方法,即使没有编写 CRD,只有一个“表”的定义,我们仍然可以用 Operator(CRD 自动创建工具)生成 CRD。表并不复杂,其中 columns 包含了列名称和类型。
CRD 就像 Kubernetes 中的一张表!

简单定义一个“表”

在将此表安装到 Kubernetes 中之后,Operator 会自动生成以下 CRD。如果不想用 Operator,我们也可以自己生成它。如果要安装 Operator,运行以下命令:

kubectl apply -f
https://raw.githubusercontent.com/onelittlenightmusic/k8sasdb/master/install.yaml

成功安装 Operator 之后,用以下命令检查容器是否在运行:

kubectl get pod -n k8sasdb-system
NAME READY STATUS RESTARTS AGE
k8sasdb-controller-manager-9dbf54b4f-hzrt9 2/2 Running 0 8s

生成 CRD:
CRD 就像 Kubernetes 中的一张表!

CRD(左:常规部分和表级信息,右:列级信息)

然后添加以下 CR:
CRD 就像 Kubernetes 中的一张表!

CR "Fruit"

下面检验表和记录操作的结果:

创建表

kubectl create -f fruit.yaml

CRD 就像 Kubernetes 中的一张表!

→ Success(已安装 CRD = 已创建表)

CRD 就像 Kubernetes 中的一张表!

这等于 SQL 的 CREATE TABLE fruits;

创建记录(record)

kubectl create -f apple.yaml

CRD 就像 Kubernetes 中的一张表!

→Success(已安装 CR = 已创建记录)

这等于 INSERT INTO fruits values('apple', ...);。

获取记录列表

kubectl get fruits

CRD 就像 Kubernetes 中的一张表!

→Success(列出 2 个 CR,并显示每列)

这就像 SQL 查询 SELECT * FROM fruits; 结果。

获取记录

kubectl get fruit apple

CRD 就像 Kubernetes 中的一张表!

→Success,这相当于 SELECT * FROM fruits WHERE name = 'apple';

删除记录

kubectl get fruit apple

CRD 就像 Kubernetes 中的一张表!

删除后,整个列表的检查命令没有显示“apple”。

CRD 就像 Kubernetes 中的一张表!

→Success。这就是 DELETE FROM fruits WHERE name = 'banana';

总结

  • CRD 只是 Kubernetes 中的一张表。

  • 可以使用 CRD 创建新表。

  • 可以添加带有 CR 的记录。

  • 可以在 CRD 中定义表的 schema(列名、类型等)。

  • 掌握 CRD、CR 和 kubectl 命令后,可以将各种数据输入 Kubernetes。

  • 即使不记得 CRD 格式,类似 Operator 的生成器也能帮助管理 CRD。

原文链接:https://mp.weixin.qq.com/s/YNELBbUZ1pUnCanVlVkxOg

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

CRD 就像 Kubernetes 中的一张表! - HelloWorld