新聞中心
本頁說明了 Kubernetes 對(duì)象在 Kubernetes API 中是如何表示的,以及如何在 ?.yaml? 格式的文件中表示。

理解 Kubernetes 對(duì)象
在 Kubernetes 系統(tǒng)中,Kubernetes 對(duì)象 是持久化的實(shí)體。 Kubernetes 使用這些實(shí)體去表示整個(gè)集群的狀態(tài)。特別地,它們描述了如下信息:
- 哪些容器化應(yīng)用在運(yùn)行(以及在哪些節(jié)點(diǎn)上)
- 可以被應(yīng)用使用的資源
- 關(guān)于應(yīng)用運(yùn)行時(shí)表現(xiàn)的策略,比如重啟策略、升級(jí)策略,以及容錯(cuò)策略
Kubernetes 對(duì)象是 “目標(biāo)性記錄” —— 一旦創(chuàng)建對(duì)象,Kubernetes 系統(tǒng)將持續(xù)工作以確保對(duì)象存在。 通過創(chuàng)建對(duì)象,本質(zhì)上是在告知 Kubernetes 系統(tǒng),所需要的集群工作負(fù)載看起來是什么樣子的, 這就是 Kubernetes 集群的 期望狀態(tài)(Desired State)。
操作 Kubernetes 對(duì)象 —— 無論是創(chuàng)建、修改,或者刪除 —— 需要使用 Kubernetes API。 比如,當(dāng)使用 kubectl 命令行接口時(shí),CLI 會(huì)執(zhí)行必要的 Kubernetes API 調(diào)用, 也可以在程序中使用 客戶端庫直接調(diào)用 Kubernetes API。
對(duì)象規(guī)約(Spec)與狀態(tài)(Status)
幾乎每個(gè) Kubernetes 對(duì)象包含兩個(gè)嵌套的對(duì)象字段,它們負(fù)責(zé)管理對(duì)象的配置: 對(duì)象 ?spec?(規(guī)約) 和 對(duì)象 ?status?(狀態(tài)) 。 對(duì)于具有 ?spec ?的對(duì)象,你必須在創(chuàng)建對(duì)象時(shí)設(shè)置其內(nèi)容,描述你希望對(duì)象所具有的特征: 期望狀態(tài)(Desired State) 。
?status ?描述了對(duì)象的 當(dāng)前狀態(tài)(Current State),它是由 Kubernetes 系統(tǒng)和組件 設(shè)置并更新的。在任何時(shí)刻,Kubernetes 控制平面 都一直積極地管理著對(duì)象的實(shí)際狀態(tài),以使之與期望狀態(tài)相匹配。
例如,Kubernetes 中的 Deployment 對(duì)象能夠表示運(yùn)行在集群中的應(yīng)用。 當(dāng)創(chuàng)建 Deployment 時(shí),可能需要設(shè)置 Deployment 的 ?spec?,以指定該應(yīng)用需要有 3 個(gè)副本運(yùn)行。 Kubernetes 系統(tǒng)讀取 Deployment 規(guī)約,并啟動(dòng)我們所期望的應(yīng)用的 3 個(gè)實(shí)例 —— 更新狀態(tài)以與規(guī)約相匹配。 如果這些實(shí)例中有的失敗了(一種狀態(tài)變更),Kubernetes 系統(tǒng)通過執(zhí)行修正操作 來響應(yīng)規(guī)約和狀態(tài)間的不一致 —— 在這里意味著它會(huì)啟動(dòng)一個(gè)新的實(shí)例來替換。
關(guān)于對(duì)象 spec、status 和 metadata 的更多信息,可參閱 Kubernetes API 約定。
描述 Kubernetes 對(duì)象
創(chuàng)建 Kubernetes 對(duì)象時(shí),必須提供對(duì)象的規(guī)約,用來描述該對(duì)象的期望狀態(tài), 以及關(guān)于對(duì)象的一些基本信息(例如名稱)。 當(dāng)使用 Kubernetes API 創(chuàng)建對(duì)象時(shí)(或者直接創(chuàng)建,或者基于?kubectl?), API 請(qǐng)求必須在請(qǐng)求體中包含 JSON 格式的信息。 大多數(shù)情況下,需要在 ?.yaml? 文件中為 ?kubectl ?提供這些信息。 ?kubectl ?在發(fā)起 API 請(qǐng)求時(shí),將這些信息轉(zhuǎn)換成 JSON 格式。
這里有一個(gè) ?.yaml? 示例文件,展示了 Kubernetes Deployment 的必需字段和對(duì)象規(guī)約:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels:
app: nginx
replicas: 2 # tells deployment to run 2 pods matching the template
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
使用類似于上面的 ?.yaml? 文件來創(chuàng)建 Deployment的一種方式是使用 ?kubectl ?命令行接口(CLI)中的 kubectl apply 命令, 將 ?.yaml? 文件作為參數(shù)。下面是一個(gè)示例:
kubectl apply -f https://K8S.io/examples/application/deployment.yaml輸出類似如下這樣:
deployment.apps/nginx-deployment created
必需字段
在想要?jiǎng)?chuàng)建的 Kubernetes 對(duì)象對(duì)應(yīng)的 ?.yaml? 文件中,需要配置如下的字段:
- ?
apiVersion?- 創(chuàng)建該對(duì)象所使用的 Kubernetes API 的版本 - ?
kind?- 想要?jiǎng)?chuàng)建的對(duì)象的類別 - ?
metadata?- 幫助唯一性標(biāo)識(shí)對(duì)象的一些數(shù)據(jù),包括一個(gè) name 字符串、UID 和可選的 namespace - ?
spec?- 你所期望的該對(duì)象的狀態(tài)
對(duì)象 ?spec ?的精確格式對(duì)每個(gè) Kubernetes 對(duì)象來說是不同的,包含了特定于該對(duì)象的嵌套字段。
例如,參閱 Pod API 參考文檔中 ?spec? 字段。 對(duì)于每個(gè) Pod,其 ?.spec? 字段設(shè)置了 Pod 及其期望狀態(tài)(例如 Pod 中每個(gè)容器的容器鏡像名稱)。 另一個(gè)對(duì)象規(guī)約的例子是 StatefulSet API 中的 ?spec ?字段。 對(duì)于 StatefulSet 而言,其 ?.spec? 字段設(shè)置了 StatefulSet 及其期望狀態(tài)。 在 StatefulSet 的 ?.spec? 內(nèi),有一個(gè)為 Pod 對(duì)象提供的模板。該模板描述了 StatefulSet 控制器為了滿足 StatefulSet 規(guī)約而要?jiǎng)?chuàng)建的 Pod。 不同類型的對(duì)象可以由不同的 ?.status? 信息。API 參考頁面給出了 ?.status? 字段的詳細(xì)結(jié)構(gòu), 以及針對(duì)不同類型 API 對(duì)象的具體內(nèi)容。
分享名稱:創(chuàng)新互聯(lián)kubernetes教程:Kubernetes對(duì)象簡(jiǎn)介
標(biāo)題鏈接:http://www.dlmjj.cn/article/djepehj.html


咨詢
建站咨詢
