Kubernetes學習筆記---002理解 Kubernetes 對象

Kubernetes學習筆記—002理解 Kubernetes 對象

本頁說明了 Kubernetes 對象在 Kubernetes API 中是如何表示的,以及如何在 .yaml 格式的文件中表示。

理解 Kubernetes 對象

在 Kubernetes 系統中,Kubernetes 對象 是持久化的實體。Kubernetes 使用這些實體去表示整個集羣的狀態。特別地,它們描述瞭如下信息:

  • 哪些容器化應用在運行(以及在哪個 Node 上)
  • 可以被應用使用的資源
  • 關於應用運行時表現的策略,比如重啓策略、升級策略,以及容錯策略

Kubernetes 對象是 “目標性記錄” —— 一旦創建對象,Kubernetes 系統將持續工作以確保對象存在。通過創建對象,本質上是在告知 Kubernetes 系統,所需要的集羣工作負載看起來是什麼樣子的,這就是 Kubernetes 集羣的 期望狀態(Desired State)

操作 Kubernetes 對象 —— 無論是創建、修改,或者刪除 —— 需要使用 Kubernetes API。比如,當使用 kubectl 命令行接口時,CLI 會執行必要的 Kubernetes API 調用,也可以在程序中使用 客戶端庫(開源管理工具) 直接調用 Kubernetes API。

對象規約(Spec)與狀態(Status)

每個 Kubernetes 對象包含兩個嵌套的對象字段,它們負責管理對象的配置:對象 spec 和 對象 statusspec 是必需的,它描述了對象的 期望狀態(Desired State) —— 希望對象所具有的特徵。 status 描述了對象的 實際狀態(Actual State) ,它是由 Kubernetes 系統提供和更新的。在任何時刻,Kubernetes 控制面一直努力地管理着對象的實際狀態以與期望狀態相匹配。

例如,Kubernetes Deployment 對象能夠表示運行在集羣中的應用。 當創建 Deployment 時,可能需要設置 Deployment 的規約,以指定該應用需要有 3 個副本在運行。 Kubernetes 系統讀取 Deployment 規約,並啓動我們所期望的該應用的 3 個實例 —— 更新狀態以與規約相匹配。 如果那些實例中有失敗的(一種狀態變更),Kubernetes 系統通過修正來響應規約和狀態之間的不一致 —— 這種情況,會啓動一個新的實例來替換。

描述 Kubernetes 對象

當創建 Kubernetes 對象時,必須提供對象的規約,用來描述該對象的期望狀態,以及關於對象的一些基本信息(例如名稱)。 當使用 Kubernetes API 創建對象時(或者直接創建,或者基於kubectl),API 請求必須在請求體中包含 JSON 格式的信息。 大多數情況下,需要在 .yaml 文件中爲 kubectl 提供這些信息kubectl 在發起 API 請求時,將這些信息轉換成 JSON 格式。

這裏有一個 .yaml 示例文件,展示了 Kubernetes Deployment 的必需字段和對象規約:

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.14.2
        ports:
        - containerPort: 80

使用類似於上面的 .yaml 文件來創建 Deployment,一種方式是使用 kubectl 命令行接口(CLI)中的 kubectl apply 命令, 將 .yaml 文件作爲參數。下面是一個示例:

kubectl apply -f https://k8s.io/examples/application/deployment.yaml --record

輸出類似如下這樣:

deployment.apps/nginx-deployment created

必需字段

在想要創建的 Kubernetes 對象對應的 .yaml 文件中,需要配置如下的字段:

  • apiVersion - 創建該對象所使用的 Kubernetes API 的版本
  • kind - 想要創建的對象的類型
  • metadata - 幫助識別對象唯一性的數據,包括一個 name 字符串、UID 和可選的 namespace
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章