国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

【云原生】Kubernetes CRD 詳解(Custom Resource Definition)

云計(jì)算 云原生
定義 CRD 對象的操作會使用你所設(shè)定的名字和模式定義(Schema)創(chuàng)建一個新的定制資源, Kubernetes API 負(fù)責(zé)為你的定制資源提供存儲和訪問服務(wù)。 CRD 對象的名稱必須是合法的 DNS 子域名。

一、概述

CRD(Custom Resource Definition) 本身是一種 Kubernetes 內(nèi)置的資源類型,即自定義資源的定義,用于描述用戶定義的資源是什么樣子。CRD 的相關(guān)概念:

  • CRD 是 v1.7 +新增的無需改變代碼 就可以擴(kuò)展 Kubernetes API 的機(jī)制,用來管理自定義對象。它實(shí)際上是ThirdPartyResources(TPR) 的升級版本,而 TPR 已經(jīng)在 v1.8 中刪除。
  • 從 Kubernetes 的用戶角度來看,所有東西都叫資源 Resource,就是 Yaml 里的字段 Kind 的內(nèi)容,例如 Service、Deployment 等。
  • 除了常見內(nèi)置資源之外,Kubernetes 允許用戶自定義資源 Custom Resource,而 CRD 表示自定義資源的定義。
  • 當(dāng)你創(chuàng)建新的 CustomResourceDefinition(CRD)時,Kubernetes API 服務(wù)器會為你所指定的每個版本生成一個新的 RESTful 資源路徑。
  • 基于 CRD 對象所創(chuàng)建的自定義資源可以是名字空間作用域的,也可以是集群作用域的, 取決于 CRD 對象 spec.scope 字段的設(shè)置。
  • 定義 CRD 對象的操作會使用你所設(shè)定的名字和模式定義(Schema)創(chuàng)建一個新的定制資源, Kubernetes API 負(fù)責(zé)為你的定制資源提供存儲和訪問服務(wù)。 CRD 對象的名稱必須是合法的 DNS 子域名。

DNS 子域名

很多資源類型需要可以用作 DNS 子域名的名稱。名稱必須滿足如下規(guī)則:

  • 不能超過 253 個字符
  • 只能包含小寫字母、數(shù)字,以及 '-' 和 '.'
  • 必須以字母數(shù)字開頭
  • 必須以字母數(shù)字結(jié)尾

CRD 官方文檔:https://kubernetes.io/zh-cn/docs/tasks/extend-kubernetes/custom-resources/custom-resource-definitions/

圖片

二、定制資源

定制資源(Custom Resource) 是對 Kubernetes API 的擴(kuò)展。

圖片

1)定制資源 和 定制控制器

  • 資源(Resource) 是 Kubernetes API 中的一個端點(diǎn), 其中存儲的是某個類別的 API 對象的一個集合。例如內(nèi)置的 Pod 資源包含一組 Pod 對象。
  • 定制資源(Custom Resource) 是對 Kubernetes API 的擴(kuò)展, 定制資源所代表的是對特定 Kubernetes 安裝的一種定制。不過,很多 Kubernetes 核心功能現(xiàn)在都用定制資源來實(shí)現(xiàn),這使得 Kubernetes 更加模塊化。
  • 定制資源可以通過動態(tài)注冊的方式在運(yùn)行中的集群內(nèi)或出現(xiàn)或消失,集群管理員可以獨(dú)立于集群更新定制資源。
  • 一旦某定制資源被安裝,用戶可以使用 kubectl 來創(chuàng)建和訪問其中的對象, 就像他們?yōu)?Pod 這種內(nèi)置資源所做的一樣。

2)定制控制器

  • 就定制資源本身而言,它只能用來存取結(jié)構(gòu)化的數(shù)據(jù)。當(dāng)你將定制資源與定制控制器(Custom Controller) 結(jié)合時, 定制資源就能夠提供真正的聲明式 API(Declarative API)。
  • Operator 模式就是將定制資源與定制控制器相結(jié)合的。

3)Operator 介紹

