日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)kubernetes教程:Kubernetes定制資源

定制資源

資源(Resource) 是 Kubernetes API 中的一個(gè)端點(diǎn), 其中存儲(chǔ)的是某個(gè)類(lèi)別的 API 對(duì)象 的一個(gè)集合。 例如內(nèi)置的 pods 資源包含一組 Pod 對(duì)象。

創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來(lái),先為興隆臺(tái)等服務(wù)建站,興隆臺(tái)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為興隆臺(tái)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

定制資源(Custom Resource) 是對(duì) Kubernetes API 的擴(kuò)展,不一定在默認(rèn)的 Kubernetes 安裝中就可用。定制資源所代表的是對(duì)特定 Kubernetes 安裝的一種定制。 不過(guò),很多 Kubernetes 核心功能現(xiàn)在都用定制資源來(lái)實(shí)現(xiàn),這使得 Kubernetes 更加模塊化。

定制資源可以通過(guò)動(dòng)態(tài)注冊(cè)的方式在運(yùn)行中的集群內(nèi)或出現(xiàn)或消失,集群管理員可以獨(dú)立于集群 更新定制資源。一旦某定制資源被安裝,用戶(hù)可以使用 kubectl 來(lái)創(chuàng)建和訪問(wèn)其中的對(duì)象,就像他們?yōu)?nbsp;pods 這種內(nèi)置資源所做的一樣。

定制控制器 

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

使用聲明式 API, 你可以 聲明 或者設(shè)定你的資源的期望狀態(tài),并嘗試讓 Kubernetes 對(duì)象的當(dāng)前狀態(tài) 同步到其期望狀態(tài)??刂破髫?fù)責(zé)將結(jié)構(gòu)化的數(shù)據(jù)解釋為用戶(hù)所期望狀態(tài)的記錄,并 持續(xù)地維護(hù)該狀態(tài)。

你可以在一個(gè)運(yùn)行中的集群上部署和更新定制控制器,這類(lèi)操作與集群的生命周期無(wú)關(guān)。 定制控制器可以用于任何類(lèi)別的資源,不過(guò)它們與定制資源結(jié)合起來(lái)時(shí)最為有效。 Operator 模式就是將定制資源 與定制控制器相結(jié)合的。你可以使用定制控制器來(lái)將特定于某應(yīng)用的領(lǐng)域知識(shí)組織 起來(lái),以編碼的形式構(gòu)造對(duì) Kubernetes API 的擴(kuò)展。

我是否應(yīng)該向我的 Kubernetes 集群添加定制資源?

在創(chuàng)建新的 API 時(shí),請(qǐng)考慮是 將你的 API 與 Kubernetes 集群 API 聚合起來(lái) 還是讓你的 API 獨(dú)立運(yùn)行。

考慮 API 聚合的情況 優(yōu)選獨(dú)立 API 的情況
你的 API 是聲明式的。 你的 API 不符合聲明式模型。
你希望可以是使用 kubectl 來(lái)讀寫(xiě)你的新資源類(lèi)別。 不要求 kubectl 支持。
你希望在 Kubernetes UI (如儀表板)中和其他內(nèi)置類(lèi)別一起查看你的新資源類(lèi)別。 不需要 Kubernetes UI 支持。
你在開(kāi)發(fā)新的 API。 你已經(jīng)有一個(gè)提供 API 服務(wù)的程序并且工作良好。
你有意愿取接受 Kubernetes 對(duì) REST 資源路徑所作的格式限制,例如 API 組和名字空間。(參閱 API 概述) 你需要使用一些特殊的 REST 路徑以便與已經(jīng)定義的 REST API 保持兼容。
你的資源可以自然地界定為集群作用域或集群中某個(gè)名字空間作用域。 集群作用域或名字空間作用域這種二分法很不合適;你需要對(duì)資源路徑的細(xì)節(jié)進(jìn)行控制。
你希望復(fù)用 Kubernetes API 支持特性。 你不需要這類(lèi)特性。

