W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
本頁說明了 Kubernetes 對象在 Kubernetes API 中是如何表示的,以及如何在 ?.yaml
? 格式的文件中表示。
在 Kubernetes 系統(tǒng)中,Kubernetes 對象 是持久化的實體。 Kubernetes 使用這些實體去表示整個集群的狀態(tài)。特別地,它們描述了如下信息:
Kubernetes 對象是 “目標性記錄” —— 一旦創(chuàng)建對象,Kubernetes 系統(tǒng)將持續(xù)工作以確保對象存在。 通過創(chuàng)建對象,本質上是在告知 Kubernetes 系統(tǒng),所需要的集群工作負載看起來是什么樣子的, 這就是 Kubernetes 集群的 期望狀態(tài)(Desired State)。
操作 Kubernetes 對象 —— 無論是創(chuàng)建、修改,或者刪除 —— 需要使用 Kubernetes API。 比如,當使用 kubectl 命令行接口時,CLI 會執(zhí)行必要的 Kubernetes API 調用, 也可以在程序中使用 客戶端庫直接調用 Kubernetes API。
幾乎每個 Kubernetes 對象包含兩個嵌套的對象字段,它們負責管理對象的配置: 對象 ?spec
?(規(guī)約) 和 對象 ?status
?(狀態(tài)) 。 對于具有 ?spec
?的對象,你必須在創(chuàng)建對象時設置其內容,描述你希望對象所具有的特征: 期望狀態(tài)(Desired State) 。
?status
?描述了對象的 當前狀態(tài)(Current State),它是由 Kubernetes 系統(tǒng)和組件 設置并更新的。在任何時刻,Kubernetes 控制平面 都一直積極地管理著對象的實際狀態(tài),以使之與期望狀態(tài)相匹配。
例如,Kubernetes 中的 Deployment 對象能夠表示運行在集群中的應用。 當創(chuàng)建 Deployment 時,可能需要設置 Deployment 的 ?spec
?,以指定該應用需要有 3 個副本運行。 Kubernetes 系統(tǒng)讀取 Deployment 規(guī)約,并啟動我們所期望的應用的 3 個實例 —— 更新狀態(tài)以與規(guī)約相匹配。 如果這些實例中有的失敗了(一種狀態(tài)變更),Kubernetes 系統(tǒng)通過執(zhí)行修正操作 來響應規(guī)約和狀態(tài)間的不一致 —— 在這里意味著它會啟動一個新的實例來替換。
關于對象 spec、status 和 metadata 的更多信息,可參閱 Kubernetes API 約定。
創(chuàng)建 Kubernetes 對象時,必須提供對象的規(guī)約,用來描述該對象的期望狀態(tài), 以及關于對象的一些基本信息(例如名稱)。 當使用 Kubernetes API 創(chuàng)建對象時(或者直接創(chuàng)建,或者基于?kubectl
?), API 請求必須在請求體中包含 JSON 格式的信息。 大多數(shù)情況下,需要在 ?.yaml
? 文件中為 ?kubectl
?提供這些信息。 ?kubectl
?在發(fā)起 API 請求時,將這些信息轉換成 JSON 格式。
這里有一個 ?.yaml
? 示例文件,展示了 Kubernetes Deployment 的必需字段和對象規(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ù)。下面是一個示例:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml
輸出類似如下這樣:
deployment.apps/nginx-deployment created
在想要創(chuàng)建的 Kubernetes 對象對應的 ?.yaml
? 文件中,需要配置如下的字段:
apiVersion
?- 創(chuàng)建該對象所使用的 Kubernetes API 的版本
kind
?- 想要創(chuàng)建的對象的類別
metadata
?- 幫助唯一性標識對象的一些數(shù)據,包括一個 name 字符串、UID 和可選的 namespace
spec
?- 你所期望的該對象的狀態(tài)對象 ?spec
?的精確格式對每個 Kubernetes 對象來說是不同的,包含了特定于該對象的嵌套字段。
例如,參閱 Pod API 參考文檔中 ?spec
? 字段。 對于每個 Pod,其 ?.spec
? 字段設置了 Pod 及其期望狀態(tài)(例如 Pod 中每個容器的容器鏡像名稱)。 另一個對象規(guī)約的例子是 StatefulSet API 中的 ?spec
?字段。 對于 StatefulSet 而言,其 ?.spec
? 字段設置了 StatefulSet 及其期望狀態(tài)。 在 StatefulSet 的 ?.spec
? 內,有一個為 Pod 對象提供的模板。該模板描述了 StatefulSet 控制器為了滿足 StatefulSet 規(guī)約而要創(chuàng)建的 Pod。 不同類型的對象可以由不同的 ?.status
? 信息。API 參考頁面給出了 ?.status
? 字段的詳細結構, 以及針對不同類型 API 對象的具體內容。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: