Kubernetes:每个副本一个节点



我在 Kubernetes 集群(在 OpenFaaS 上运行)上部署了一个 CPU 密集型无服务器函数。我想实现的是,每当调用我的函数时,我的集群中都会启动一个新节点来执行该进程,因为给定时间可能会执行多个进程。到目前为止,我已经创建了一个HPA,设置为CPU利用率的70%:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: 4d-as
namespace: openfaas-fn
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: process-layer
minReplicas: 1
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 70

我还向部署添加了一条podAntiAffinity规则,以确保在给定节点上仅部署单个副本:

spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- process-layer
topologyKey: kubernetes.io/hostname

部署还具有resource配置设置:

requests:
cpu: 400m
memory: 1000Mi
limits:
cpu: 1000m
memory: 2000Mi

到目前为止,我能够启动新节点,并在每个节点上部署我的函数副本。期望的结果是每个节点执行彼此隔离的无服务器功能。例如:

Function invoked with parameter A -> Node 1 executes the function with parameter A
Function invoked with parameter B -> Node 2 executes the function with parameter B
Function invoked with parameter C -> Node 3 executes the function with parameter C
...

相反,我看到的是Node 1使用参数A执行函数,然后它开始使用参数B执行函数。在 CPU 利用率超过 70% 后,Node 2旋转并开始多次执行我的函数,使用参数AB

相反,我想要的是Node 1仅使用参数A执行我的函数,Node 2仅使用参数B执行我的函数,依此类推。

有没有办法实现上述目标?

我认为你需要看看 Kubernetes 作业并指定 podAntiAffinity。 如果您使用的是HPA,则需要不断校准资源参数以实现您正在做的事情。

相关内容

  • 没有找到相关文章

最新更新