物件名稱與 ID
叢集中的每個物件都有一個名稱,該名稱對於該資源類型而言是唯一的。每個 Kubernetes 物件也都有一個 UID,該 UID 在整個叢集中是唯一的。
例如,在相同的命名空間中,您只能有一個名為 myapp-1234
的 Pod,但是您可以有一個 Pod 和一個 Deployment,它們各自都名為 myapp-1234
。
對於非唯一的使用者提供屬性,Kubernetes 提供了標籤和註解。
名稱
用戶端提供的字串,用於在資源 URL 中參照物件,例如 /api/v1/pods/some-name
。
在同一時間,給定種類的物件只能有一個給定的名稱。但是,如果您刪除該物件,則可以使用相同的名稱建立新物件。
名稱在相同資源的所有API 版本中都必須是唯一的。API 資源依其 API 群組、資源類型、命名空間(對於命名空間資源)和名稱來區分。換句話說,API 版本在此上下文中無關緊要。
注意
在物件代表實體(例如代表實體主機的節點)的情況下,當在相同名稱下重新建立主機,而沒有刪除並重新建立節點時,Kubernetes 會將新主機視為舊主機,這可能會導致不一致。當在資源建立請求中提供 generateName
而不是 name
時,伺服器可能會產生名稱。當使用 generateName
時,提供的值會用作名稱前綴,伺服器會在其中附加產生的後綴。即使名稱是產生的,它也可能與現有名稱衝突,導致 HTTP 409 回應。在 Kubernetes v1.31 和更高版本中,這種情況發生的可能性已大大降低,因為伺服器將嘗試最多 8 次產生唯一名稱,然後才傳回 HTTP 409 回應。
以下是資源常用的四種類型名稱約束。
DNS 子網域名稱
大多數資源類型都需要一個名稱,該名稱可以用作 RFC 1123 中定義的 DNS 子網域名稱。這表示名稱必須
- 不超過 253 個字元
- 僅包含小寫字母數字字元、「-」或「.」
- 以字母數字字元開頭
- 以字母數字字元結尾
RFC 1123 標籤名稱
某些資源類型要求其名稱遵循 RFC 1123 中定義的 DNS 標籤標準。這表示名稱必須
- 最多包含 63 個字元
- 僅包含小寫字母數字字元或「-」
- 以字母數字字元開頭
- 以字母數字字元結尾
RFC 1035 標籤名稱
某些資源類型要求其名稱遵循 RFC 1035 中定義的 DNS 標籤標準。這表示名稱必須
- 最多包含 63 個字元
- 僅包含小寫字母數字字元或「-」
- 以字母字元開頭
- 以字母數字字元結尾
注意
RFC 1035 和 RFC 1123 標籤標準之間的唯一區別在於,RFC 1123 標籤允許以數字開頭,而 RFC 1035 標籤只能以小寫字母字元開頭。路徑區段名稱
某些資源類型要求其名稱能夠安全地編碼為路徑區段。換句話說,名稱不得為「.」或「..」,且名稱不得包含「/」或「%」。
以下是名為 nginx-demo
的 Pod 的範例 Manifest。
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
注意
某些資源類型對其名稱有其他限制。UIDs
Kubernetes 系統產生的字串,用於唯一識別物件。
在 Kubernetes 叢集的整個生命週期中建立的每個物件都有一個不同的 UID。它旨在區分相似實體的歷史事件。
Kubernetes UID 是通用唯一識別碼(也稱為 UUID)。UUID 已標準化為 ISO/IEC 9834-8 和 ITU-T X.667。
下一步
- 閱讀關於 Kubernetes 中的標籤和註解。
- 請參閱Kubernetes 中的識別碼與名稱設計文件。