# Kubernetes - Label, Annotaions ###### tags: `Kubernetes` ## Foreword > When our Pods is increasing, management will be complicated. For example, how to create a Pod on different Node or how to manage Pods on different level. > > Thus, Kubernetes has the element which called “Label”. According to the different property, we can give the Pod different Labels. > ## Label ### Defination > Labels are key/value pairs that are attached to objects, such as pods. ### Example * "release" : "stable", "release" : "canary" * "environment" : "dev", "environment" : "qa", "environment" : "production" * "tier" : "frontend", "tier" : "backend", "tier" : "cache" * "partition" : "customerA", "partition" : "customerB" > If the objects have Label we can know the objects belong which level immediately. > * An object can have many Labels. * We can use the “selector” to find the Label which is we want. ## Annotation ### Defination > Annotations is the object which we can use to attach arbitrary non-identifying metadata to objects. > ### Example * Fields managed by a declarative configuration layer. Attaching these fields as annotations distinguishes them from default values set by clients or servers, and from auto-generated fields and fields set by auto-sizing or auto-scaling systems. * Build, release, or image information like timestamps, release IDs, git branch, PR numbers, image hashes, and registry address. * Pointers to logging, monitoring, analytics, or audit repositories. * Client library or tool information that can be used for debugging purposes: for example, name, version, and build information. ## Practice ### Step1 Create Pod > We can use “my-pod.yaml” to create a Pod. ````yaml=1 apiVersion: v1 kind: Pod metadata: name: label-demo labels: environment: production app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 ```` > Use `Kubectl applt -f my-pod.yaml` to create a Pod. ### Step2 Get Information > Than use `kubectl get pods` to get the information. Add the `--show-labels` can get the Lebels of Pod. > ![](https://i.imgur.com/VIh6BZq.png) > We can use `kubectl describe pods label-demo` to get the Annotataions. > ![](https://i.imgur.com/y4XkLq7.png) > If we want to add Labels on Pod, we can use `kubectl label pods pod-demo env=production` to add Labels. Then we can see the new Labels on this Pod. > ![](https://i.imgur.com/KKGFMvL.png) > We also can add Labels on Nose by `kubectl label node <node_name> <labels>`. > ### Supplement > And we can use “nodeSelector: <labels>” to select the node which we want to create this objest. > Eample ````yaml=1 apiVersion: v1 kind: Pod metadata: name: label-demo labels: environment: production app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 nodeSelector: kubernetes.io/os=linux ```` ## Summary > We can use the Labels the mark the object. Also, we can use the nodeSelector to select the node where we want to create. ## Reference > https://ithelp.ithome.com.tw/articles/10194613 > > https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/