Kubernetes Object

為 K8S 中的持久性實體(Persistent Entity),用以表示 Cluster 中的狀態。K8S Object 說明了:

  • 正在運行哪個容器化 App
  • 該 App 的可用資源
  • 該 App 的行為,例如:重啟規則、更新規則、失敗容許等...

一旦創建 K8S Object,K8S 會確保 Object 存續。

Object Spec and Status

  • Spec:用來描述/定義 Object 的行為,在創建 Object 時提供。
  • Status:用來描述 Object 的狀態,由 K8S 管理。

定義 Object

創建 Object 時,一定要提供 Spec。可以透過 K8S API 創建 Object,可以在此時以 API 參數,或是 yaml 檔案定義 Spec

yaml 必填

  • apiVersion:K8S API 版本
  • kind:K8S Object 類型,例如:Pod、Deployment、Service
  • metadata:協助用來識別 Object 的資料
  • spec:Object 的內容物

Object Name and IDs

每個 K8S Object 都有個 Name 跟 UID。

Name

  • 相同 type 中唯一,可自訂。
  • 如果 Name 作為 DNS Subdomain 使用,須符合以下規則:
    • 少於 253 字元
    • 只能小寫字母及 -
    • 開頭結尾皆為字母
  • 如果 Name 作為 DNS Label 使用,須符合以下規則:
    • 少於 63 字元
    • 只能小寫字母及 -
    • 開頭結尾皆為字母
  • 如果 Name 作為 Path Segment 使用,只能使用小寫字母及 -

UID

Cluster 中唯一,由 K8S 派發。

Namespace

Cluster 中的 Virtual Cluster。適合用在多組團隊/多專案共用 Cluster 的情況。

  • Name 只需在 Namespace 中唯一即可;跨 Namespace 重複沒有關係。
  • 大多數的 K8S 服務都在 Namespace 中;除了 Nodes。

DNS

創建 Service 時,同時會創建 DNS Entry,以 <service-name>.<namespace>.svc.cluster.local 呈現。