Which names should be same in this k8s yaml

8/15/2018
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-app
  labels:
    run: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: my-app
        ports:
        - containerPort: 8080

This is a sample yaml from kubenetes site, there are so many my-app, do they all have to be same? what are their purpose?

-- gacopu
kubernetes

2 Answers

8/15/2018

Personally, I think it can be helpful for checking pods grouping information.

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: my-app   <--- Deployment object name, you can change it.
  labels:
    run: my-app  <--- It is helpful for the management, e.g.> Deleting same label one 
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app <--- What labels are controlled over by this deployment object.
  template:
    metadata:
      labels:
        run: my-app <--- Yeah, it's pod's label. It can be used of grouping with other objects
    spec:
      containers:
      - image: gcr.io/google-samples/hello-app:1.0
        name: my-app
        ports:
-- Daein Park
Source: StackOverflow

8/15/2018

This is a sample yaml from kubenetes site, there are so many my-app, do they all have to be same? what are their purpose?

No they don't have to be the same as far as the name field goes, that can be different. The my-app references seen in the metadata and selector sections are labels that can be used to glue the different Kubernetes objects together or simply select a subset of objects when querying Kubernetes. They will sometimes be the same.

Depending on how you've created the Deployment you may have run: myapp throughout the Deployment and in the objects derived from it. Using kubectl run my-app --image=gcr.io/google-samples/hello-app:1.0 --replicas=3 would create a identical Deployment you're referring to.

Here's a picture showing how the different run: my-app labels are used, using the Deployment above as an inspiration:

enter image description here

The picture above shows you the Deployment and how the template box (blue) are used to create the number of specified replicas (Pods). Each Pod will get a run: my-app label in it's metadata section, from the Deployment point of view this will be used as a way of selecting the Pods it's responsible for.

A similar selection of a subset of Pods using kubectl would be:

kubectl get pods -l run=my-app

This will give you all Pods labeled run: my-app.

To sum up a bit, labels can be used to select a subset of resources when querying using e.g. kubectl or by other Kubernetes resources to do selections. You can create your own labels and they don't necessarily have to be the same throughout your specific Deployment but if they are it would be pretty easy to query for any resource with a specific label.

-- mikejoh
Source: StackOverflow