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 中的一张表!_第1张图片

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

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

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

K8sMeetup

如何创建 CRD?

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

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

CRD 就像 Kubernetes 中的一张表!_第2张图片

这是 CRD 内部详细信息。

CRD 就像 Kubernetes 中的一张表!_第3张图片

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: )。这些格式遵循 OpenAPISpecification v3。

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

https://kubernetes.io/docs/ta...

K8sMeetup

检验 CRD 功能

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

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

CRD 就像 Kubernetes 中的一张表!_第4张图片

简单定义一个“表”

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

kubectl apply -f 
https://raw.githubusercontent...

成功安装 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 中的一张表!_第5张图片

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

然后添加以下 CR:

CRD 就像 Kubernetes 中的一张表!_第6张图片

CR "Fruit"

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

创建表

kubectl create -f fruit.yaml

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

CRD 就像 Kubernetes 中的一张表!_第7张图片

这等于 SQL 的 CREATE TABLE fruits;

创建记录(record)

kubectl create -f apple.yaml

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

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

获取记录列表

kubectl get fruits

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

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

获取记录

kubectl get fruit apple

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

删除记录

kubectl get fruit apple

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

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

K8sMeetup

总结

  • CRD 只是 Kubernetes 中的一张表。
  • 可以使用 CRD 创建新表。
  • 可以添加带有 CR 的记录。
  • 可以在 CRD 中定义表的 schema(列名、类型等)。
  • 掌握 CRD、CR 和 kubectl 命令后,可以将各种数据输入 Kubernetes。
  • 即使不记得 CRD 格式,类似 Operator 的生成器也能帮助管理 CRD。

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

你可能感兴趣的:(kubernetes)