Как использовать одинаковые метки в развертывании? - PullRequest
0 голосов
/ 13 апреля 2020

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

Но развертывание не выполняется. Может кто-нибудь, пожалуйста, укажите мне обходной путь, или это из-за версии API, которую я использую?

Deployment1:

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: stg-postgres-exporter-pgauth
  namespace: prometheus-exporters
spec:
  replicas: 1
  template:
    metadata:
      labels:
        db: foo
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9187"
        prometheus.io/job_name: "postgres-exporter"
    spec:
      containers:
        - name: stg-rds-exporter
          image: wrouesnel/postgres_exporter:v0.8.0
          ....

Deployment2:

---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: stg-rds-exporter-pgauth
  namespace: prometheus-exporters
spec:
  replicas: 1
  template:
    metadata:
      labels:
        db: foo
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9042"
        prometheus.io/job_name: "rds-exporter"
        prometheus.io/path: "/basic"
    spec:
      containers:
        - name: stg-rds-exporter-pgauth
          image: hbermu/rds_exporter:latest 
          ....

Ошибка:

15: 27: 39 Развертывание "stg-rds-exporter-pgauth" недопустимо: spe c .template.metadata.labels: Неверное значение: map [string] string {"db": " foo "}: selector не соответствует шаблону labels

версия kubectl:

Client Version: version.Info{Major:"1", Minor:"16", GitVersion:"v1.16.1", GitCommit:"d647ddbd755faf07169599a625faf302ffc34458", GitTreeState:"clean", BuildDate:"2019-10-02T23:49:20Z", GoVersion:"go1.12.9", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"14+", GitVersion:"v1.14.9-eks-502bfb", GitCommit:"502bfb383169b124d87848f89e17a04b9fc1f6f0", GitTreeState:"clean", BuildDate:"2020-02-07T01:31:02Z", GoVersion:"go1.12.12", Compiler:"gc", Platform:"linux/amd64"}

Ответы [ 2 ]

2 голосов
/ 13 апреля 2020

Kubernetes использует метки и селекторы для управления репликами ваших развертываний, проверьте приведенный ниже пример, доступный в k8s do c:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

У вас есть селектор matchLabels:

selector:
    matchLabels:
      app: nginx

И метки шаблонов:

template:
    metadata:
      labels:
        app: nginx

Они должны совпадать, и поэтому ваше развертывание не выполняется.

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

1 голос
/ 13 апреля 2020

.spec.selector - это обязательное поле, в котором указывается селектор меток для модулей, на которые распространяется это развертывание. .spec.selector должно соответствовать .spec.template.metadata.labels, иначе оно будет отклонено API. В версии API apps/v1, .spec.selector и .metadata.labels не по умолчанию установлено значение .spec.template.metadata.labels, если не установлено. Поэтому они должны быть установлены явно. Также обратите внимание, что .spec.selector является неизменным после создания развертывания в apps/v1

. Не следует создавать другие модули, метки которых соответствуют этому селектору, либо напрямую, либо путем создания другого развертывания, либо путем создания другого контроллера, такого как ReplicaSet или ReplicationController. Если вы это сделаете, первое развертывание думает, что оно создало эти другие модули. Kubernetes не мешает вам сделать это

...