聲明式 APIs

典型地,在聲明式 API 中:

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

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

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

我應(yīng)該使用一個(gè) ConfigMap 還是一個(gè)定制資源?

如果滿(mǎn)足以下條件之一,應(yīng)該使用 ConfigMap:

  • 存在一個(gè)已有的、文檔完備的配置文件格式約定,例如 ?mysql.cnf? 或 ?pom.xml?。
  • 你希望將整個(gè)配置文件放到某 configMap 中的一個(gè)主鍵下面。
  • 配置文件的主要用途是針對(duì)運(yùn)行在集群中 Pod 內(nèi)的程序,供后者依據(jù)文件數(shù)據(jù)配置自身行為。
  • 文件的使用者期望以 Pod 內(nèi)文件或者 Pod 內(nèi)環(huán)境變量的形式來(lái)使用文件數(shù)據(jù), 而不是通過(guò) Kubernetes API。
  • 你希望當(dāng)文件被更新時(shí)通過(guò)類(lèi)似 Deployment 之類(lèi)的資源完成滾動(dòng)更新操作。

Note: 請(qǐng)使用 Secret 來(lái)保存敏感數(shù)據(jù)。 Secret 類(lèi)似于 configMap,但更為安全。

如果以下條件中大多數(shù)都被滿(mǎn)足,你應(yīng)該使用定制資源(CRD 或者 聚合 API):

  • 你希望使用 Kubernetes 客戶(hù)端庫(kù)和 CLI 來(lái)創(chuàng)建和更改新的資源。
  • 你希望 ?kubectl ?能夠直接支持你的資源;例如,?kubectl get my-object object-name?。
  • 你希望構(gòu)造新的自動(dòng)化機(jī)制,監(jiān)測(cè)新對(duì)象上的更新事件,并對(duì)其他對(duì)象執(zhí)行 CRUD 操作,或者監(jiān)測(cè)后者更新前者。
  • 你希望編寫(xiě)自動(dòng)化組件來(lái)處理對(duì)對(duì)象的更新。
  • 你希望使用 Kubernetes API 對(duì)諸如 ?.spec?、?.status? 和 ?.metadata? 等字段的約定。
  • 你希望對(duì)象是對(duì)一組受控資源的抽象,或者對(duì)其他資源的歸納提煉。

添加定制資源 

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

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

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

聚合 API 指的是一些下位的 API 服務(wù)器,運(yùn)行在主 API 服務(wù)器后面;主 API 服務(wù)器以代理的方式工作。這種組織形式稱(chēng)作 API 聚合(API Aggregation,AA) 。 對(duì)用戶(hù)而言,看起來(lái)僅僅是 Kubernetes API 被擴(kuò)展了。

CRD 允許用戶(hù)創(chuàng)建新的資源類(lèi)別同時(shí)又不必添加新的 API 服務(wù)器。 使用 CRD 時(shí),你并不需要理解 API 聚合。

無(wú)論以哪種方式安裝定制資源,新的資源都會(huì)被當(dāng)做定制資源,以便與內(nèi)置的 Kubernetes 資源(如 Pods)相區(qū)分。

CustomResourceDefinitions

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

CRD 使得你不必編寫(xiě)自己的 API 服務(wù)器來(lái)處理定制資源,不過(guò)其背后實(shí)現(xiàn)的通用性也意味著 你所獲得的靈活性要比 API 服務(wù)器聚合少很多。

關(guān)于如何注冊(cè)新的定制資源、使用新資源類(lèi)別的實(shí)例以及如何使用控制器來(lái)處理事件, 相關(guān)的例子可參見(jiàn)定制控制器示例。

API 服務(wù)器聚合 

通常,Kubernetes API 中的每個(gè)資源都需要處理 REST 請(qǐng)求和管理對(duì)象持久性存儲(chǔ)的代碼。 Kubernetes API 主服務(wù)器能夠處理諸如 pods 和 services 這些內(nèi)置資源,也可以 按通用的方式通過(guò) CRD 來(lái)處理定制資源。

