kubernetes - 尽管我有相同的选择器标签,但现有的 pod 不符合部署对象的条件
问题描述
我刚开始学习 Kubernetes。请帮帮我。
根据我的假设,当部署对象将基于选择器创建副本集时,如果部署中使用的具有相同选择器标签的任何现有运行 pod 必须由调度程序使用,但在我的以下情况下不是。如果错了,请纠正我,否则请帮助我解决哪里出错了。
pod.yml
apiVersion: v1
kind: Pod
metadata:
name: web
labels:
type: frontend
spec:
containers:
- name: nginx-container
image: nginx
deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
template:
metadata:
name: web
labels:
type: frontend
spec:
containers:
- name: nginx-container
image: nginx
selector:
matchLabels:
type: frontend
replicas: 2
我首先创建了一个 pod,然后我尝试部署相同的 pod 类型。
kubectl get pods
NAME READY STATUS RESTARTS AGE
web 1/1 Running 0 22m
web-deployment-89d6bf94f-5dqxj 1/1 Running 0 13m
web-deployment-89d6bf94f-xrngx 1/1 Running 0 21m
解决方案
如果您查看由部署创建的其中一个 pod(例如kubectl describe pod web-deployment-89d6bf94f-5dqxj
)的描述,您会发现它具有附加标签pod-template-hash
,该标签由部署控制器添加到其底层副本集。这是文档中关于如何以及为什么设置此标签的一小段:
此标签确保 Deployment 的子 ReplicaSet 不会重叠。它是通过对 ReplicaSet 的 PodTemplate 进行散列并使用生成的散列作为添加到 ReplicaSet 选择器、Pod 模板标签以及 ReplicaSet 可能具有的任何现有 Pod 中的标签值来生成的。
因此,基本上,在部署之外创建的 pod 不属于此部署的副本集。
推荐阅读
- node.js - SocketIO + 服务器 + Angular
- sql - 屏蔽策略架构:是否可以跨多个数据库或模式设置屏蔽策略?
- c++ - 创建不带通配符的 gtest 过滤器
- html - 悬停/鼠标悬停html时将视频源更改为图像源
- latex - 如何在 TikZ/er 图片中省略关系的“钻石”符号并控制文本沿关系路径的位置?
- r - R tidymodels 配方接近数字属性的零方差过滤器
- c# - C# 检查列表
为空 - stripe-payments - 如果帐户经过验证,您将无法通过 API 更改 `company[tax_id]`。条纹
- javascript - 在我的代码中需要 mongodb api mongoose 后,Visual Studio 代码中的错误
- optimization - Solidity gas 费用的最佳内存实践和优化