Kubernetes CRD Operator = kubernetes CRD + custom controller

  • Operator 是由 CoreOS 開發(fā)的,用來擴(kuò)展 Kubernetes API,特定的應(yīng)用程序控制器,它用來創(chuàng)建、配置和管理復(fù)雜的有狀態(tài)應(yīng)用,如數(shù)據(jù)庫、緩存和監(jiān)控系統(tǒng)。
  • Operator 基于 Kubernetes 的資源和控制器概念之上構(gòu)建,但同時又包含了應(yīng)用程序特定的領(lǐng)域知識。創(chuàng)建Operator 的關(guān)鍵是CRD(自定義資源)的設(shè)計(jì)。
  • Operator是 Kubernetes 的擴(kuò)展軟件, 它利用定制資源管理應(yīng)用及其組件。Operator 遵循 Kubernetes 的理念,特別是在控制器方面。
  • Operator 模式會封裝你編寫的(Kubernetes 本身提供功能以外的)任務(wù)自動化代碼。
  • Kubernetes 的 Operator 模式概念允許你在不修改 Kubernetes 自身代碼的情況下, 通過為一個或多個自定義資源關(guān)聯(lián)控制器來擴(kuò)展集群的能力。
  • Operator 是 Kubernetes API 的客戶端。Operator 旨在為其管理的資源提供強(qiáng)大的自動化功能,因此它還需要一些額外的支持性代碼。

1、Operator Framework

Operator Framework 同樣也是 CoreOS 開源的一個用于快速開發(fā) Operator 的工具包,該框架包含兩個主要的部分:

  • Operator SDK——無需了解復(fù)雜的 Kubernetes API 特性,即可讓你根據(jù)你自己的專業(yè)知識構(gòu)建一個 Operator 應(yīng)用。
  • Operator Lifecycle Manager OLM——幫助你安裝、更新和管理跨集群的運(yùn)行中的所有 Operator(以及他們的相關(guān)服務(wù))

圖片

2、Operator 安裝

Operator SDK 提供以下工作流來開發(fā)一個新的 Operator:

  • 使用 SDK 創(chuàng)建一個新的 Operator 項(xiàng)目
  • 通過添加自定義資源(CRD)定義新的資源 API
  • 指定使用 SDK API 來 watch 的資源
  • 定義 Operator 的協(xié)調(diào)(reconcile)邏輯
  • 使用 Operator SDK 構(gòu)建并生成 Operator 部署清單文件

3、安裝 Operator SDK

下載地址:https://github.com/operator-framework/operator-sdk/releasesoperator sdk 官方文檔:https://sdk.operatorframework.io/docs/installation/

wget https://github.com/operator-framework/operator-sdk/releases/download/v1.23.0/operator-sdk_linux_amd64

# 添加可執(zhí)行權(quán)限

chmod +x operator-sdk_linux_amd64

# 添加軟鏈
ln -s /opt/k8s/crd/Operator/operator-sdk_linux_amd64 /usr/local/bin/operator-sdk

4、Operator 簡單使用

【示例1】快速簡單使用

operator-sdk init --domain=example.com --repo=github.com/example-inc/memcached-operator
# 步驟二: 創(chuàng)建 API(operator-sdk create api --group cache --version v1 --kind Memcached --resource=true --cnotallow=true)
operator-sdk create api --group cache --version v1 --kind Memcached --resource=true --cnotallow=true
# 步驟三: 構(gòu)建鏡像-需要本地存在 docker 環(huán)境(make docker-build IMG=liumiaocn/memcache:v1)
make docker-build IMG=liumiaocn/memcache:v1
# 步驟四: 運(yùn)行Operator-需要環(huán)境具備 K8s/K3s(make install && make deploy IMG=liumiaocn/memcache:v1)
make install && make deploy IMG=liumiaocn/memcache:v1
# 步驟五:創(chuàng)建自定義資源
kubectl apply -f config/samples/cache_v1_memcached.yaml
# 步驟六:刪除CR和相關(guān)資源(kubectl delete -f config/samples/cache_v1_memcached.yaml
kubectl delete -f config/samples/cache_v1_memcached.yaml

這里只是簡單的安裝部署使用,后面會單獨(dú)拿一篇文章來詳細(xì)介紹Operator 。

