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



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

当我创建这两个ReplicaSet时,其中一个会忽略另一个创建的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。为什么会发生这种事?是否使用所有者引用?

他们似乎在使用所有者引用。如果是这样,它就不符合记录在案的行为。

公关: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

这是因为两个副本集有两个不同的.metadata.name值,因此它们都有自己的独立资源。即使使用部署集,也可以使用相同的行为。假设您用不同的值命名这两个,那么这两个部署集也会产生具有相同标签的隔离pod。

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

根据kubernetes的官方文件,

不同的是,名称和UUID标签不提供唯一性。一般来说,我们期望许多对象带有相同的标签。

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

让我们举一个你在问题中提到的例子,它有两个复制集,每个复制集有3个复制集。两个复制品都表示标签app: nginxversion:1.7.9version:1.7.1

现在,如果您想识别所有带有标签app=nginx的pod,您可以运行以下命令:

kubectl get pods -l app=nginx

它将向您展示所有6个吊舱。

现在,如果你想识别具有app=nginx的pod以及该nginx的特定版本,那么你需要运行以下命令:

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

现在,它将只向您显示三个同时具有这两个标签的吊舱。

欲了解更多信息,请阅读此处标签上的官方文档

最新更新