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

Mug*_*gen 3 kubernetes kubernetes-deployment

我已经浏览了以下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
Run Code Online (Sandbox Code Playgroud)

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

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

Raj*_*nde 5

第一个标签:

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

kubectl get deployment -l app=nginx
Run Code Online (Sandbox Code Playgroud)

第二个标签:

它不是标签。标签选择器用于选择带有标签 nginx 的 pod。它由 ReplicaSet 使用。

第三个标签:

它是用于识别 pod 的 pod 标签。ReplicaSet 使用它来维护所需的副本数量,并使用该标签选择器。它也用于使用以下命令选择 pod:

kubectl get pods -l app=nginx
Run Code Online (Sandbox Code Playgroud)


Pra*_*dha 5

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

kubectl delete deployment -l app=nginx
Run Code Online (Sandbox Code Playgroud)

这将删除整个部署.

所述第二标签selector: matchLabels它告诉资源(服务等)根据标签相匹配的吊舱.因此,如果您要创建包含所有标签的pod的服务,app=nginx请提供以下定义:

apiVersion: v1
kind: Service
metadata:
  name: nginx
spec:
  type: LoadBalancer
  ports:
    - port:  80
  selector:
    app: nginx
Run Code Online (Sandbox Code Playgroud)

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

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

  • 部署定义是否存在一个用例,其中“.spec.selector.matchLabels”中列出的标签与同一部署的“.spec.template.metadata.labels”部分中列出的标签不同? (3认同)
  • 我认为第二个是必需的,其他两个是可选的? (2认同)