Files
kuboard-press/learning/k8s-intermediate/obj/names.md
huanqing.shao f175aecd74 命名规则
2020-07-25 19:12:13 +08:00

80 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
vssueId: 135
layout: LearningLayout
description: Kubernetes教程_Kubernetes_REST_API中_所有的对象都是通过_name_和_UID_唯一性确定
meta:
- name: keywords
content: Kubernetes 对象,管理Kubernetes对象,Kubernetes Object
---
# 名称
<AdSenseTitle>
Kubernetes REST API 中,所有的对象都是通过 `name``UID` 唯一性确定。查看文档 [identifiers design doc](https://github.com/kubernetes/community/blob/master/contributors/design-proposals/architecture/identifiers.md) 可了解更多关于 `name``UID` 的规则。
* [Names](#Names)
* [UIDs](#UIDs)
</AdSenseTitle>
## Names
可以通过 `namespace` + `name` 唯一性地确定一个 RESTFUL 对象,例如:
`/api/v1/namespaces/{namespace}/pods/{name}`
参考 [名称空间](./namespaces.html)
同一个名称空间下,同一个类型的对象,可以通过 `name` 唯一性确定。如果删除该对象之后,可以再重新创建一个同名对象。
下面是三种广泛使用的资源名称的限制类型:
### DNS Subdomain Names
绝大部分资源类型的名称必须符合 DNS subdomain 命名规则 [RFC 1123](https://tools.ietf.org/html/rfc1123),具体如下:
* 最长不超过 253个字符
* 必须由小写字母、数字、减号 `-`、小数点 `.` 组成
* 由字母开始
* 由字母结束
### DNS Label Names
部分类型的资源要求其名称符合 DNS Label 的命名规则 [RFC 1123](https://tools.ietf.org/html/rfc1123),具体如下:
* 最长不超过 63个字符
* 必须由小写字母、数字、减号 `-`、小数点 `.` 组成
* 由字母开始
* 由字母结束
### Path Segment Names
部分类型的资源要求其名称可以被编码到路径中。换句话说,名称中不能包含 `.``..``/``%`
例如,下面的配置文件定义了一个 name 为 `nginx-demo` 的 Pod该 Pod 包含一个 name 为 `nginx` 的容器:
``` yaml {4,7}
apiVersion: v1
kind: Pod
metadata:
name: nginx-demo
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
```
::: tip
还有一部分资源类型,其名称有更多的限制要求
:::
## UIDs
UID 是由 Kubernetes 系统生成的,唯一标识某个 Kubernetes 对象的字符串。
Kubernetes集群中每创建一个对象都有一个唯一的 UID。用于区分多次创建的同名对象如前所述按照名字删除对象后重新再创建同名对象时两次创建的对象 name 相同,但是 UID 不同。)
Kubernetes 中的 UID 是全局唯一的标识符UUIDs符合规范 ISO/IEC 9834-8 以及 ITU-T X.667