聚合層(Aggregation Layer) 使得你可以通過(guò)編寫(xiě)和部署你自己的 API 服務(wù)器來(lái)為定制資源提供特殊的實(shí)現(xiàn)。 主 API 服務(wù)器將針對(duì)你要處理的定制資源的請(qǐng)求全部委托給你自己的 API 服務(wù)器來(lái)處理,同時(shí)將這些資源 提供給其所有客戶(hù)端。

選擇添加定制資源的方法 

CRD 更為易用;聚合 API 則更為靈活。請(qǐng)選擇最符合你的需要的方法。

通常,如何存在以下情況,CRD 可能更合適:

  • 定制資源的字段不多;
  • 你在組織內(nèi)部使用該資源或者在一個(gè)小規(guī)模的開(kāi)源項(xiàng)目中使用該資源,而不是 在商業(yè)產(chǎn)品中使用。

比較易用性 

CRD 比聚合 API 更容易創(chuàng)建

CRDs 聚合 API
無(wú)需編程。用戶(hù)可選擇任何語(yǔ)言來(lái)實(shí)現(xiàn) CRD 控制器。 需要使用 Go 來(lái)編程,并構(gòu)建可執(zhí)行文件和鏡像。
無(wú)需額外運(yùn)行服務(wù);CRD 由 API 服務(wù)器處理。 需要額外創(chuàng)建服務(wù),且該服務(wù)可能失效。
一旦 CRD 被創(chuàng)建,不需要持續(xù)提供支持。Kubernetes 主控節(jié)點(diǎn)升級(jí)過(guò)程中自動(dòng)會(huì)帶入缺陷修復(fù)。 可能需要周期性地從上游提取缺陷修復(fù)并更新聚合 API 服務(wù)器。
無(wú)需處理 API 的多個(gè)版本;例如,當(dāng)你控制資源的客戶(hù)端時(shí),你可以更新它使之與 API 同步。 你需要處理 API 的多個(gè)版本;例如,在開(kāi)發(fā)打算與很多人共享的擴(kuò)展時(shí)。

高級(jí)特性與靈活性 

聚合 API 可提供更多的高級(jí) API 特性,也可對(duì)其他特性實(shí)行定制;例如,對(duì)存儲(chǔ)層進(jìn)行定制。

