Почему два Kubernetes ReplicaSets с одинаковым селектором не конфликтуют друг с другом? - PullRequest
0 голосов
/ 13 января 2019

Реплика Set 1

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: nginx
  name: rs-1
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        version: 1.7.1
    spec:
      containers:
      - image: nginx:1.7.1
        name: nginx-1
      restartPolicy: Always

Набор реплик 2

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  labels:
    app: nginx
  name: rs-2
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
        version: 1.7.9
    spec:
      containers:
      - image: nginx:1.7.9
        name: nginx-1
      restartPolicy: Always

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

C02T30K2GTFM:ask erkanerol$ kubectl get pods --show-labels
NAME         READY   STATUS    RESTARTS   AGE     LABELS
rs-1-996cz   1/1     Running   0          5m13s   app=nginx,version=1.7.1
rs-1-ktv9z   1/1     Running   0          5m13s   app=nginx,version=1.7.1
rs-1-w7sbg   1/1     Running   0          5m13s   app=nginx,version=1.7.1
rs-2-2z8rb   1/1     Running   0          4m26s   app=nginx,version=1.7.9
rs-2-5c56s   1/1     Running   0          4m26s   app=nginx,version=1.7.9
rs-2-hls9p   1/1     Running   0          4m26s   app=nginx,version=1.7.9

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

Ответы [ 3 ]

0 голосов
/ 13 января 2019

Это потому, что два набора реплик имеют два разных значения .metadata.name, следовательно, оба имеют свои собственные изолированные ресурсы. Такое же поведение будет доступно даже с наборами развертывания. Предполагая, что вы присваиваете им имена с разными значениями, два набора развертывания также раскручивают изолированные модули с одинаковыми метками.

0 голосов
/ 13 января 2019

Кажется, они используют ownerReferences. Если так, это не соответствует документированному поведению.

PR: https://github.com/kubernetes/kubernetes/pull/27600

Код: https://github.com/kubernetes/kubernetes/blob/0048d2da400b8c48ae83acc6a223a65f3551674a/pkg/controller/controller_ref_manager.go#L69-L72

Выпуск: https://github.com/kubernetes/website/issues/12205

0 голосов
/ 13 января 2019

Метки - это пары ключ / значение, прикрепленные к объектам, таким как модули, развертывание и т. Д. Метки используются для идентификации и группировки ресурсов kubernetes.

Согласно официальной документации куберне,

В отличие от имен и меток UUID не обеспечивают уникальности. В целом мы ожидаем, что многие объекты будут иметь одинаковые метки.

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

Давайте возьмем пример, который вы упомянули в своем вопросе, с двумя репликациями по 3 реплики в каждой. Обе реплики представляют метки app: nginx и version:1.7.9 или version:1.7.1

Теперь, если вы хотите идентифицировать все модули, имеющие метки app=nginx, вы можете выполнить следующую команду:

kubectl get pods -l app=nginx

Он покажет вам все 6 стручков.

Теперь, если вы хотите идентифицировать модули, которые имеют app=nginx, а также конкретную версию этого nginx, вам нужно выполнить следующую команду:

kubectl get pods -l app=nginx,version=1.7.1

Теперь он покажет вам только три пакета, которые имеют обе метки.

Для получения дополнительной информации читайте официальные документы на этикетках здесь

...