swarm-autoscaler

自动化扩容插件
目前 Docker Swarm 本身没有官方内置的 swarm-autoscaler 插件
swarm-autoscaler(基于 Prometheus 监控)
swarm-scaler(基于 CPU/Memory 指标)

  • 推荐先尝试 swarm-scaler,它轻量且易于集成
swarm-scaler

python代码监控prometheus

https://blog.51cto.com/u_16827017/12500100

import docker
import requests
import time

client = docker.from_env()
PROMETHEUS_URL = "http://prometheus:9090/api/v1/query"
SERVICE_NAME = "my_web_service"
CPU_THRESHOLD = 0.8
CHECK_INTERVAL = 30  # 每30秒检查一次

def get_cpu_usage():
    response = requests.get(PROMETHEUS_URL, params={"query": f"avg(rate(container_cpu_usage_seconds_total{{name=\"\"}}[1m]))"})
    return float(response.json()['data']['result'][0]['value'][1])

def scale_service(replicas):
    client.services.scale(SERVICE_NAME, replicas=replicas)

while True:
    cpu_usage = get_cpu_usage()
    if cpu_usage > CPU_THRESHOLD:
        scale_service(int(cpu_usage * 10))  # 假设每个副本能处理0.1的CPU负载
    elif cpu_usage < (CPU_THRESHOLD / 2):
        scale_service(int(cpu_usage * 5))  # 假设每个副本能处理0.2的CPU负载
    time.sleep(CHECK_INTERVAL)

参考3(未成功)

https://www.cnblogs.com/jelly12345/p/18957427

# 安装自动扩缩组件
docker plugin install --alias scaler docker/scale


# 设置扩缩规则
docker service scale \
  --min 2 \
  --max 10 \
  --step 1 \
  --scale-on-cpu 80 \
  web