5-Overview-Understanding Kubernetes Objects

cucytoman發表於2019-09-23

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 協議》,轉載必須註明作者和本文連結

相關文章