CRD 就像 Kubernetes 中的一張表!

做者:Hiro OSAKI

翻譯:Bach(才雲)git

校對:星空下的文仔(才雲)、bot(才雲)github

CRD(Custom Resource Definition)是 Kubernetes 中的特殊資源。若是咱們只是以常規方式使用 Kubernetes,那就沒必要建立該資源,所以,CRD 對於許多用戶而言並不那麼重要。但它會常常出如今前沿的博客文章、kubernetes.io 的文檔和社區討論中。本文就簡單介紹一下 CRD 是什麼?咱們何時使用?一旦須要,要如何建立?數據庫

K8sMeetupapi

CRD 是什麼?app

CRD 就是一個數據庫表。舉個例子,咱們在數據庫中建立一個名爲 Fruit 的表,該表包含了許多記錄(record),例如 apple 、banana 和 orange。這些記錄有不少列(column),如「甜度」、「味道」和「重量」,來顯示水果的特性。CRD 就像一個 Fruit 表。工具

CR(Custom Resource,自定義資源)的每一個記錄(record)都相似於 apple。ui

建立 CRD(表)以後,咱們能夠添加或刪除 CR(記錄)。spa

爲何須要 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/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

相關文章
相關標籤/搜索