Kubernetes 如何确保GKE中只有一个pod在我的节点上运行?
在我的应用程序中,我有一个rest服务器,它通过命令行与数据库进行本地交互(说来话长)。无论如何,数据库都安装在节点上的本地ssd中。我可以保证,只有这种类型的吊舱才会被安排在节点池中,因为我已经污染了节点,并为我的吊舱添加了公差 我想知道的是,如何防止kubernetes在单个节点上调度我的pod的多个实例?我希望避免这种情况,因为我希望我的pod能够消耗尽可能多的CPU,而且我也不希望多个pod通过本地ssd进行交互Kubernetes 如何确保GKE中只有一个pod在我的节点上运行?,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,在我的应用程序中,我有一个rest服务器,它通过命令行与数据库进行本地交互(说来话长)。无论如何,数据库都安装在节点上的本地ssd中。我可以保证,只有这种类型的吊舱才会被安排在节点池中,因为我已经污染了节点,并为我的吊舱添加了公差 我想知道的是,如何防止kubernetes在单个节点上调度我的pod的多个实例?我希望避免这种情况,因为我希望我的pod能够消耗尽可能多的CPU,而且我也不希望多个pod通过本地ssd进行交互 如何防止将我的类型的多个pod调度到节点上?起初我在考虑守护进程集,但后来
如何防止将我的类型的多个pod调度到节点上?起初我在考虑守护进程集,但后来我想,我想将我的节点池设置为自动缩放,这样当我的池中有n个节点,并且我请求n+1个副本时,节点池会自动缩放。我可以建议两种方法。一种是限制节点上可调度的pod数量,另一种是将pod分配给给定节点,同时请求节点中可用的全部资源 1。限制每个节点的可调度吊舱数量 您可以在创建新集群时设置此限制,但如果以后您改变主意,则会受到限制。创建群集时,在高级设置中查找以下字段 2。将pod分配给特定节点并占用所有资源 另一个选项是设置资源请求编号,使其与节点的资源相匹配,并使用
节点选择器和标签将其分配给给定节点
查看如何将POD分配给特定节点。您可以与结合使用。或者,您可以在Pod
s上配置,例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rest-server
spec:
selector:
matchLabels:
app: rest-server
replicas: 3
template:
metadata:
labels:
app: rest-server
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- rest-server
topologyKey: "kubernetes.io/hostname"
containers:
- name: rest-server
image: nginx:1.12-alpine
根据您试图实现的目标,这可能不是一个完整的答案,因为守护程序不是自动缩放的,它只会在新节点中放置一个pod;向池中添加新节点时
如果您希望使用n+1个副本来修改工作负载,那么最好使用和群集;这将保证在增加播客时添加新节点,在缩小播客时删除新节点:
apiVersion: v1
kind: ReplicationController
metadata:
name: echoheaders
spec:
replicas: 1
template:
metadata:
labels:
app: echoheaders
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- echoheaders
topologyKey: "kubernetes.io/hostname"
containers:
- name: echoheaders
image: k8s.gcr.io/echoserver:1.4
ports:
- containerPort: 8080
tolerations:
- key: dedicated
operator: Equal
value: experimental
effect: NoSchedule
我认为您只需创建一个守护程序集,并设置独立于此的节点扩展。当添加新节点时,pod将自动在该节点上运行。我发现复制控制器不再是一种更干净的方式了。而是使用配置ReplicaSet以设置复制的部署。