4)Kubernetes API 聚合層

  • 使用聚合層(Aggregation Layer),用戶可以通過附加的 API 擴(kuò)展 Kubernetes, 而不局限于 Kubernetes 核心 API 提供的功能。這里的附加 API 可以是現(xiàn)成的解決方案,比如 metrics server, 或者你自己開發(fā)的 API。
  • 聚合層不同于 定制資源(Custom Resources)。后者的目的是讓 kube-apiserver 能夠識別新的對象類別(Kind)。
  • 聚合層在 kube-apiserver 進(jìn)程內(nèi)運(yùn)行。在擴(kuò)展資源注冊之前,聚合層不做任何事情。
  • 要注冊 API,你可以添加一個 APIService 對象,用它來 “申領(lǐng)” Kubernetes API 中的 URL 路徑。自此以后,聚合層將把發(fā)給該 API 路徑的所有內(nèi)容(例如 /apis/myextension.mycompany.io/v1/…) 轉(zhuǎn)發(fā)到已注冊的 APIService。

5)聲明式 APIs

典型地,在聲明式 API 中:

  • 你的 API 包含相對而言為數(shù)不多的、尺寸較小的對象(資源)。
  • 對象定義了應(yīng)用或者基礎(chǔ)設(shè)施的配置信息。
  • 對象更新操作頻率較低。
  • 通常需要人來讀取或?qū)懭雽ο蟆?/li>
  • 對象的主要操作是 CRUD 風(fēng)格的(創(chuàng)建、讀取、更新和刪除)。
  • 不需要跨對象的事務(wù)支持:API 對象代表的是期望狀態(tài)而非確切實(shí)際狀態(tài)。

命令式 API(Imperative API)與聲明式有所不同。以下跡象表明你的 API 可能不是聲明式的:

  • 客戶端發(fā)出“做這個操作”的指令,之后在該操作結(jié)束時獲得同步響應(yīng)。
  • 客戶端發(fā)出“做這個操作”的指令,并獲得一個操作 ID,之后需要檢查一個 Operation(操作) 對象來判斷請求是否成功完成。
  • 你會將你的 API 類比為遠(yuǎn)程過程調(diào)用(Remote Procedure Call,RPCs)。
  • 直接存儲大量數(shù)據(jù);例如每個對象幾 kB,或者存儲上千個對象。
  • 需要較高的訪問帶寬(長期保持每秒數(shù)十個請求)。
  • 存儲有應(yīng)用來處理的最終用戶數(shù)據(jù)(如圖片、個人標(biāo)識信息(PII)等)或者其他大規(guī)模數(shù)據(jù)。
  • 在對象上執(zhí)行的常規(guī)操作并非 CRUD 風(fēng)格。

6)添加定制資源

Kubernetes 提供了兩種方式供你向集群中添加定制資源:

  • CRD 相對簡單,創(chuàng)建 CRD 可以不必編程。
  • API 聚合 需要編程,但支持對 API 行為進(jìn)行更多的控制,例如數(shù)據(jù)如何存儲以及在不同 API 版本間如何轉(zhuǎn)換等。

Kubernetes 提供這兩種選項(xiàng)以滿足不同用戶的需求,這樣就既不會犧牲易用性也不會犧牲靈活性。

  • 聚合 API指的是一些下位的 API 服務(wù)器,運(yùn)行在主 API 服務(wù)器后面;主 API 服務(wù)器以代理的方式工作。這種組織形式稱作 API 聚合(API Aggregation,AA) 。對用戶而言,看起來僅僅是 Kubernetes API 被擴(kuò)展了。
  • CRD 允許用戶創(chuàng)建新的資源類別同時又不必添加新的 API 服務(wù)器。使用 CRD 時,你并不需要理解 API 聚合。

CRD

聚合 API

無需編程。用戶可選擇任何語言來實(shí)現(xiàn) CRD 控制器。

需要編程,并構(gòu)建可執(zhí)行文件和鏡像。

無需額外運(yùn)行服務(wù);CRD 由 API 服務(wù)器處理。

需要額外創(chuàng)建服務(wù),且該服務(wù)可能失效。

一旦 CRD 被創(chuàng)建,不需要持續(xù)提供支持。Kubernetes 主控節(jié)點(diǎn)升級過程中自動會帶入缺陷修復(fù)。

