我刚刚开始学习kubernetes。请帮帮我。
按照我的假设,当部署对象使用部署中使用的具有相同选择器标签的任何现有运行的吊舱必须由调度程序使用时,部署对象将基于选择器创建副本集,但在我的以下情况中则没有。如果有误,请纠正我,否则,请帮我解决问题。
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
我先创建了一个容器,然后尝试部署相同的容器类型。
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
答案 0 :(得分:2)
如果您查看由部署创建的其中一个Pod(例如kubectl describe pod web-deployment-89d6bf94f-5dqxj
)的描述,您会发现它具有附加标签pod-template-hash
,该标签是由部署控制器添加到其基础上的副本集。 docs中的一小段关于如何以及为何设置此标签:
此标签可确保部署的子副本集不重叠。它是通过对ReplicaSet的PodTemplate进行哈希处理并将生成的哈希值用作添加到ReplicaSet选择器,Pod模板标签以及ReplicaSet可能具有的任何现有Pod中的标签值而生成的。
因此,基本上,在部署之外创建的Pod不属于此部署的副本集。
答案 1 :(得分:0)
您为什么要尝试通过部署覆盖pod规范?
为什么不只使用部署?
如果要编辑Pod规范,为什么不直接编辑它而不是尝试通过部署覆盖它?