为什么两个具有相同选择器的Kubernetes ReplicaSet不会相互冲突?

时间:2019-01-13 19:02:38

标签: kubernetes replicaset

副本集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

当我创建这两个副本集时,一个会忽略另一个创建的Pod。

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

据我从文档中了解到,如果有足够的Pod匹配副本集的选择器,则不应创建新的Pod。为什么会这样呢?是否使用ownerReferences?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

标签是附加到对象(如吊舱,部署等)的键/值对。标签用于标识和分组kubernetes资源。

根据kubernetes的官方文档,

  

与名称和UUID标签不同,它不提供唯一性。通常,我们希望许多对象带有相同的标签。

标签不是唯一的,标签用于标识以某种方式相关的对象组,以便您可以列出或观看这些对象。

让我们以您在问题中提到的示例为例,它有两个副本集,每个副本集各有3个副本。两个副本都代表标签app: nginxversion:1.7.9version:1.7.1

现在,如果要标识所有带有标签app=nginx的吊舱,可以运行以下命令:

kubectl get pods -l app=nginx

它将显示所有6个豆荚。

现在,如果要标识具有app=nginx的Pod以及该Nginx的特定版本,则需要运行以下命令:

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

现在它将仅显示三个带有两个标签的豆荚。

有关更多信息,请阅读标签here上的官方文档

答案 2 :(得分:0)

这是因为两个副本集具有两个不同的.metadata.name值,因此它们都有各自独立的资源。即使对于部署集,相同的行为也将可用。假设您用不同的值命名这两个,则这两个部署集也将启动具有相同标签的隔离吊舱。