为何Deployment Controller dc1不选择带相同标签的现有Pod?
为什么Deployment dc1不选择已存在的带app=dc1标签的Pod?
我通过以下YAML创建了一个Pod:
apiVersion: v1 kind: Pod metadata: name: pod2 labels: app: dc1 spec: containers: - name: cont1 image: nginx
随后使用命令 kubectl create deploy dc1 --image=nginx 创建了一个Deployment控制器,其自动生成的选择器为 app=dc1。但发现该Deployment创建了新Pod,而非接管已存在的Pod:
NAME READY STATUS RESTARTS AGE LABELS dc1-969ff47-ljbxk 1/1 Running 0 32m app=dc1,pod-template-hash=969ff47 pod1 1/1 Running 0 33m app=dc1
问题:为何dc1不选择带有相同标签 app=dc1 的现有pod1?
- Deployment的实际选择器并非只有
app=dc1,它还包含自动生成的pod-template-hash=<哈希值>标签。这个哈希值由Deployment根据Pod模板内容计算生成,用于区分不同版本的Pod实例。 - 手动创建的pod1仅带有
app=dc1标签,缺少Deployment要求的pod-template-hash标签,因此无法被该Deployment的选择器匹配。 - Deployment的设计逻辑是只管理自身创建的Pod,这些Pod会自动携带
pod-template-hash标签,确保Deployment能精准识别并管理属于自己的Pod实例,避免误接管其他方式创建的Pod。
内容的提问来源于stack exchange,提问作者meallhour
相关产品推荐
相关产品推荐

