我在 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
使用 parameter 执行函数A
,然后开始使用 parameter 执行函数B
。CPU 利用率超过 70% 后,Node 2
启动并开始多次执行我的函数,使用参数A
和B
.
我想要的是仅使用参数执行我的函数,仅Node 1
使用参数执行我的函数,等等。A
Node 2
B
有没有办法实现上述目标?