首页 > 解决方案 > 为什么标签在一次部署中被提及 3 次

问题描述

我浏览了以下文档页面:https ://kubernetes.io/docs/concepts/workloads/controllers/deployment/

示例部署yaml如下:

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

我们可以在这里看到app: nginx提到标签的三个不同时间。

为什么我们需要它们中的每一个?我很难从官方文档中理解它。

标签: kuberneteskubernetes-deployment

解决方案


一个标签用于部署本身,它为特定部署提供标签。假设您要删除该部署,然后运行以下命令:

kubectl delete deployment -l app=nginx

这将删除整个部署。

第二个标签告诉资源selector: matchLabels(服务等)根据标签匹配 pod。因此,假设您要创建所有 pod 都具有标签的服务,app=nginx那么您提供以下定义:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalancer
  ports:
    - port:  80
  selector:
    app: nginx

上述服务将查找 matchLabels 并绑定已app: nginx分配标签的 pod

第三个标签podTemplate标签,template实际上是podTemplate。它描述了它启动的 pod。因此,假设您有两个副本部署,并且 k8s 将启动 2 个具有template: metadata: labels. 这是微妙但重要的区别,因此您可以为部署和该部署生成的 Pod 使用不同的标签。


推荐阅读