可能需要周期性地從上游提取缺陷修復(fù)并更新聚合 API 服務(wù)器。

無需處理 API 的多個版本;例如,當(dāng)你控制資源的客戶端時,你可以更新它使之與 API 同步。

你需要處理 API 的多個版本;例如,在開發(fā)打算與很多人共享的擴(kuò)展時。

僅支持 CRUD 操作,例如 "logs" 或 "exec"的操作是不支持的。

支持 CRUD 之外的操作。

7)訪問定制資源

Kubernetes 客戶端庫可用來訪問定制資源。并非所有客戶端庫都支持定制資源。Go 和 Python 客戶端庫是支持的。

當(dāng)你添加了新的定制資源后,可以用如下方式之一訪問它們:

  • kubectl
  • Kubernetes 動態(tài)客戶端(DynamicClient),可以對任意Kubernetes資源進(jìn)行RESTFful操作,包括CRD自定義資源。
  • 你所編寫的 REST 客戶端
  • 使用 Kubernetes 客戶端生成工具 所生成的客戶端。生成客戶端的工作有些難度,不過某些項(xiàng)目可能會隨著 CRD 或 聚合 API 一起提供一個客戶端

三、CRD 示例演示

1)創(chuàng)建 CRD (定制資源)

當(dāng)你創(chuàng)建新的 CustomResourceDefinition(CRD)時,Kubernetes API 服務(wù)器會為你所指定的每個版本生成一個新的 RESTful 資源路徑。基于 CRD 對象所創(chuàng)建的自定義資源可以是名字空間作用域的,也可以是集群作用域的, 取決于 CRD 對象 spec.scope 字段的設(shè)置。

cat > resourcedefinition.yaml << EOF
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
# 名字必需與下面的 spec 字段匹配,并且格式為 '<名稱的復(fù)數(shù)形式>.<組名>'
name: crontabs.stable.example.com
spec:
# 組名稱,用于 REST API: /apis/<>/<版本>
group: stable.example.com
# 列舉此 CustomResourceDefinition 所支持的版本
versions:
- name: v1
# 每個版本都可以通過 served 標(biāo)志來獨(dú)立啟用或禁止
served: true
# 其中一個且只有一個版本必需被標(biāo)記為存儲版本
storage: true
schema:
openAPIV3Schema:
type: object
properties:
spec:
type: object
properties:
cronSpec:
type: string
image:
type: string
replicas:
type: integer
# 可以是 Namespaced 或 Cluster
scope: Namespaced
names:
# 名稱的復(fù)數(shù)形式,用于 URL:/apis/<>/<版本>/<名稱的復(fù)數(shù)形式>
plural: crontabs
# 名稱的單數(shù)形式,作為命令行使用時和顯示時的別名
singular: crontab
# kind 通常是單數(shù)形式的駝峰命名(CamelCased)形式。你的資源清單會使用這一形式。
kind: CronTab
# shortNames 允許你在命令行使用較短的字符串來匹配資源
shortNames:
- ct
EOF

執(zhí)行創(chuàng)建

kubectl apply -f resourcedefinition.yaml

這樣一個新的受名字空間約束的 RESTful API 端點(diǎn)會被創(chuàng)建在:

/apis/stable.example.com/v1/namespaces/

對象的 kind 將是來自你上面創(chuàng)建時 所用的 spec 中指定的 CronTab。

Kubernetes(k8s)API 的 操作可以參考我之前的文章:Kubernetes(k8s)API Server詳解

kubectl get --raw /apis/stable.example.com/v1/
kubectl get --raw /apis/stable.example.com/v1/|python -m json.tool

圖片

圖片

2)創(chuàng)建定制對象(定制控制器)

在創(chuàng)建了 CustomResourceDefinition 對象之后,你可以創(chuàng)建定制對象(?Custom Objects)。定制對象可以包含定制字段。這些字段可以包含任意的 JSON 數(shù)據(jù)。在下面的例子中,在類別為 CronTab 的定制對象中,設(shè)置了cronSpec 和 image 定制字段。類別 CronTab 來自你在上面所創(chuàng)建的 CRD 的規(guī)約。

