关于Kubernetes(GKE)资源名称、标签与匹配标签的技术咨询
Kubernetes(GKE)名称、标签与资源关联问题解答
示例Deployment清单
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.7.9 ports: - containerPort: 80
关于Deployment名称、Pod后缀哈希的疑问
- Deployment名称中的"nginx"是什么?
Deployment的名称是nginx-deployment,这里的"nginx"只是命名时的标识性字符串,既不是Pod名称也不是容器名称:
- 容器名称是清单中
spec.containers[0].name字段定义的nginx; - Pod名称由Kubernetes自动生成,格式为
<Deployment名称>-<随机字符串>-<哈希值>,例如nginx-deployment-7f967c89d-2xqzk。
- Pod名称末尾的哈希值是修订号吗?
不是修订号,这个哈希值是Pod模板的哈希摘要。当Deployment的Pod模板(spec.template)内容发生变化时,Kubernetes会计算新的哈希值,用来区分不同版本的Pod模板。新Pod会使用带新哈希的名称,旧Pod则被逐步销毁,以此实现滚动更新。
名称、标签与matchLabels的概念区分
- 名称:Kubernetes资源在所属命名空间内的唯一标识,每个资源(Deployment、Pod、Service、容器等)都有独立名称,不可重复。比如示例中Deployment的
nginx-deployment、Service的nginx、容器的nginx。 - 标签:键值对形式的元数据,用于给资源打标记,支持跨资源分组、筛选。多个资源可以共享同一标签,比如示例中Deployment和它管理的Pod都带有
app: nginx标签。 - matchLabels:资源选择器的一种,通过精确匹配标签键值对关联目标资源:
- Deployment的
spec.selector.matchLabels用来指定它管控的Pod范围(只有带app: nginx标签的Pod会被该Deployment管理); - Service的
selector本质也是标签匹配,用来选择要暴露的后端Pod。
- Deployment的
示例Service清单
apiVersion: v1 kind: Service metadata: name: nginx spec: type: LoadBalancer selector: app: nginx ports: - protocol: TCP port: 60000 targetPort: 80
关于Service暴露范围的疑问
这个Service会暴露同一命名空间下所有带有app: nginx标签的Pod——无论这些Pod是由哪个Deployment创建的,只要标签匹配,就会被纳入Service的后端池,接收来自Service的流量。
内容的提问来源于stack exchange,提问作者Tlink
相关产品推荐
相关产品推荐

