物件名稱和 ID
叢集中的每個物件都有一個在該資源型別中唯一的名稱。每個 Kubernetes 物件也有一個在整個叢集中唯一的UID。
例如,在同一個名稱空間中,你只能有一個名為 `myapp-1234` 的 Pod,但你可以有一個名為 `myapp-1234` 的 Pod 和一個名為 `myapp-1234` 的 Deployment。
對於非唯一的使用者提供的屬性,Kubernetes 提供了標籤和註解。
名稱
客戶端提供的字串,用於引用 資源 URL 中的物件,例如 `/api/v1/pods/some-name`。
給定型別的物件在同一時間只能有一個給定名稱。但是,如果你刪除該物件,你可以用相同的名稱建立一個新物件。
名稱在同一資源的所有API 版本中必須是唯一的。API 資源透過其 API 組、資源型別、名稱空間(對於名稱空間資源)和名稱進行區分。換句話說,API 版本在此上下文中無關緊要。
注意
在物件代表物理實體(如 Node 代表物理主機)的情況下,如果主機在未刪除和重新建立 Node 的情況下以相同名稱重新建立,Kubernetes 會將新主機視為舊主機,這可能導致不一致。在資源建立請求中,如果提供了 `generateName` 而不是 `name`,伺服器可能會生成一個名稱。當使用 `generateName` 時,所提供的值將用作名稱字首,伺服器會附加一個生成的字尾。即使名稱是生成的,它也可能與現有名稱衝突,從而導致 HTTP 409 響應。在 Kubernetes v1.31 及更高版本中,這種情況發生的可能性大大降低,因為伺服器在返回 HTTP 409 響應之前會嘗試生成最多 8 次唯一名稱。
以下是四種常用的資源名稱約束型別。
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 的示例清單。
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
注意
某些資源型別對其名稱有額外的限制。UID
Kubernetes 系統生成用於唯一標識物件的字串。
在 Kubernetes 叢集的整個生命週期中建立的每個物件都有一個唯一的 UID。它旨在區分相似實體的歷史出現。
Kubernetes UID 是通用唯一識別符號(也稱為 UUID)。UUID 已標準化為 ISO/IEC 9834-8 和 ITU-T X.667。
下一步
- 閱讀有關 Kubernetes 中標籤和註解的資訊。
- 請參閱 Kubernetes 中的識別符號和名稱設計文件。