skip to Main Content

Imagine the following deployment definition in kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: nginx-deployment
 labels:
  env: staging
spec:
...

I have two questions in particular:

1). The label env: staging won’t be available in created pods. how can I access this data programmatically in client-go?

2). When pod is created/updated, how can I found which deployment it belongs to?

2

Answers


  1. 1). the label env: staging won’t be available in created pods. how can I access this data programmatically in client-go?

    You can get the Deployment using client-go. See the example Create, Update & Delete Deployment for operations on a Deployment.

    2). when pod is created/updated, how can I found which deployment it belongs to?

    When a Deployment is created, a ReplicaSet is created that manage the Pods.

    See the ownerReferences field of a Pod to see what ReplicaSet manages it. This is described in How a ReplicaSet works

    Login or Signup to reply.
  2. hope you are enjoying your kubernetes journey !

    In fact the label won’t be available in created pods but you can add it to the manifest, in the pod section:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name:  nginx-deploy
      labels:
      #Here you have the deployment labels
        app: nginx                      
    spec:
      selector:
        matchLabels:
        #Here you have the selector that indicates to the deployment 
        #(more exactly to the replicatsets of the deployment) 
        #which pod to track to check if the number of replicas is respected.
          app: nginx                    
    ...
      template:
        metadata:
          labels:
          #Here you have the POD labels that needs to match in the selector.matchlabels section
            app: nginx                  
        spec:
          containers:
          - name:  nginx-container
            image:  nginx:latest
    ...
    

    you can check the pods’ labels by typing:

    ❯ k get po --show-labels
    NAME                            READY   STATUS    RESTARTS   AGE     LABELS
    nginx-deploy-6bdc4445fd-5qlhg   1/1     Running   0          7m13s   app=nginx,pod-template-hash=6bdc4445fd
    nginx-deploy-6bdc4445fd-pgkhb   1/1     Running   0          7m13s   app=nginx,pod-template-hash=6bdc4445fd
    nginx-deploy-6bdc4445fd-xdz59   1/1     Running   0          7m13s   app=nginx,pod-template-hash=6bdc4445fd
    

    you can get the deployments’ labels by typing:

    ❯ k get deploy --show-labels
    NAME           READY   UP-TO-DATE   AVAILABLE   AGE     LABELS
    nginx-deploy   3/3     3            3           7m39s   app=nginx
    

    you can add a custom column in your "kubectl get po" command to display the value of each "app" labels when getting the pods:

    ❯ k get pod -L app
    NAME                            READY   STATUS    RESTARTS   AGE     APP
    nginx-deploy-6bdc4445fd-5qlhg   1/1     Running   0          8m30s   nginx
    nginx-deploy-6bdc4445fd-pgkhb   1/1     Running   0          8m30s   nginx
    nginx-deploy-6bdc4445fd-xdz59   1/1     Running   0          8m30s   nginx
    

    and you can use multiple -L :

    ❯ k get pod -L app -L test
    NAME                            READY   STATUS    RESTARTS   AGE     APP     TEST
    nginx-deploy-6bdc4445fd-5qlhg   1/1     Running   0          9m46s   nginx
    nginx-deploy-6bdc4445fd-pgkhb   1/1     Running   0          9m46s   nginx
    nginx-deploy-6bdc4445fd-xdz59   1/1     Running   0          9m46s   nginx
    

    In general, the names of the pod begin by the name of their owner (deployment, replicaset, statefulset, job etc)
    When you use a deployment to create a pod, you can be sure that between the deployment and the pod there is a replicaset (The deployment only manages the differents version of the replicaset, while the replicaset only ENSURES that the current number of actual replicas is matching the demanded number of replicas in the manifes, with labels selector ! )

    So you in fact, checks the ownerReference filed of a pod, by typing:

    ❯ kubectl get po -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'
    
    NAME                            OWNER                     OWNER_KIND
    nginx-deploy-6bdc4445fd-5qlhg   nginx-deploy-6bdc4445fd   ReplicaSet
    nginx-deploy-6bdc4445fd-pgkhb   nginx-deploy-6bdc4445fd   ReplicaSet
    nginx-deploy-6bdc4445fd-xdz59   nginx-deploy-6bdc4445fd   ReplicaSet
    

    can do the same with replicasets to get their deployments owner:

    ❯ kubectl get rs -o custom-columns=NAME:'{.metadata.name}',OWNER:'{.metadata.ownerReferences[0].name}',OWNER_KIND:'{.metadata.ownerReferences[0].kind}'
    
    NAME                      OWNER          OWNER_KIND
    nginx-deploy-6bdc4445fd   nginx-deploy   Deployment
    

    thats how you can quickly see withs kubectl who owns who

    here is a little reading about owners and dependants: https://kubernetes.io/docs/concepts/overview/working-with-objects/owners-dependents/

    hope this has helped you. bguess

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search