Kubernetes 如何确保GKE中只有一个pod在我的节点上运行?

Kubernetes 如何确保GKE中只有一个pod在我的节点上运行?,kubernetes,google-kubernetes-engine,Kubernetes,Google Kubernetes Engine,在我的应用程序中,我有一个rest服务器,它通过命令行与数据库进行本地交互(说来话长)。无论如何,数据库都安装在节点上的本地ssd中。我可以保证,只有这种类型的吊舱才会被安排在节点池中,因为我已经污染了节点,并为我的吊舱添加了公差 我想知道的是,如何防止kubernetes在单个节点上调度我的pod的多个实例?我希望避免这种情况,因为我希望我的pod能够消耗尽可能多的CPU,而且我也不希望多个pod通过本地ssd进行交互 如何防止将我的类型的多个pod调度到节点上?起初我在考虑守护进程集,但后来

在我的应用程序中,我有一个rest服务器,它通过命令行与数据库进行本地交互(说来话长)。无论如何,数据库都安装在节点上的本地ssd中。我可以保证,只有这种类型的吊舱才会被安排在节点池中,因为我已经污染了节点,并为我的吊舱添加了公差

我想知道的是,如何防止kubernetes在单个节点上调度我的pod的多个实例?我希望避免这种情况,因为我希望我的pod能够消耗尽可能多的CPU,而且我也不希望多个pod通过本地ssd进行交互


如何防止将我的类型的多个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以设置复制的部署。