O Kubernetes permite a definição de pares chave-valor nos seus objetos de forma que você possa utiliza-los em futuras consultas. Estes pares chave-valor são chamados de labels. Você pode imaginar os labels como se fossem tags utilizadas nos posts de um blog. Como parte da especificação, o Kubernetes limita os labels a 63 caracteres alfanuméricos e caracteres separadores. A figura abaixo mostra os Pods frontend, backend e database com seus conjuntos de labels.
Figure 6-1. Pod with labels
É comum definir os labels durante a criação dos objetos, no entanto você pode modifica-los como e quando desejar. Os labels parecem insignificantes quando vistos pela primeira vez, mas sua importância não deve ser subestimada. Eles são essenciais para o entendimento do comportamento de objetos Kubernetes mais avançados como Deployments e Services.
Labels podem ser criados imperativamente com o comando kubectl run
ou declarativamente na seção metadata.labels
do manifesto yaml. A opção de linha de comando --labels
define um ou mais labels separados por virgula no momento da criação do Pod.
# Criando Pod com dois labels
$ kubectl run labeled-pod \\
--image=nginx \\
--restart=Never \\
--labels=tier=backend,env=dev
# Manifesto equivalente ao comando acima
apiVersion: v1
kind: Pod
metadata:
name: labeled-pod
labels:
env: dev
tier: backend
spec:
containers:
- image: nginx
name: labeled-pod
restartPolicy: Never
Podemos utilizar os comandos describe
e get
para obter as informações do Pod e consultar seus labels.
# Obtendo labels com comando describe
$ kubectl describe pod labeled-pod | grep -C 2 Labels:
...
Labels: env=dev
tier=backend
...
# Obtendo labels com comando get
$ kubectl get pod labeled-pod -o yaml | grep -C 1 labels:
metadata:
labels:
env: dev
tier: backend
...
Se você deseja listar os labels de todos os tipos de objetos ou de um tipo de objeto específico, use a opção de linha de comando --show-labels
.
# Listando Pods e exibindo seus labels
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labeled-pod 1/1 Running 0 38m env=dev,tier=backend
É possível adicionar, remover ou modificar labels de objetos existentes a qualquer momento. Existem duas maneiras de fazer isso: Alterar a seção metadata.labels
de um live object ou Utilizar o comando kubectl label
.
# Listando Pods e seus labels
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labeled-pod 1/1 Running 0 6m24s env=dev,
tier=backend
#######################
## ADICIONANDO LABEL ##
#######################
# Adicionando label region=eu
$ kubectl label pod labeled-pod region=eu
pod/labeled-pod labeled
# Demonstrando resultados
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labeled-pod 1/1 Running 0 6m39s env=dev,
tier=backend,
region=eu
##############################
## ALTERANDO VALOR DO LABEL ##
##############################
# Sobrescrevendo o valor do label `region`, de `eu` para `us`
$ kubectl label pod labeled-pod region=us --overwrite
pod/labeled-pod labeled
# Demonstrando resultados
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labeled-pod 1/1 Running 0 9m34s env=dev,
tier=backend,
region=us
#####################
## EXCLUINDO LABEL ##
#####################
# Removendo label `region`
$ kubectl label pod labeled-pod region-
pod/labeled-pod unlabeled
# Demonstrando resultados
$ kubectl get pods --show-labels
NAME READY STATUS RESTARTS AGE LABELS
labeled-pod 1/1 Running 0 10m env=dev,
tier=backend