cat >my-crontab.yaml<<EOF
apiVersion: "stable.example.com/v1"
kind: CronTab
metadata:
name: my-new-cron-object
spec:
cronSpec: "* * * * */5"
image: my-awesome-cron-image
EOF

并執(zhí)行創(chuàng)建命令:

kubectl apply -f my-crontab.yaml

你就可以使用 kubectl 來管理你的 CronTab 對象了。例如:

kubectl get crontab
kubectl get ct -o yaml

圖片

3)刪除 CustomResourceDefinition

當(dāng)你刪除某 CustomResourceDefinition 時,服務(wù)器會卸載其 RESTful API 端點(diǎn),并刪除服務(wù)器上存儲的所有定制對象。

kubectl delete -f resourcedefinition.yaml
kubectl get crontabs

責(zé)任編輯:武曉燕 來源: 大數(shù)據(jù)與云原生技術(shù)分享
相關(guān)推薦

2024-01-01 21:57:41

kubernetesCRDOperator

2023-02-13 09:31:07

CSS前端

2022-07-26 07:47:14

架構(gòu)

2024-02-28 08:13:32

2023-01-31 17:42:06

2018-09-10 12:47:36

Kubernetes云計(jì)算云原生技術(shù)

2019-10-14 09:08:33

云原生Kubernetes開發(fā)

2020-01-03 14:03:46

云計(jì)算開發(fā)云原生

2021-08-17 00:24:38

塊存儲云原生分布式

2023-11-27 13:41:00

Kubernete本地調(diào)試

2022-06-09 11:52:40

KubernetesOpenEBSLinux

2022-01-06 07:06:52

KubernetesResourceAPI

2022-02-21 10:17:33

Rancher開源云原生

2024-08-12 09:54:00

2022-09-07 15:57:41

KubernetesCRD

2018-10-08 09:17:36

云計(jì)算云原生Kubernetes

2020-11-30 14:34:04

CNCF云原生Kubernetes

2019-10-15 11:33:19

云計(jì)算Kubernetes互聯(lián)網(wǎng)

2024-06-12 13:21:06

2022-04-25 12:39:57

