对象名称和 ID

集群中的每个对象都有一个名称,该名称对于该类型的资源是唯一的。每个 Kubernetes 对象还有一个UID,该 UID 在整个集群中都是唯一的。

例如,在同一命名空间中,您只能有一个名为 myapp-1234 的 Pod,但是您可以有一个 Pod 和一个 Deployment,它们的名称都为 myapp-1234

对于非唯一的用户提供的属性,Kubernetes 提供了标签注解

名称

客户端提供的字符串,在资源 URL 中引用对象,例如 /api/v1/pods/some-name

在同一时间,给定类型的对象只能有一个给定名称。但是,如果您删除该对象,则可以创建一个具有相同名称的新对象。

名称在同一资源的API 版本中必须是唯一的。 API 资源通过其 API 组、资源类型、命名空间(对于命名空间资源)和名称来区分。换句话说,API 版本在此上下文中无关紧要。

当在资源创建请求中提供 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 个字符
  • 仅包含小写字母数字字符或“-”
  • 以字母字符开头
  • 以字母数字字符结尾

路径段名称

某些资源类型要求其名称能够安全地编码为路径段。换句话说,该名称不能为“.”或“..”,并且该名称不能包含“/”或“%”。

这是名为 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。

下一步

上次修改时间:太平洋标准时间 2024 年 9 月 26 日 凌晨 1:08: 应用代码审查中的建议 (a44421f26a)