Поиск по сайту:

Использование аннотаций, меток и селекторов Kubernetes


Аннотации, метки и селекторы используются для управления метаданными, прикрепленными к вашим объектам Kubernetes. Аннотации и метки определяют данные, а селекторы позволяют запрашивать их.

Вот различия между тремя концепциями, для чего они предназначены и как вы можете использовать их для управления своими ресурсами.

Аннотации

Документация Kubernetes определяет аннотации как «произвольные неидентифицирующие метаданные», которые вы добавляете к своим объектам. Их статус «неидентифицирующих» означает, что они не используются внутри Kubernetes как часть его системы выбора объектов.

Это означает, что аннотации лучше всего использовать для данных, которые не зависят от объекта и его роли в вашем кластере. Вы можете использовать их, чтобы добавить информацию об инструменте, создавшем объект, определить, кто отвечает за его управление, или добавить теги, которые будут использоваться внешними инструментами.

Нет никаких ограничений на то, для чего вы используете аннотации. Пока ваши данные могут быть выражены в виде пары ключ-значение, вы можете создать аннотацию, которая их инкапсулирует. Модель позволяет хранить полезные данные непосредственно рядом с вашими объектами, вместо того чтобы обращаться к внешней документации или базам данных.

Настройка аннотаций

Аннотации определяются как часть поля metadata ресурса. Это простые пары ключ-значение. Ключ должен содержать не более 63 символов и может включать буквенно-цифровые символы, тире, символы подчеркивания и точки. Он должен начинаться и заканчиваться буквенно-цифровым символом.

Ключи также поддерживают необязательный префикс, который должен быть действительным субдоменом DNS. Префиксы используются для пространства имен ваших ключей аннотаций, что позволяет избежать конфликтов между общими аннотациями, такими как имя и версия. Когда используется префикс, символ косой черты отделяет его от ключа.

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-annotations
  annotations:
    unprefixed-annotation: "value"
    cloudsavvyit.com/prefixed-annotation: "another value"
spec:
  # <omitted>

В этом примере демонстрируются аннотации как с префиксом, так и без префикса.

Вы можете получить аннотации, которые были установлены для объекта, с помощью Kubectl. Встроенной команды нет, поэтому вам нужно получить определение объекта в формате JSON или YAML, а затем извлечь значение поля annotations. Вот пример, который отображает аннотации, связанные с подом, показанным выше:

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

Этикетки

Метки — это еще одна форма метаданных, которые вы можете прикрепить к своим ресурсам. В документации роль меток описывается как «идентификация атрибутов объектов, которые имеют смысл и важны для пользователей», но не зависят от свойств базовой системы.

В то время как аннотации намеренно бесцельны и могут представлять любые произвольные данные, метки предназначены для более формальных ситуаций. Они обычно используются для представления процессов и организационных структур. Вы можете использовать метки для обозначения статуса выпуска ресурса (например, бета или стабильная) или этапа разработки, которому он соответствует (сборка или ка).

Метки можно использовать в качестве селекторов при ссылке на объекты. Это ключевое отличие от аннотаций, которые не поддерживаются в качестве селекторов. Вот модуль, который выбирает узлы с меткой node-environment: production:

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-node-selector
spec:
  containers:
    # <omitted>
  nodeSelector:
    node-environment: production

Установка меток

Метки прикрепляются к объектам так же, как и аннотации. Добавьте поле labels в metadata объекта, а затем заполните его парами ключ-значение. Метки имеют те же ограничения в отношении имен ключей и префиксов.

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

Вы можете получить метки объекта с помощью Kubectl с той же техникой, что была показана ранее. Получите представление объекта в формате JSON, затем извлеките поле labels:

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

Kubectl также поддерживает флаг --show-labels для включения меток в удобочитаемые выходные таблицы:

kubectl get pods --show-labels

Селекторы

Селекторы используются в определениях объектов Kubernetes для ссылки на другие объекты. Доступны различные типы селекторов для извлечения объектов, обладающих определенными характеристиками.

В приведенном выше примере мы использовали селектор для идентификации узлов с определенной меткой. Вот объект Deployment, который использует явный селектор меток для определения подов, которыми он должен управлять:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment
spec:
  selector:
    matchLabels:
      cloudsavvyit.com/app: selectors-demo
  replicas: 3
  template:
    metadata:
      labels:
        cloudsavvyit.com/app: selectors-demo
    spec:
      # <omitted>

template развертывания создаст модули с установленной меткой cloudsavvyit.com/app. Они будут сопоставлены с помощью селектора, чтобы они стали частью развертывания.

Селекторы в Kubectl

Вы можете использовать форму селектора для фильтрации объектов, возвращаемых Kubectl:

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

Запросы на основе меток поддерживают несколько видов операторов сравнения. К ним относятся сравнения на основе равенства и сравнения на основе множеств:

  • = — значение метки равно заданному значению.
  • == – значение метки строго равно заданному значению.
  • != — значение метки не равно заданному значению.
  • in — значение метки является одним из заданных значений.
  • notin — значение метки не входит в набор заданных значений.
  • exists — метка существует на объекте.

Вот пример использования оператора in для запроса объектов, находящихся в промежуточной или производственной среде:

kubectl get pods -l "environment in (dev, production)"

Краткое содержание

Аннотации и метки — это два способа добавления метаданных к вашим объектам Kubernetes. Аннотации предназначены для неидентифицирующих данных, на которые Kubernetes не будет ссылаться. Метки используются для идентификации объектов, чтобы их можно было выбрать другими ресурсами Kubernetes.

Лучше всего использовать аннотацию, если вы не будете запрашивать объекты с парой ключ-значение. Используйте метку, если вы будете ссылаться на нее в другом ресурсе или использовать ее для фильтрации вывода Kubectl в своем терминале.

При работе с метками доступно несколько форм селектора, которые помогут вам получить доступ к нужным данным. Доступ к аннотациям немного сложнее, поскольку они не предназначены для запросов, но вы все равно можете получить их список, просмотрев JSON-представление объекта Kubernetes.




Все права защищены. © Linux-Console.net • 2019-2024