5-Overview-working-with-objects-Understanding Kubernetes Objects
kubernetes物件是kubernetes系統中的持久實體。kubernetes使用這些實體來表示叢集的狀態。具體來說,他們可以描述:
- 哪些容器化應用程式正在執行(以及在哪些節點上執行)
- 這些應用程式可用的資源
- 有關這些應用程式行為的策略,如重新啟動策略、升級和容錯
一個kubernetes物件是一個“意圖記錄”——一旦你建立了這個物件,kubernetes系統就會不斷地工作以確保這個物件存在。通過建立一個物件,您可以有效地告訴kubernetes系統您希望叢集的工作負載是什麼樣的;這是叢集的期望狀態。
要使用k8sapi物件–無論是增刪改查
都需要與 Kubernetes API進行互動. 你可以使用 kubectl
命令, 此命令會把使用者輸入資料轉換成特定格式與apiserver進行通訊. 你也可以使用提供的庫 Client Libraries與api進行互動
Object Spec and Status 規範與狀態
每個kubernetes物件都包含兩個控制物件配置的巢狀物件欄位:spec (物件規範)和status物件狀態。spec(此物件欄位必須提供)描述了您對物件的期望狀態,即您希望物件具有的特性。status狀態描述物件的實際狀態,由kubernetes系統提供和更新。在任何給定的時間,kubernetes控制平面都會主動管理物件的實際狀態,以匹配您提供的所需狀態。
例如, k8s Deployment 一個物件, 它可以代表執行在您的叢集上的應用程式. 當你需要部署應用時,可以將部署spec
設定為指定要執行應用程式的三個副本。kubernetes系統讀取Deployment spec
並啟動所需應用程式的三個例項-更新狀態以匹配規範。如果其中任何一個例項失敗(狀態更改),kubernetes系統通過更正來響應規範和狀態之間的差異——在本例中,啟動一個替換例項
有關物件規範、狀態和後設資料的詳細資訊,請參見 Kubernetes API Conventions.
Describing a Kubernetes Object 描述一個k8s物件
在kubernetes中建立一個物件時,必須提供描述其所需狀態(object spec)的物件規範,以及一些關於物件的基本資訊(如名稱). 當使用kubernetes api建立物件(直接或通過kubectl)時, 該api請求必須將該資訊作為json包含在請求主體中. 最常見的情況是,將資訊以.yaml檔案的形式提供給kubectl。kubectl在發出api請求時將資訊轉換為json。
下面是一個示例.yaml檔案,它顯示了kubernetes部署所需的欄位和object spec物件規範:
# application/deployment.yaml
apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
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.7.9
ports:
- containerPort: 80
使用類似於上面的“.yaml”檔案建立部署的一種方法是在“kubectl”命令列介面中使用kubectl apply
命令,並將“.yaml”檔案作為引數傳遞。下面是一個例子:
kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record
輸出類似於:
deployment.apps/nginx-deployment created
Required Fields 必需欄位
apiVersion
-使用哪個版本的kubernetes api來建立這個物件kind
-要建立什麼型別的物件metadata
-幫助唯一標識物件的資料,包括name
字串、uid
和可選的`namespace``
你還需要提供spec
欄位, 對於每個k8s object spec
都是不同的,以及特定於該物件的巢狀欄位. Kubernetes API Reference 可以幫助您找到可以使用kubernetes建立的所有物件的規範格式.例如,pod的spec
格式可以在這裡找到,Deployment
的spec格式可以在 這裡,找到。
本作品採用《CC 協議》,轉載必須註明作者和本文連結