副本集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?
答案 0 :(得分:1)
似乎他们正在使用ownerReferences。如果是这样,则不适合记录的行为。
答案 1 :(得分:0)
标签是附加到对象(如吊舱,部署等)的键/值对。标签用于标识和分组kubernetes资源。
根据kubernetes的官方文档,
与名称和UUID标签不同,它不提供唯一性。通常,我们希望许多对象带有相同的标签。
标签不是唯一的,标签用于标识以某种方式相关的对象组,以便您可以列出或观看这些对象。
让我们以您在问题中提到的示例为例,它有两个副本集,每个副本集各有3个副本。两个副本都代表标签app: nginx
和version:1.7.9
或version: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值,因此它们都有各自独立的资源。即使对于部署集,相同的行为也将可用。假设您用不同的值命名这两个,则这两个部署集也将启动具有相同标签的隔离吊舱。