云原生云計(jì)算
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产欧美高清在线| 原纱央莉成人av片 | 97在线观看| 久精品国产欧美| 日本在线视频www色| av手机天堂| 欧美草逼视频| 日韩精品麻豆| 欧美日韩久久精品| 色呦哟—国产精品| 全球成人免费直播| 毛片一区二区| 97久久久精品综合88久久| 久久久久久免费| 视频在线观看一区二区| 欧美极品少妇xxxxⅹ喷水| 日韩av在线免费观看| 2019中文在线观看| 日韩精品不卡| 在线观看欧美成人| 2021国产精品久久精品| 欧美乱大交xxxxx另类电影| 污网站免费在线观看| 亚洲欧美春色| 色系列之999| 2021天堂中文幕一二区在线观| 丝袜亚洲精品中文字幕一区| 日韩国产一区二区三区| 波多野一区二区| 亚洲激情男女视频| 色狠狠久久av五月综合| 免费在线看电影| 中文字幕中文字幕在线一区| 国产日韩欧美精品在线观看| 激情欧美丁香| 高清欧美电影在线| 菠萝菠萝蜜在线观看| 亚洲第一在线综合网站| 午夜视频久久久| 粉嫩一区二区三区四区公司1| 欧美三级中文字幕在线观看| 日韩一级免费在线观看| 国产精品久久国产愉拍| 欧美一区二区三区精品电影| 欧美videosex性极品hd| www..com久久爱| 四虎影视av| 日韩精品一区二区三区免费视频| 99国产精品一区| 亚洲激情免费观看| 国产精品久久久毛片| 成人免费在线视频| 久久久人成影片一区二区三区在哪下载| 日韩一区二区视频| 色老板在线观看| 久久看片网站| 成人国产亚洲精品a区天堂华泰| 女女色综合影院| 亚洲美女在线国产| 黄色一级片网址| 99精品在免费线偷拍| 亚洲一区免费在线观看| 久久99精品国产99久久| 深夜在线视频| 99在线视频精品| 午夜老司机精品| 加勒比视频一区| 亚洲一二三四在线| 欧美lavv| 亚洲第一福利专区| 日韩精品亚洲元码| 含羞草激情视频| 在线亚洲一区| 欧美一级淫片videoshd| 成人在线免费观看视频| 五月婷婷综合网| 免费观看亚洲| 国产精品日韩在线| 女人香蕉久久**毛片精品| 日本aⅴ大伊香蕉精品视频| 日韩08精品| 国产不卡在线观看| 日韩毛片视频| 波多野结衣 作品| 人体精品一二三区| 国产大片一区| 国产乱子伦农村叉叉叉| 岛国视频免费在线观看| 777a∨成人精品桃花网| av成人在线观看| 26uuu另类亚洲欧美日本老年| 亚洲v天堂v手机在线| 亚洲嫩模很污视频| 在线播放你懂得| 亚洲免费一在线| www.久久.com| 欧美xxxx做受欧美| 色老板在线视频一区二区| 98精品国产自产在线观看| 国产日本欧美一区二区三区| 国产一区二区在线看| 国产精品一国产精品| 国产成人超碰人人澡人人澡| 都市激情在线视频| 国产成人av一区二区三区| 日韩av电影免费观看高清完整版| 欧美久久电影| 国产精品亚洲一区二区三区妖精| 午夜视频在线观看网站| 91精品国产色综合| 一区二区三区精品视频在线观看 | 伊人青青综合网站| 色综合久久久久| 亚洲精品国产首次亮相| 成人av资源| 亚洲综合一区二区| 91视频综合| 男男gaygays亚洲| 少妇人妻互换不带套| 国产精品久久久久久搜索| 91精品国产综合久久久蜜臀图片| 日本va欧美va精品| 精品国产伦一区二区三区观看说明 | 成人av片网址| 乱亲女秽乱长久久久| 欧美性高潮床叫视频| 成人的网站免费观看| 久久97视频| 日韩电影免费观| 亚洲成人影院少妇| 欧美成人高潮一二区在线看| 91精品啪在线观看麻豆免费| 精品国产一区二区三区久久狼黑人| 一区二区三区四区蜜桃| 国产一区二区三区香蕉| 色琪琪久久se色| 97品白浆高清久久久久久| 一区二区乱码| 毛片免费在线| 成人xxx免费视频播放| 国产一区二区四区| 亚洲午夜精品久久| 精品国产福利| 91在线播放国产| 国产区精品视频| 国产一区二区在线播放| 国产91精品久| 欧美激情欧美激情在线五月| 亚洲图中文字幕| 中文字幕不卡av| 少妇精69xxtheporn| 国产亚洲精品美女久久久| 91.成人天堂一区| 欧洲生活片亚洲生活在线观看| 色婷婷久久久综合中文字幕| 亚洲免费在线看| 怡红院av一区二区三区| 亚洲狠狠爱一区二区三区| 天天av天天翘天天综合网| 欧美日韩在线二区| 教室别恋欧美无删减版| 久久九九精品| 国产欧美日韩在线| 岛国av午夜精品| 亚洲视频在线免费看| 午夜精品久久久久久久白皮肤| 亚洲xxx视频| 久艹视频在线免费观看| 日韩av成人| 大胆国模一区二区三区| 亚洲无线一线二线三线区别av| 国产一区二区在线观看视频| 亚洲最色的网站| 石原莉奈一区二区三区在线观看| 久久精品一区二区三区四区| 91精品国产一区二区三区| 欧美黑人极品猛少妇色xxxxx| 久久久久久久久久久久久9999| 免费在线观看视频| 日本肉肉一区| 日韩精品亚洲一区| 色狠狠av一区二区三区| 欧美精品成人91久久久久久久| 午夜精品一区二区三区四区| 91久久影院| 欧美三级午夜理伦三级小说| 成人精品免费看| 欧美精品在线观看播放| 亚洲资源在线看| www.三区| 超碰97久久国产精品牛牛| 看电视剧不卡顿的网站| 在线免费观看日韩欧美| 国产aaa精品| av线上观看| 亚洲理论电影| 夜夜嗨av一区二区三区中文字幕| 欧美成人精品一区二区| 亚洲精品乱码久久久久久自慰| 久久xxx视频|