我有一个部署对象:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-webserver-nginx
annotations:
description: This is a demo deployment for nginx webserver
labels:
app: deployment-webserver-nginx
spec:
replicas: 3
selector:
matchLabels:
app: deployment-webserver-pods
template:
metadata:
labels:
app: deployment-webserver-pods
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80我对这个部署对象的理解是,任何带有app:deployment-webserver-pods标签的Pod都将被选中。当然,这个部署对象正在创建3个副本,但是我想像这样显式地添加一个Pod,所以我创建了一个Pod对象并将其标签为app:deployment-webserver-pods,下面是它的Pod定义:
apiVersion: v1
kind: Pod
metadata:
name: deployment-webserver-nginx-extra-pod
labels:
app: deployment-webserver-pods
spec:
containers:
- name: nginx-alpine-container-1
image: nginx:alpine
ports:
- containerPort: 81我的期望是,持续运行的Deployment将选择这个新的Pod,当我执行kubectl get deploy时,我将看到4个Pod在运行。但这并没有发生。
我甚至尝试用这个标签创建这个吊舱,然后创建了我的部署,并认为现在这个显式的pod可能会被选中,但仍然没有发生。
标签和选择器不是这样工作的吗?我知道我可以通过部署扩展到4个副本,但我试图了解如何使用标签和选择器选择Pods /其他Kubernetes对象。
发布于 2021-02-14 07:22:24
来自官方文件
注意:您不应该通过创建另一个部署或创建另一个控制器(如ReplicaSet或ReplicationController )来直接创建标签与此选择器匹配的其他Pods。如果这样做,第一个部署会认为它创建了这些其他Pods。库伯奈特斯并不阻止你这么做。
正如在docs中进一步描述的那样,不建议使用上述方法来扩展部署的副本。
从文档的同一部分需要注意的另一个要点是:
如果有多个控制器具有重叠的选择器,则控制器之间会发生冲突,并且行为不正确。
发布于 2021-02-13 21:00:42
我的期望是,持续运行的Deployment将选择这个新的Pod,当我执行kubectl获得部署时,我将看到4个Pod在运行。但这并没有发生。
Deployment不是这样工作的,它侦听部署-resources并将它们“驱动”到所需的状态。这通常意味着,如果template:-part中有任何更改,那么就会用副本的数量创建一个新的ReplicaSet。您不能以另一种方式将Pod添加到部署中,只需更改replicas: --每个实例都是从同一个Pod模板创建的,并且是相同的。
标签和选择器不是这样工作的吗?但是我试图了解如何使用标签和选择器来选择Pods /其他Kubernetes对象。
是的,在Kubernetes中,标签和选择器用于许多东西,但不是所有的东西。当您创建带有标签的部署,使用相同标签的Pod,最后创建带有选择器的服务时,发送给该服务的通信量将分发给您的部署实例以及额外的Pod。
示例:
apiVersion: v1
kind: Service
metadata:
name: my-service
spec:
selector:
app: deployment-webserver-pods
ports:
- protocol: TCP
port: 80
targetPort: 8080当使用例如标签及选择器时,kubectl对管理也很有用。您可以为团队或应用程序添加标签,然后可以选择属于该团队或应用程序的所有部署或Pods (例如,如果应用程序包括App -部署和缓存-部署),例如:
kubectl get pods -l team=myteam,app=customerservice发布于 2021-02-13 21:21:32
我的期望是,持续运行的Deployment将选择这个新的Pod,当我执行kubectl获得部署时,我将看到4个Pod在运行。但这并没有发生。
Kubernetes是一个运行"Declaratively“而不是"Imperatively”的系统,这意味着您通常通过YAML文件在集群中写入所需的应用程序状态,并且这些声明的所需状态定义了应用程序的所有部分。
如果集群按照您预期的方式进行了必要的配置,那么就很难理解和复制集群是如何处于这种状态的。
https://stackoverflow.com/questions/66189422
复制相似问题