【发布时间】:2020-12-21 17:32:08
【问题描述】:
假设deployment,replicaSet和pod都是1:1:1的映射。
deployment ==> replicaSet ==> Pod
当我们进行部署时,replicaSet 将pod-template-hash 标签添加到 pod。因此,这看起来足以让副本集检查是否有足够的 pod 正在运行。那么replicaSetmatchLabels选择器有什么意义呢?为什么是强制性的?
解释以便更好地理解
例如:我部署了一个带有这些标签的应用程序。 2 个 pod 正在运行
spec:
replicas: 2
selector:
matchLabels:
app: nginx-app
现在将其中一个 pod 的 pod-template-hash 的标签值更改为其他值(此处更改为 testing)。现在我们立即看到另一个 pod 启动了。所以replicaSet似乎并不关心selector.matchLabels
NAME READY STATUS RESTARTS AGE LABELS
pod/nginx-app-b8b875889-cpnnr 1/1 Running 0 53s app=nginx-app,pod-template-hash=testing
pod/nginx-app-b8b875889-jlk6m 1/1 Running 0 53s app=nginx-app,pod-template-hash=b8b875889
pod/nginx-app-b8b875889-xblqr 1/1 Running 0 11s app=nginx-app,pod-template-hash=b8b875889
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 151d component=apiserver,provider=kubernetes
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
deployment.apps/nginx-app 2/2 2 2 53s app=nginx-app
NAME DESIRED CURRENT READY AGE LABELS
replicaset.apps/nginx-app-b8b875889 2 2 2 53s app=nginx-app,pod-template-hash=b8b875889
【问题讨论】:
-
@Sirish。谢谢 - 不完全澄清这个问题。因此添加了更多信息以使其清楚
-
@RamPrakash ReplicaSet 似乎关心标签对吗?这就是为什么它启动了一个带有匹配标签的新 pod(以及 pod 模板哈希)?
-
@confusedgenius,没有。如果它正在寻找 matchLabels,那么我们已经有 2 个 pod 正在运行。无需启动另一个 pod。
-
哦,好吧,原因是一旦你创建了一个部署,当你查看它的配置
kubectl get deployment nginx-app -o yaml你会看到“matchLabels”部分也包含“pod-template-hash: b8b875889”(它会自动添加)以及用户创建的 yaml 文件中的预定义标签..希望这可以澄清。
标签: kubernetes