特性 描述 CRDs 聚合 API
合法性檢查 幫助用戶(hù)避免錯(cuò)誤,允許你獨(dú)立于客戶(hù)端版本演化 API。這些特性對(duì)于由很多無(wú)法同時(shí)更新的客戶(hù)端的場(chǎng)合。 可以。大多數(shù)驗(yàn)證可以使用 OpenAPI v3.0 合法性檢查 來(lái)設(shè)定。其他合法性檢查操作可以通過(guò)添加合法性檢查 Webhook來(lái)實(shí)現(xiàn)。 可以,可執(zhí)行任何合法性檢查。
默認(rèn)值設(shè)置 同上 可以??赏ㄟ^(guò) OpenAPI v3.0 合法性檢查的 default 關(guān)鍵詞(自 1.17 正式發(fā)布)或更改性(Mutating)Webhook來(lái)實(shí)現(xiàn)(不過(guò)從 etcd 中讀取老的對(duì)象時(shí)不會(huì)執(zhí)行這些 Webhook)。 可以。
多版本支持 允許通過(guò)兩個(gè) API 版本同時(shí)提供同一對(duì)象。可幫助簡(jiǎn)化類(lèi)似字段更名這類(lèi) API 操作。如果你能控制客戶(hù)端版本,這一特性將不再重要。 可以。 可以。
定制存儲(chǔ) 支持使用具有不同性能模式的存儲(chǔ)(例如,要使用時(shí)間序列數(shù)據(jù)庫(kù)而不是鍵值存儲(chǔ)),或者因安全性原因?qū)Υ鎯?chǔ)進(jìn)行隔離(例如對(duì)敏感信息執(zhí)行加密)。 不可以。 可以。
定制業(yè)務(wù)邏輯 在創(chuàng)建、讀取、更新或刪除對(duì)象時(shí),執(zhí)行任意的檢查或操作。 可以。要使用 Webhook。 可以。
支持 scale 子資源 允許 HorizontalPodAutoscaler 和 PodDisruptionBudget 這類(lèi)子系統(tǒng)與你的新資源交互。 可以。 可以。
支持 status 子資源 允許在用戶(hù)寫(xiě)入 spec 部分而控制器寫(xiě)入 status 部分時(shí)執(zhí)行細(xì)粒度的訪問(wèn)控制。允許在對(duì)定制資源的數(shù)據(jù)進(jìn)行更改時(shí)增加對(duì)象的代際(Generation);這需要資源對(duì) spec 和 status 部分有明確劃分。 可以。 可以。
其他子資源 添加 CRUD 之外的操作,例如 "logs" 或 "exec"。 不可以。 可以。
strategic-merge-patch 新的端點(diǎn)要支持標(biāo)記了 Content-Type: application/strategic-merge-patch+json 的 PATCH 操作。對(duì)于更新既可在本地更改也可在服務(wù)器端更改的對(duì)象而言是有用的。要了解更多信息,可參見(jiàn)使用 kubectl patch 來(lái)更新 API 對(duì)象。 不可以。 可以。
支持協(xié)議緩沖區(qū) 新的資源要支持想要使用協(xié)議緩沖區(qū)(Protocol Buffer)的客戶(hù)端。 不可以。 可以。
OpenAPI Schema 是否存在新資源類(lèi)別的 OpenAPI(Swagger)Schema 可供動(dòng)態(tài)從服務(wù)器上讀???是否存在機(jī)制確保只能設(shè)置被允許的字段以避免用戶(hù)犯字段拼寫(xiě)錯(cuò)誤?是否實(shí)施了字段類(lèi)型檢查(換言之,不允許在 string 字段設(shè)置 int 值)? 可以,依據(jù) OpenAPI v3.0 合法性檢查 模式(1.16 中進(jìn)入正式發(fā)布狀態(tài))。 可以。

公共特性 

與在 Kubernetes 平臺(tái)之外實(shí)現(xiàn)定制資源相比, 無(wú)論是通過(guò) CRD 還是通過(guò)聚合 API 來(lái)創(chuàng)建定制資源,你都會(huì)獲得很多 API 特性:

功能特性 具體含義
CRUD 新的端點(diǎn)支持通過(guò) HTTP 和 kubectl 發(fā)起的 CRUD 基本操作
監(jiān)測(cè)(Watch) 新的端點(diǎn)支持通過(guò) HTTP 發(fā)起的 Kubernetes Watch 操作
發(fā)現(xiàn)(Discovery) 類(lèi)似 kubectl 和儀表盤(pán)(Dashboard)這類(lèi)客戶(hù)端能夠自動(dòng)提供列舉、顯示、在字段級(jí)編輯你的資源的操作
json-patch 新的端點(diǎn)支持帶 Content-Type: application/json-patch+json 的 PATCH 操作
merge-patch 新的端點(diǎn)支持帶 Content-Type: application/merge-patch+json 的 PATCH 操作
HTTPS 新的端點(diǎn)使用 HTTPS
內(nèi)置身份認(rèn)證 對(duì)擴(kuò)展的訪問(wèn)會(huì)使用核心 API 服務(wù)器(聚合層)來(lái)執(zhí)行身份認(rèn)證操作
內(nèi)置鑒權(quán)授權(quán) 對(duì)擴(kuò)展的訪問(wèn)可以復(fù)用核心 API 服務(wù)器所使用的鑒權(quán)授權(quán)機(jī)制;例如,RBAC
Finalizers 在外部清除工作結(jié)束之前阻止擴(kuò)展資源被刪除
準(zhǔn)入 Webhooks 在創(chuàng)建、更新和刪除操作中對(duì)擴(kuò)展資源設(shè)置默認(rèn)值和執(zhí)行合法性檢查
UI/CLI 展示 kubectl 和儀表盤(pán)(Dashboard)可以顯示擴(kuò)展資源
區(qū)分未設(shè)置值和空值 客戶(hù)端能夠區(qū)分哪些字段是未設(shè)置的,哪些字段的值是被顯式設(shè)置為零值的。
生成客戶(hù)端庫(kù) Kubernetes 提供通用的客戶(hù)端庫(kù),以及用來(lái)生成特定類(lèi)別客戶(hù)端庫(kù)的工具
標(biāo)簽和注解 提供涵蓋所有對(duì)象的公共元數(shù)據(jù)結(jié)構(gòu),且工具知曉如何編輯核心資源和定制資源的這些元數(shù)據(jù)

