首页 > 解决方案 > 如何确保 GKE 中我的节点上只运行一个 pod?

问题描述

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

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

如何防止将多个我的类型的 pod 调度到节点上?起初我在考虑守护程序集,但我想,我想将我的节点池设置为自动扩展,这样当我的池中有 n 个节点并且我请求 n+1 个副本时,节点池会自动扩展向上。

标签: kubernetesgoogle-kubernetes-engine

解决方案


您可以与Daemonsets结合使用。或者,您可以在您的 s 上进行配置,例如:nodeSelectoraffinitypodAntiAffinityPod

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

推荐阅读