作者: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"
等)。apiVersion
和kind
也是必须的。 - 表级信息(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/ta…
K8sMeetup
测验 CRD 性能
CRD 真的是表吗?上面让咱们来验证一下。
有人可能不记得 CRD 的格局,这里介绍一个创立 CRD 的更简略办法,即便没有编写 CRD,只有一个“表”的定义,咱们依然能够用 Operator(CRD 主动创立工具)生成 CRD。表并不简单,其中 columns
蕴含了列名称和类型。
简略定义一个“表”
在将此表装置到 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(左:惯例局部和表级信息,右:列级信息)
而后增加以下 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