File size: 3,438 Bytes
2343011
 
 
 
 
 
 
 
5f3b0b8
 
 
 
 
 
 
 
 
 
 
 
e4e551f
 
 
 
 
 
 
2343011
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
FROM python:3.10-slim

ENV DEBIAN_FRONTEND=noninteractive \
    PYTHONUNBUFFERED=1 \
    PIP_NO_CACHE_DIR=1 \
    PROMETHEUS_VERSION=3.5.1 \
    GRAFANA_VERSION=12.3.1 \
    PROMETHEUS_ARCH=linux-amd64 \
    GRAFANA_ARCH=linux-amd64 \
    ANTIATROPOS_ENV_MODE=live \
    ANTIATROPOS_REWARD_OUTPUT_MODE=normalized \
    ANTIATROPOS_CONTROL_TIMEOUT_S=8.0 \
    ANTIATROPOS_PROM_TIMEOUT_S=5.0 \
    ANTIATROPOS_STRICT_REAL=false \
    ANTIATROPOS_METRIC_AGGREGATION=sum \
    ANTIATROPOS_K8S_NAMESPACE=prod-sre \
    ANTIATROPOS_MIN_REPLICAS=1 \
    ANTIATROPOS_SCALE_STEP=3 \
    ANTIATROPOS_CONTROL_PLANE_URL=http://206.189.136.21:8010 \
    PROMETHEUS_URL=http://206.189.136.21:30090 \
    ANTIATROPOS_WORKLOAD_MAP={"node-0":{"deployment":"payments","namespace":"prod-sre"},"node-1":{"deployment":"checkout","namespace":"prod-sre"},"node-2":{"deployment":"catalog","namespace":"prod-sre"},"node-3":{"deployment":"cart","namespace":"prod-sre"},"node-4":{"deployment":"auth","namespace":"prod-sre"}} \
    ANTIATROPOS_LABEL_NODE_MAP={"payments":"node-0","checkout":"node-1","catalog":"node-2","cart":"node-3","auth":"node-4"} \
    ANTIATROPOS_PROM_QUERY_REQUEST_RATE="sum(rate(http_requests_total[1m])) by (node_id)" \
    ANTIATROPOS_PROM_QUERY_LATENCY_MS="histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[1m])) by (node_id, le)) * 1000" \
    ANTIATROPOS_PROM_QUERY_ERROR_RATE="sum(rate(http_requests_total{status=~\"5..\"}[1m])) by (node_id) / clamp_min(sum(rate(http_requests_total[1m])) by (node_id), 1)" \
    ANTIATROPOS_PROM_QUERY_CPU="avg(rate(container_cpu_usage_seconds_total[1m])) by (node_id)" \
    ANTIATROPOS_PROM_QUERY_QUEUE_DEPTH="avg(queue_depth) by (node_id)" 

RUN apt-get update && apt-get install -y --no-install-recommends \
    bash \
    ca-certificates \
    curl \
    fontconfig \
    libfontconfig1 \
    libfreetype6 \
    libx11-6 \
    libxext6 \
    libxrender1 \
    nginx \
    tar \
    wget \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app

COPY . /app

RUN pip install --upgrade pip setuptools wheel \
    && pip install -e .

RUN set -eux; \
    mkdir -p /opt/prometheus /opt/grafana /var/lib/grafana /var/log/grafana /var/lib/prometheus /etc/grafana /etc/prometheus; \
    curl -fsSL -o /tmp/prometheus.tar.gz "https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.${PROMETHEUS_ARCH}.tar.gz"; \
    tar -xzf /tmp/prometheus.tar.gz -C /tmp; \
    PROMETHEUS_DIR="$(find /tmp -maxdepth 1 -type d -name "prometheus-*" | head -n 1)"; \
    cp -a "${PROMETHEUS_DIR}/." /opt/prometheus/; \
    curl -fsSL -o /tmp/grafana.tar.gz "https://dl.grafana.com/oss/release/grafana-${GRAFANA_VERSION}.linux-amd64.tar.gz"; \
    tar -xzf /tmp/grafana.tar.gz -C /tmp; \
    GRAFANA_DIR="$(find /tmp -maxdepth 1 -type d -name "grafana-*" | head -n 1)"; \
    cp -a "${GRAFANA_DIR}/." /opt/grafana/; \
    rm -rf /tmp/prometheus* /tmp/grafana*; \
    chmod +x /app/deploy/entrypoint.sh

COPY deploy/nginx.conf /etc/nginx/nginx.conf
COPY deploy/prometheus.yml /etc/prometheus/prometheus.yml
COPY deploy/index.html /var/www/html/index.html
COPY deploy/grafana/grafana.ini /etc/grafana/grafana.ini
COPY deploy/grafana/provisioning /etc/grafana/provisioning

EXPOSE 7860

HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \
    CMD curl -fsS http://127.0.0.1:7860/health || exit 1

CMD ["/app/deploy/entrypoint.sh"]