Header Ads

Usando anotações, rótulos e seletores do Kubernetes

Piotr Swat / Shutterstock. com

Anotações, rótulos e seletores são usados ​​para gerenciar metadados anexados aos seus objetos Kubernetes. As anotações e rótulos definem os dados, enquanto os seletores fornecem uma maneira de consultá-los.

Aqui estão as diferenças entre os três conceitos, para que foram projetados e como você pode usá-los para gerenciar seus recursos.

Anotações

A documentação do Kubernetes define anotações como “ metadados arbitrários de não identificação ” que você adiciona aos seus objetos. Seu status como “ sem identificação ” significa que eles não são usados ​​internamente pelo Kubernetes como parte de seu sistema de seleção de objetos.

Isso significa que as anotações são mais usadas para dados independentes do objeto e de sua função no cluster. Você pode usá-los para adicionar informações sobre a ferramenta que criou um objeto, definir quem é responsável por seu gerenciamento ou adicionar tags para serem selecionadas por ferramentas externas.

Não há restrições quanto à finalidade de uso das anotações. Contanto que seus dados possam ser expressos como um par de valores-chave, você pode criar uma anotação que os encapsule. O modelo permite armazenar dados úteis diretamente ao lado de seus objetos, em vez de ter que consultar documentação externa ou bancos de dados.

Definindo anotações

As anotações são definidas como parte do campo de metadados de um recurso. Eles são pares de valores-chave simples. A chave deve ter 63 caracteres ou menos e pode incluir caracteres alfanuméricos, travessões, sublinhados e pontos. Deve começar e terminar com um caractere alfanumérico.

Publicidade

As chaves também suportam um prefixo opcional que deve ser um subdomínio DNS válido. Os prefixos são usados ​​para criar um namespace para suas chaves de anotação, evitando colisões entre anotações comuns, como nome e versão. Quando um prefixo é usado, uma barra o separa da chave.

apiVersion: v1 tipo: metadados do pod: nome: pod-with-annotations annotations: unefixed-annotation: " value " cloudsavvyit. com/annotation-prefixed: " outro valor " especificação: # < omitido >

Este exemplo demonstra anotações prefixadas e não prefixadas.

Você pode recuperar as anotações que foram definidas em um objeto usando o Kubectl. Não há comando integrado, portanto, você precisa obter a definição JSON ou YAML do objeto e, em seguida, extrair o valor do campo de anotações. Aqui está um exemplo que exibe as anotações associadas ao pod mostrado acima:

 kubectl get pod pod-with-annotations -o jsonpath = '{. metadata. annotations}' 

Rótulos

Os rótulos são outra forma de metadados que você pode anexar aos seus recursos. A documentação descreve a função dos rótulos como “ identificando atributos de objetos que são significativos e relevantes para os usuários ” mas independente das propriedades do sistema central.

Enquanto as anotações são intencionalmente sem propósito, capazes de representar quaisquer dados arbitrários, os rótulos são destinados a situações mais formais. Eles são comumente usados ​​para representar processos e estruturas organizacionais. Você pode usar rótulos para denotar o status de lançamento de um recurso (como beta ou estável) ou o estágio de desenvolvimento para o qual ele mapeia (build ou qa).

Os rótulos podem ser usados ​​como seletores ao fazer referência a objetos. Esta é uma diferença importante em comparação com as anotações que não são suportadas como seletores. Aqui está um pod que seleciona nós que têm o ambiente de nó: rótulo de produção:

apiVersion: v1 tipo: metadados do pod: nome: pod-with-node-selector spec: containers: # < omitido > nodeSelector: node-environment: production

Definindo rótulos

Os rótulos são anexados aos objetos da mesma forma que as anotações. Adicione um campo de rótulos aos metadados do objeto e, em seguida, preencha-o com pares de valores-chave. Os rótulos possuem as mesmas restrições em relação a nomes e prefixos de chave.

apiVersion: v1 kind: Pod metadata: name: pod-with-labels labels: cloudsavvyit. com/environment: stable spec: # < omitido >

Publicidade

Você pode recuperar os rótulos de um objeto usando Kubectl com a mesma técnica mostrada anteriormente. Obtenha a representação JSON do objeto e extraia o campo de rótulos:

 kubectl get pod pod-with-labels -o jsonpath = '{. metadata. labels}' 

Kubectl também suporta um sinalizador --show-labels para incluir rótulos em tabelas de saída legíveis por humanos:

 kubectl get pods --show-labels 

Seletores

Os seletores são usados ​​nas definições de objeto do Kubernetes para fazer referência a outros objetos. Diferentes tipos de seletores estão disponíveis para puxar objetos que possuem certas características.

No exemplo acima, usamos um seletor para identificar os nós com um rótulo específico. Este é um objeto de implantação que usa um seletor de rótulo explícito para identificar os pods que ele deve gerenciar:

apiVersion: apps / v1 kind: Metadados de implantação: nome: especificação de implantação: selector: matchLabels: cloudsavvyit. com/app: selectors-demo replicas: 3 template: metadata: labels: cloudsavvyit. com/app: selectors-demo spec : # < omitido >

O modelo de implantação criará pods com o rótulo cloudsavvyit. com/app definido. Eles serão combinados pelo seletor para que se tornem parte da implantação.

Seletores no Kubectl

Você pode usar uma forma de seletor para filtrar os objetos que são retornados pelo Kubectl:

 kubectl get pods -l cloudsavvyit. com/app=selectors-demo

Publicidade

As consultas baseadas em rótulos suportam vários tipos de operadores de comparação. Isso inclui comparações baseadas em igualdade e em conjunto:

  • = – O valor do rótulo é igual a um determinado valor.
  • == – O valor do rótulo é estritamente igual a um determinado valor.
  • ! = – O valor do rótulo não é igual a um determinado valor.
  • em – O valor do rótulo é um de um conjunto de valores fornecidos.
  • notin – O valor do rótulo não está em um conjunto de valores fornecidos.
  • existe – O rótulo existe no objeto.

Aqui está um exemplo de uso do operador in para consultar objetos que estão nos ambientes de teste ou produção:

 kubectl get pods -l "ambiente em (dev, produção)" 

Resumo

Anotações e rótulos são duas maneiras de adicionar metadados aos seus objetos Kubernetes. As anotações são para dados sem identificação que não serão referenciados pelo Kubernetes. Os rótulos são usados ​​para identificar objetos para que possam ser selecionados por outros recursos do Kubernetes.

É melhor usar uma anotação se você não for consultar os objetos com o par de valor-chave. Use um rótulo se for fazer referência a ele em outro recurso ou para filtrar a saída do Kubectl em seu terminal.

Ao trabalhar com rótulos, várias formas de seletor estão disponíveis para ajudá-lo a acessar os dados de que precisa. As anotações são um pouco mais difíceis de acessar, pois não devem ser consultadas, mas você ainda pode listá-las visualizando a representação JSON de um objeto Kubernetes.

Nenhum comentário