準(zhǔn)備安裝定制資源

在向你的集群添加定制資源之前,有些事情需要搞清楚。

第三方代碼和新的失效點(diǎn)的問(wèn)題

盡管添加新的 CRD 不會(huì)自動(dòng)帶來(lái)新的失效點(diǎn)(Point of Failure),例如導(dǎo)致第三方代碼被在 API 服務(wù)器上運(yùn)行, 類(lèi)似 Helm Charts 這種軟件包或者其他安裝包通常在提供 CRD 的同時(shí)還包含帶有第三方 代碼的 Deployment,負(fù)責(zé)實(shí)現(xiàn)新的定制資源的業(yè)務(wù)邏輯。

安裝聚合 API 服務(wù)器時(shí),也總會(huì)牽涉到運(yùn)行一個(gè)新的 Deployment。

存儲(chǔ) 

定制資源和 ConfigMap 一樣也會(huì)消耗存儲(chǔ)空間。創(chuàng)建過(guò)多的定制資源可能會(huì)導(dǎo)致 API 服務(wù)器上的存儲(chǔ)空間超載。

聚合 API 服務(wù)器可以使用主 API 服務(wù)器的同一存儲(chǔ)。如果是這樣,你也要注意 此警告。

身份認(rèn)證、鑒權(quán)授權(quán)以及審計(jì)

CRD 通常與 API 服務(wù)器上的內(nèi)置資源一樣使用相同的身份認(rèn)證、鑒權(quán)授權(quán) 和審計(jì)日志機(jī)制。

如果你使用 RBAC 來(lái)執(zhí)行鑒權(quán)授權(quán),大多數(shù) RBAC 角色都會(huì)授權(quán)對(duì)新資源的訪問(wèn) (除了 cluster-admin 角色以及使用通配符規(guī)則創(chuàng)建的其他角色)。 你要顯式地為新資源的訪問(wèn)授權(quán)。CRD 和聚合 API 通常在交付時(shí)會(huì)包含 針對(duì)所添加的類(lèi)別的新的角色定義。

聚合 API 服務(wù)器可能會(huì)使用主 API 服務(wù)器相同的身份認(rèn)證、鑒權(quán)授權(quán)和審計(jì) 機(jī)制,也可能不會(huì)。

訪問(wèn)定制資源

Kubernetes 客戶(hù)端庫(kù)可用來(lái)訪問(wèn)定制資源。 并非所有客戶(hù)端庫(kù)都支持定制資源。Go 和 Python 客戶(hù)端庫(kù)是支持的。

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

  • ?kubectl ?
  • Kubernetes 動(dòng)態(tài)客戶(hù)端
  • 你所編寫(xiě)的 REST 客戶(hù)端
  • 使用 Kubernetes 客戶(hù)端生成工具 所生成的客戶(hù)端。生成客戶(hù)端的工作有些難度,不過(guò)某些項(xiàng)目可能會(huì)隨著 CRD 或 聚合 API 一起提供一個(gè)客戶(hù)端

當(dāng)前標(biāo)題:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes定制資源
當(dāng)前網(wǎng)址:http://www.dlmjj.cn/article/cogcopj.html