| 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"] |
| |