0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

K8S API資源對(duì)象-CRD介紹

阿銘linux ? 來(lái)源:阿銘linux ? 2023-08-08 10:21 ? 次閱讀

在Kubernetes中,像Pod、Service和Deployment這樣的資源是由內(nèi)置的資源類型如Pod、Service和Deployment表示的。

而CustomResourceDefinition(CRD)允許你定義和創(chuàng)建自己的資源類型,以滿足您的應(yīng)用程序或基礎(chǔ)設(shè)施需求。

一旦定義了CRD,可以通過(guò)Kubernetes API服務(wù)器創(chuàng)建和管理自定義資源的實(shí)例,就像處理任何其他本機(jī)資源一樣。

這意味著您可以使用熟悉的Kubernetes工具如kubectl或Kubernetes控制器與管理您的自定義資源進(jìn)行交互。

CRD提供了一種擴(kuò)展Kubernetes平臺(tái)以適應(yīng)特定要求的方式,并能夠構(gòu)建自定義的運(yùn)算符或控制器來(lái)自動(dòng)化管理自定義資源。

運(yùn)算符可以監(jiān)視自定義資源的更改并相應(yīng)地采取操作,例如提供額外的資源、擴(kuò)展或執(zhí)行自定義操作。

CRD已成為擴(kuò)展Kubernetes的流行機(jī)制,在Kubernetes生態(tài)系統(tǒng)中的各種項(xiàng)目和框架中廣泛使用,如Prometheus、Istio和Knative。 示例:

cat > crd-example.yaml << EOF
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: myresources.example.com
spec:
  group: example.com
  versions:
    - name: v1
      served: true
      storage: true
      schema:
        openAPIV3Schema:
          description: Define CronTab YAML Spec
          type: object
          properties:
            spec:
              type: object
              properties:
                name:
                  type: string
                age:
                  type: integer
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource
    shortNames:
      - mr
EOF

說(shuō)明:

和我們定義普通的資源對(duì)象比較類似,這里可以隨意定義一個(gè)自定義的資源對(duì)象,但是在創(chuàng)建資源的時(shí)候,肯定不是任由我們隨意去編寫 YAML 文件的,當(dāng)我們把上面的 CRD 文件提交給 Kubernetes 之后,Kubernetes 會(huì)對(duì)我們提交的聲明文件進(jìn)行校驗(yàn),從定義可以看出 CRD 是基于 OpenAPI v3 schem 進(jìn)行規(guī)范的。

apiVersion:指定所使用的 CRD API 的版本,此示例使用了 apiextensions.k8s.io/v1 版本。

kind:定義資源類型為 CustomResourceDefinition。

metadata:定義元數(shù)據(jù),其中 name 字段指定了 CRD 的名稱為 myresources.example.com。

spec:定義了 CRD 的規(guī)范。

group:指定 CRD 所屬的 API 組,此示例中為 example.com。

versions:定義 CRD 的版本列表。

name:指定版本的名稱,此示例中為 v1。

served:指定此版本是否由 API 服務(wù)器提供服務(wù),設(shè)為 true 表示提供服務(wù)。

storage:指定此版本是否持久化存儲(chǔ)數(shù)據(jù),設(shè)為 true 表示持久化存儲(chǔ)。

openAPIV3Schema:指定自定義資源的 OpenAPI v3 架構(gòu)定義

type:定義類型

properties:定義對(duì)象屬性

name/age:自定義具體屬性的名字

scope:指定資源的作用域,此示例中為 Namespaced,表示資源在命名空間級(jí)別進(jìn)行管理。

names:定義了資源的名稱相關(guān)信息。

plural:指定資源的復(fù)數(shù)形式名稱,此示例中為 myresources。

singular:指定資源的單數(shù)形式名稱,此示例中為 myresource。

kind:指定資源的類型名稱,此示例中為 MyResource。

shortNames:指定資源的縮略名稱列表,此示例中只包含一個(gè)縮略名稱 mr。

應(yīng)用

