Рекомендуемые метки в Kubernetes

Вы можете визуализировать объекты Kubernetes и управлять ими с помощью большего количества инструментов, чем kubectl и панель инструментов. Общий набор меток позволяет инструментам работать интероперабельно, описывая объекты в общем виде, понятном для всех инструментов.

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

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

Примечание. Это рекомендуемые метки. Они облегчают управление приложениями, но не требуются для каких-либо основных инструментов.

Общие метки и аннотации имеют общий префикс: app.kubernetes.io. Метки без префикса являются частными для пользователей. Общий префикс гарантирует, что общие метки не будут мешать пользовательским меткам.

Метки

Чтобы в полной мере использовать следующие метки, их следует применять к каждому объекту ресурса.

  • Ключ: app.kubernetes.io/name
  • Описание: Имя приложения
  • Пример: mysql
  • Тип: string

  • Ключ: app.kubernetes.io/instance
  • Описание: Уникальное имя, идентифицирующее экземпляр приложения
  • Пример: wordpress-abcxzy
  • Тип: string

  • Ключ: app.kubernetes.io/version
  • Описание: Текущая версия приложения (например, семантическая версия, хэш версии и т.д.)
  • Пример: 5.7.21
  • Тип: string

  • Ключ: app.kubernetes.io/component
  • Описание: Компонент в архитектуре
  • Пример: database
  • Тип: string

  • Ключ: app.kubernetes.io/part-of
  • Описание: Имя приложения более высокого уровня, частью которого является данное приложение
  • Пример: wordpress
  • Тип: string

  • Ключ: app.kubernetes.io/managed-by
  • Описание: Инструмент, используемый для управления операциями приложения
  • Пример: helm
  • Тип: string

Чтобы проиллюстрировать эти метки в действии, рассмотрим следующий объект StatefulSet:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: wordpress-abcxzy
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
    app.kubernetes.io/managed-by: helm

Приложения и экземпляры приложений

Приложение может быть установлено один или несколько раз в кластер Kubernetes и, в некоторых случаях, в одно и то же пространство имен. Например, WordPress может быть установлен более одного раза, где разные сайты это разные установки WordPress.

Название приложения и имя экземпляра записываются отдельно. Например, WordPress имеет app.kubernetes.io/name: wordpress, в то время как у него есть имя экземпляра, представленное как app.kubernetes.io/instance со значением wordpress-abcxzy. Это позволяет идентифицировать приложение и экземпляр приложения. Каждый экземпляр приложения должен иметь уникальное имя.

Примеры

Чтобы проиллюстрировать различные способы использования этих меток, следующие примеры имеют различную сложность.

Простая служба без сохранения состояния

Рассмотрим случай простой службы без сохранения состояния, развернутой с использованием объектов Deployment и Service. Следующие два фрагмента представляют, как можно использовать метки в их простейшей форме.

Deployment используется для наблюдения за pods, в которых выполняется само приложение.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: myservice
    app.kubernetes.io/instance: myservice-abcxzy
...

Service используется для представления приложения.

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: myservice
    app.kubernetes.io/instance: myservice-abcxzy
...

Веб-приложение с базой данных

Рассмотрим немного более сложное приложение: веб-приложение (WordPress), использующее базу данных (MySQL), установленное с помощью Helm. Следующие фрагменты иллюстрируют начальные части объектов, используемых для развертывания этого приложения.

Начало следующего Deployment используется для WordPress:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app.kubernetes.io/name: wordpress
    app.kubernetes.io/instance: wordpress-abcxzy
    app.kubernetes.io/version: "4.9.4"
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/component: server
    app.kubernetes.io/part-of: wordpress
...

Service используется для представления WordPress:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: wordpress
    app.kubernetes.io/instance: wordpress-abcxzy
    app.kubernetes.io/version: "4.9.4"
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/component: server
    app.kubernetes.io/part-of: wordpress
...

MySQL представлен как StatefulSet с метаданными как для самого приложения, так и для более крупного приложения, к которому он относится:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxzy
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
...

Service используется для предоставления MySQL как части WordPress:

apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/name: mysql
    app.kubernetes.io/instance: mysql-abcxzy
    app.kubernetes.io/version: "5.7.21"
    app.kubernetes.io/managed-by: helm
    app.kubernetes.io/component: database
    app.kubernetes.io/part-of: wordpress
...

С MySQL StatefulSet и Service вы увидите информацию о MySQL и Wordpress, как более широком приложении.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Контроллеры в Kubernetes: DaemonSet

Контроллеры в Kubernetes: ReplicaSet

Контроллеры в Kubernetes: StatefulSet