为什么 Kubernetes 部署 YAML 文件如此重复?

spr*_*pro 7 kubernetes

Kubernetes 文档中第一个也是最小的部署示例app: nginx重复三遍的行。我知道这是一个标签,但我还没有找到任何可以解释为什么需要为所有以下内容指定此标签的内容:

  1. metadata.labels,
  2. spec.selector.matchLabels, 和
  3. spec.template.metadata.labels

示例部署文件:

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)

cod*_*ger 2

所以1和3在技术上是不相关的。1 是部署对象的标签,仅对您自己的组织目的有意义。3 是将贴在生成的 pod 上的标签。至于为什么 Deployment 依赖于根据 pod 标签手动指定选择器,是为了确保保持无状态。部署控制器可以随时重新启动,一切都会安全。不过,如果有人有一个可靠的提案来处理所有边缘情况,那么它将来可能会得到改进。