Переопределяет ли helm или K8S spec.template.metadata.labels с помощью spec.selector.matchLabels?

У меня есть диаграмма, которую я применяю с помощью helm v3, и когда я визуализирую ее локально, она выглядит так:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: RELEASE-NAME-generic
  labels:
    app: generic
    chart: generic-1.1.2
    release: RELEASE-NAME
    heritage: Helm
    app.kubernetes.io/name: generic
    app.kubernetes.io/instance: RELEASE-NAME
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/version:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: generic
      release: RELEASE-NAME
  template:
    metadata:
      labels:
        app.kubernetes.io/name: generic
        app.kubernetes.io/instance: RELEASE-NAME
    spec:
      imagePullSecrets:
      - name: ""
      containers:
        - name: generic
          image: ":"
          imagePullPolicy: IfNotPresent
          ports:
          resources:
            {}

Обратите внимание, что spec.selector.matchLabels и spec.template.metadata.labels здесь не совпадают. Это потенциально проблема, но это было только для теста.

Когда я применяю его к кластеру (GKE, последняя версия) и проверяю там yaml, это выглядит так (примерно);

apiVersion: apps/v1
kind: Deployment
metadata:
  name: RELEASE-NAME-generic
  labels:
    app: generic
    chart: generic-1.1.2
    release: RELEASE-NAME
    heritage: Helm
    app.kubernetes.io/name: generic
    app.kubernetes.io/instance: RELEASE-NAME
    app.kubernetes.io/managed-by: Helm
    app.kubernetes.io/version:
spec:
  replicas: 1
  selector:
    matchLabels:
      app: generic
      release: RELEASE-NAME
  template:
    metadata:
      labels:
        app: generic
        release: RELEASE-NAME
    spec:
      imagePullSecrets:
      - name: ""
      containers:
        - name: generic
          image: ":"
          imagePullPolicy: IfNotPresent
          ports:
          resources:
            {}

spec.template.metadata.labels был заменен метками в spec.selector.matchLabels.

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

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
0
863
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Эти метки добавляются для поиска ресурсов, управляемых Helm. Ниже вы можете найти некоторую информацию из документации:

Сайт Helm на github может быть полезен для понимания того, как работают метки и селекторы:

spec.selector.matchLabels, определенные в Развертывания/StatefulSets/DaemonSets >=v1/beta2 не должны содержать метка helm.sh/chart или любая метка, содержащая версию диаграммы, потому что селектор неизменяем. Строка метки диаграммы содержит версия, поэтому, если она указана, всякий раз, когда версия Chart.yaml изменения, попытка Хелма изменить это неизменяемое поле приведет к обновить до отказа.

Дополнительная информация на сайте helm:

Элемент метаданных должен быть меткой при следующих условиях:

Он используется Kubernetes для идентификации этого ресурса. предоставлять операторам с целью запроса системы. Для Например, мы предлагаем использовать helm.sh/chart: NAME-VERSION в качестве метки, чтобы что операторы могут легко найти все экземпляры конкретный график для использования.

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

Другие вопросы по теме