kubectl apply -f crd-example.yaml
查看crd
kubectl get crd
一旦創(chuàng)建完自定義的CRD,那么就會(huì)生成一個(gè)自定義的API
/apis/example.com/v1/namespaces/*/myresources/...
創(chuàng)建自定義資源實(shí)例,基于前面CRD定義的資源
cat > myresource-instance.yaml <
應(yīng)用
kubectl apply -f myresource-instance.yaml
查看MyResource
kubectl get MyResource  #或者用短名稱
kubectl get mr

以上定義的CRD,僅僅是寫入到了etcd中,并沒(méi)有其它用處,要想讓它有進(jìn)一步作用,還得去定義Controller

而Controller更多的是開(kāi)發(fā)范疇的事情,咱們暫時(shí)先不涉及。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16361

    瀏覽量

    178043
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7492

    瀏覽量

    163833
  • CRD
    CRD
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    4015
  • YAML
    +關(guān)注

    關(guān)注

    0

    文章

    21

    瀏覽量

    2325

原文標(biāo)題:K8S API資源對(duì)象--CRD

文章出處:【微信號(hào):aming_linux,微信公眾號(hào):阿銘linux】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenStack與K8s結(jié)合的兩種方案的詳細(xì)介紹和比較

    OpenStack與K8S結(jié)合主要有兩種方案。一是K8S部署在OpenStack平臺(tái)之上,二是K8S和OpenStack組件集成。
    的頭像 發(fā)表于 10-14 09:38 ?2.7w次閱讀

    如何使用kubernetes client-go實(shí)踐一個(gè)簡(jiǎn)單的與K8s交互過(guò)程

    【導(dǎo)讀】Kubernetes項(xiàng)目使用Go語(yǔ)言編寫,對(duì)Go api原生支持非常便捷。 本篇文章介紹了如何使用kubernetes client-go實(shí)踐一個(gè)簡(jiǎn)單的與K8s交互過(guò)程
    的頭像 發(fā)表于 02-02 11:16 ?6854次閱讀
    如何使用kubernetes client-go實(shí)踐一個(gè)簡(jiǎn)單的與<b class='flag-5'>K8s</b>交互過(guò)程

    Docker不香嗎為什么還要用K8s

    Docker 雖好用,但面對(duì)強(qiáng)大的集群,成千上萬(wàn)的容器,突然感覺(jué)不香了。 這時(shí)候就需要我們的主角 Kubernetes 上場(chǎng)了,先來(lái)了解一下 K8s 的基本概念,后面再介紹實(shí)踐,由淺入深步步為營(yíng)
    的頭像 發(fā)表于 06-02 11:56 ?3445次閱讀

    簡(jiǎn)單說(shuō)明k8s和Docker之間的關(guān)系

    這篇文章主要介紹k8s和Docker關(guān)系簡(jiǎn)單說(shuō)明,本文利用圖文講解的很透徹,有需要的同學(xué)可以研究下 最近項(xiàng)目用到kubernetes(以下簡(jiǎn)稱k8s,k
    的頭像 發(fā)表于 06-24 15:48 ?3416次閱讀

    K8S集群服務(wù)訪問(wèn)失敗怎么辦 K8S故障處理集錦

    問(wèn)題1:K8S集群服務(wù)訪問(wèn)失??? ? ? 原因分析:證書(shū)不能被識(shí)別,其原因?yàn)椋鹤远x證書(shū),過(guò)期等。 解決方法:更新證書(shū)即可。 問(wèn)題2:K8S集群服務(wù)訪問(wèn)失??? curl: (7) Failed
    的頭像 發(fā)表于 09-01 11:11 ?1.6w次閱讀
    <b class='flag-5'>K8S</b>集群服務(wù)訪問(wèn)失敗怎么辦 <b class='flag-5'>K8S</b>故障處理集錦

    K8S(kubernetes)學(xué)習(xí)指南

    K8S(kubernetes)學(xué)習(xí)指南
    發(fā)表于 06-29 14:14 ?0次下載

    CRD的概念及使用

    CRD的全稱為 CustomResourceDefinitions,即自定義資源。k8s擁有一些內(nèi)置的資源,比如說(shuō)Pod,Deployment,ReplicaSet等等,而
    的頭像 發(fā)表于 09-07 09:49 ?5166次閱讀

    mysql部署在k8s上的實(shí)現(xiàn)方案

    的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)) 應(yīng)用軟件之一。這里主要講 mysql 部署在 k8s 上,mysql 部署在 k8s 上的優(yōu)勢(shì)主要有以下幾點(diǎn)。
    的頭像 發(fā)表于 09-26 10:39 ?2512次閱讀

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes簡(jiǎn)稱K8s,是一個(gè)開(kāi)源的,用于管理云平臺(tái)中多個(gè)主機(jī)上的容器化的應(yīng)用,Kubernetes的目標(biāo)是讓部署容器化的應(yīng)用簡(jiǎn)單并且高效(powerful
    發(fā)表于 07-19 13:14 ?1116次閱讀

    什么是K3sK8s?K3sK8s有什么區(qū)別?

    Kubernetes,通??s寫為 K8s,是領(lǐng)先的容器編排工具。該開(kāi)源項(xiàng)目最初由 Google 開(kāi)發(fā),幫助塑造了現(xiàn)代編排的定義。該系統(tǒng)包括了部署和運(yùn)行容器化系統(tǒng)所需的一切。
    的頭像 發(fā)表于 08-03 10:53 ?7561次閱讀

    k8s生態(tài)鏈包含哪些技術(shù)

    1. Apache APISIX Ingress 定義 ? 在 K8s 生態(tài)中,Ingress 作為表示 K8s 流量入口的一種資源,想要讓其生效,就需要有一個(gè) Ingress Controller
    的頭像 發(fā)表于 08-07 10:56 ?1239次閱讀
    <b class='flag-5'>k8s</b>生態(tài)鏈包含哪些技術(shù)

    K8s多集群管理:為什么需要多集群、多集群的優(yōu)勢(shì)是什么

    隨著K8s和云原生技術(shù)的快速發(fā)展,以及各大廠商在自己的數(shù)據(jù)中心使用K8sAPI進(jìn)行容器化應(yīng)用編排和管理,讓應(yīng)用交付本身變得越來(lái)越標(biāo)準(zhǔn)化和統(tǒng)一化,并且實(shí)現(xiàn)了與底層基礎(chǔ)設(shè)施的完全解耦,為多集群和混合云提供了一個(gè)堅(jiān)實(shí)技術(shù)基礎(chǔ)。
    發(fā)表于 09-14 10:48 ?1328次閱讀
    <b class='flag-5'>K8s</b>多集群管理:為什么需要多集群、多集群的優(yōu)勢(shì)是什么

    k8s云原生開(kāi)發(fā)要求

    Kubernetes(K8s)云原生開(kāi)發(fā)對(duì)硬件有一定要求。CPU方面,建議至少配備2個(gè)邏輯核心,高性能CPU更佳。內(nèi)存至少4GB,但8GB或更高更推薦。存儲(chǔ)需至少20-30GB可用空間,SSD提升
    的頭像 發(fā)表于 10-24 10:03 ?221次閱讀
    <b class='flag-5'>k8s</b>云原生開(kāi)發(fā)要求

    混合云部署k8s集群方法有哪些?

    混合云部署k8s集群方法是首先需在本地與公有云分別建立K8s集群,并確保網(wǎng)絡(luò)連接。接著,配置kubeconfig文件連接兩集群,并安裝云服務(wù)插件以實(shí)現(xiàn)資源互通。然后,編寫Deployment文件部署應(yīng)用,并使用kubectl命令
    的頭像 發(fā)表于 11-07 09:37 ?150次閱讀

    k8s和docker區(qū)別對(duì)比,哪個(gè)更強(qiáng)?

    Docker和Kubernetes(K8s)是容器化技術(shù)的兩大流行工具。Docker關(guān)注構(gòu)建和打包容器,適用于本地開(kāi)發(fā)和單主機(jī)管理;而K8s則提供容器編排和管理平臺(tái),適用于多主機(jī)或云環(huán)境,具備自動(dòng)化
    的頭像 發(fā)表于 12-11 13:55 ?100次閱讀