一、多级服务同时扩容
图片示例为多级微服务调用:
·A、B、C 这组服务通常具有固定的数量比例。
·A 的压力突增,迫使扩容,B 和 C 也可以用 KEDA 的 Kubernetes Workload 触发器实现与 A 几乎同时扩容,而无需等待压力逐级传导才缓慢迫使扩容。
二、Deploy 配置
DeployA 配置示例如下,DeployB 和 DeployC 的配置可参照 DeployA 的示例进行设置。
apiVersion: apps/v1kind: Deploymentmetadata: name: a labels: app: aspec: replicas: 3 selector: matchLabels: app: a template: metadata: labels: app: a spec: containers: – name: a image: nginx:1.21.6 ports: – containerPort: 80 resources: requests: memory: "256Mi" cpu: "250m" limits: memory: "512Mi" cpu: "500m"
三、Deploy 扩容配置
配置 A 的扩容,可以根据 CPU 和内存压力扩容。例如:
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata: name: aspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: a pollingInterval: 15 minReplicaCount: 10 maxReplicaCount: 1000 triggers: – type: memory metricType: Utilization metadata: value: "60" – type: cpu metricType: Utilization metadata: value: "60"
然后配置 B 和 C 的扩容,假设固定比例 A:B:C = 3:3:2。例如:
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata: name: bspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: b pollingInterval: 15 minReplicaCount: 10 maxReplicaCount: 1000 triggers: – type: kubernetes-workload metadata: podSelector: 'app=a' # 选中 A 服务 value: '1' # A/B=3/3=1
apiVersion: keda.sh/v1alpha1kind: ScaledObjectmetadata: name: cspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: c pollingInterval: 15 minReplicaCount: 3 maxReplicaCount: 340 triggers: – type: kubernetes-workload metadata: podSelector: 'app=a' # 选中 A 服务 value: '3' # A/C=3/2=1.5
通过以上配置,当 A 的压力增加时,A、B 和 C 将几乎同时进行扩容,而无需等待压力逐级传导。这样可以更快地适应压力变化,提高系统的弹性和性能。
四、执行命令
要应用上述配置的 yaml 文件,请参考以下命令执行(以 a.yaml 为例):
kubectl apply -f a.yaml