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 表。

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

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

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

K8sMeetup

如何创建 CRD?

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

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

这是 CRD 内部详细信息。

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

K8sMeetup

检验 CRD 功能

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

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

简单定义一个“表”

在将此表安装到 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(左:常规部分和表级信息,右:列级信息)

然后添加以下 CR:

CR “Fruit”

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

创建表

kubectl create -f fruit.yaml

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

这等于 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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值