部署标签是否被服务使用?

部署标签是否被服务使用?

我尝试在 Kubernetes 配置文件中命名标签时更加明确,认为部署使用 pod 标签,服务使用部署标签。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-depl
  labels:
    app: auth-depl-label
spec:
  replicas: 1
  selector:
    matchLabels:
      app: auth-pod-label
  template:
    metadata:
      labels:
        app: auth-pod-label
    spec:
      containers:
      - name: auth-pod
        image: bogdan-pechounov/auth
        ports:
        - containerPort: 3000
---
apiVersion: v1
kind: Service
metadata:
  name: auth-srv
spec:
  selector:
    app: auth-depl-label
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000

但是,在 Chrome 中minikube service auth-srv会产生This site can’t be reached错误。在 中minikube dashboard,该服务处于待处理状态,并且没有与该服务关联的 pod。

使用 pod 标签确实有效,这让我想知道部署标签是做什么用的。

apiVersion: v1
kind: Service
metadata:
  name: auth-srv
spec:
  selector:
    app: auth-pod-label
  type: LoadBalancer
  ports:
  - protocol: TCP
    port: 3000
    targetPort: 3000

完整代码skaffold dev开始)

答案1

这让我很疑惑部署标签是做什么用的。

每个标签只是一种引用资源集合的方式,无需知道它们的名称。但是,正如您所指出的,kubernetes 本身以与您的问题相关的几种方式使用标签:

  • Deployments使用标签来跟踪其管理的 Pod 的健康和基数(因为 Pod 的名称大多是随机的)
  • ServicesReady使用标签来跟踪应将流量发送到的Pod

同时Deployments,还需要注意的Deployment本身template: { metadata: { labels: {} } }有标签,但这些标签与新创建的 Pod 上标记的标签无关,并且那些是必须成为的子集matchLabels:才能Deployment管理它们

同样的故事Service,它又可以有它的自己的标签,但与会员使用的标签无关Service。请注意,虽然 中的标签与 中的标签相同是很常见的,matchLabels:但它们彼此之间没有任何关系Serviceselector:

这是一个非常好的设置,因为Deployment只关心 Pod 的存在awesome, 也Service只关心那些 Pod 的存在v1,并且两者都是由从 Deployment 中新生成的 Pod 实现的,因为模板的标签应用于它们

kind: Deployment
spec:
  ...
  matchLabels:
    app: awesome
  template:
    metadata:
      labels:
        app: awesome
        release: v1
---
kind: Service
spec:
  selector:
    release: v1

相关内容