副本集不会删除复制控制器 Pod?



当我创建副本集和复制控制器时,副本集没有删除复制控制器的 pod,我试图了解原因。

上下文:我为副本集匹配标签部分提供了与复制控制器标签部分中相同的标签。

据我了解,复制集确保在匹配标签部分中只有一定数量的具有指定标签的 pod。当我使用相同标签自行创建一个 pod 时,副本集会删除该 pod,但它似乎不会删除复制控制器的 pod。所以我想我的问题是复制控制器是保持其 pod 运行还是副本集不会干扰复制控制器 pod?

副本集是复制控制器的更新版本,您可以通过这种方式使用它。 一个支持基于集合的选择器。

您可以将两者视为不同。

对于副本集列表,您可以

kubectl get rs

有关复制控制器的列表,您可以

kubectl get rc

复制控制器概念:https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller/

副本集概念: https://kubernetes.io/docs/concepts/workloads/controllers/replicaset/

我认为这与metadata.ownerReferences有关。根据副本集文档:

副本集通过 Pod 链接到其 Pod。 metadata.ownerReferences字段,该字段指定哪些资源 当前对象归 所有。副本集获取的所有 Pod 都具有 他们拥有副本集的识别信息,在其 所有者引用字段。正是通过此链接,副本集 知道它正在维护的 Pod 的状态并制定计划 因此。

副本集使用其选择器标识要获取的新 Pod。如果 有一个 Pod 没有所有者引用或所有者引用没有 一个控制器,它与副本集的选择器匹配,它将是 立即被上述副本集收购。

所有者和家属页面还为您提供了如何使用和控制metadata.ownerReferences的示例

我玩过nginx。

1( 卢比亚姆

apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-set
labels:
app: nginx
spec:
# modify replicas according to your case
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

2( rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 3
selector:
app: nginx
template:
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80

3(手动创建pod:kubectl run nginx --image=nginx --labels="app=nginx"。在这样的启动吊舱没有所有者的情况下根本没有所有者引用

RS和RC都会删除nginx pod,如果我手动启动它。他们都依赖于"app: nginx"标签。

但是,您可以同时部署 RS 和 RC - 它们不会相互接触 Pod。

主要区别在于它们的所有者引用。

RS:

ownerReferences:
- apiVersion: apps/v1
blockOwnerDeletion: true
controller: true
kind: ReplicaSet
name: nginx-set

钢筋混凝土:

ownerReferences:
- apiVersion: v1
blockOwnerDeletion: true
controller: true
kind: ReplicationController
name: nginx

所以假设这就是 rc 和 rs 和平相处并且不相互接触的原因((

最新更新