目标是使计算引擎感觉尽可能像一个无服务器架构。
在我的系统中,每个作业渲染60帧,每个作业需要一个CPU/进程,需要20秒才能完成。
目前我的VM是n1-standard-16
与1 x NVIDIA Tesla T4
。这意味着每个实例可以并行运行大约16个作业,每个进程大约占用20秒(如果我要进行基准测试,很可能少于16)
我的目标是在给定动态工作负载的情况下,使启动尽可能多的实例变得容易。例如,我们想要发出100个作业(每个作业负责60帧,大约需要20秒才能完成)
100 (job)/16 (vcpu) = 6.25 (instances——让四舍五入到7)。
我还在学习米格机,但我没有看到这样管理它们的方法,它是基于CPU使用率的。我的问题是,为了满足这种需求,最好是研究k8,还是有办法在米格内部做到这一点?
听起来我可以使用KEDA,我理解正确吗?
sqs-trigger-example.yml
apiVersion: keda.sh/v1alpha1
kind: TriggerAuthentication
metadata:
name: keda-trigger-auth-aws-credentials
namespace: keda-test
spec:
podIdentity:
provider: aws-kiam # or aws-eks when using IRSA
---
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: aws-sqs-queue-scaledobject
namespace: keda-test
spec:
scaleTargetRef:
name: hello-world
triggers:
- type: aws-sqs-queue
authenticationRef:
name: keda-trigger-auth-aws-credentials
metadata:
queueURL: myQueue
queueLength: "1000"
awsRegion: "eu-west-1"
deolpyment-example.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/name: load-balancer-example
name: hello-world
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: load-balancer-example
template:
metadata:
labels:
app.kubernetes.io/name: load-balancer-example
spec:
containers:
- image: nvidia/cuda/ubuntu image here
name: test
ports:
- containerPort: 3000
resources:
limits:
nvidia.com/gpu: 1
是。有多种方法。我能想到的一种方法是每一项工作都使用一个pod。每个pod都有您的作业所需的资源,并且pod可以分布在具有您的硬件需求的不同Kubernetes节点之间。
现在自动伸缩的典型方式是使用CPU和内存,但是您也可以基于特定的指标进行自动伸缩。为此,我建议您查看一下KEDA,它可以根据某些特定指标(即队列中等待的作业数量)自动伸缩您的作业。KEDA还有ScaledJob资源,您可以在您的情况下使用。
注:也许有其他方式的缩放,而不是CPU,你可能需要检查与谷歌应用引擎的支持。