kubernetes 为什么在单个部署中会提到标签三次

uemypmqf  于 2023-04-05  发布在  Kubernetes
关注(0)|答案(5)|浏览(88)

我看了下面的docomentation页面: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被提及的三个不同时间。
为什么我们需要他们每一个人?我很难从官方文件中理解。

1l5u6lss

1l5u6lss1#

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

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

上面的服务将查找分配了标签app: nginx的matchLabels和bind pod

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

8fq7wneg

8fq7wneg2#

第一个标签:
是用于选择部署的部署标签,使用第一个标签可以使用以下命令:

kubectl get deployment -l app=nginx

第二个标签:
不是标签,是标签选择器,用于选择带标签nginx的pod,ReplicaSet使用。
第三个标签:
pod label用于标识pod。ReplicaSet使用它来维护所需的副本数量,并为此使用标签选择器。它还用于通过以下命令选择pod:

kubectl get pods -l app=nginx
8nuwlpux

8nuwlpux3#

正如我们所知,标签是用来识别资源的,

  • 第一个标签标识部署本身
  • 第三个是福尔斯Pod模板部分。所以,这个是特定于Pod的。
  • 第二个,即matchLabels,用于告诉Services,ReplicaSet和其他资源在指定的标签条件下对资源进行操作。

第一个和第三个分别是对Deployment和Pod的标签分配,第二个是匹配条件表达式而不是分配。
虽然在真实的世界的例子中,所有3个都有相同的标签,但第一个可以不同于第二个和第三个。但是,第二个和第三个通常与第二个相同的是作用于第三个的条件表达式。

zrfyljdw

zrfyljdw4#

.metadata.labels用于标记deployment对象本身,你不一定需要它,但就像其他答案所说的那样,它可以帮助你组织对象。
.spec.selector告诉deployment(在后台它是ReplicaSet对象)如何找到要管理的pod。对于您的示例,它将管理标签为app: nginx的pod。
但是如何告诉ReplicaSet控制器首先创建带有该标签的pod呢?在pod模板.spec.template.metadata.labels中定义。

3duebb1j

3duebb1j5#

TL;DR

第一个标签(.metadata.labels):Deployments的标签
第二个标签(.spec.selector.matchLabels):告诉ReplicaSets要管理哪些pod。
第3个标签(.spec.template..metadata.labels):Pod的标签,以便ReplicaSets可以找到它。

相关问题