Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci-e2e-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ jobs:
kubectl --kubeconfig="$KUBECONFIG" -n e2e-integration get pods -o wide > /tmp/e2e-artifacts/pods.txt 2>&1 || true
kubectl --kubeconfig="$KUBECONFIG" -n e2e-integration describe pods > /tmp/e2e-artifacts/pod-descriptions.txt 2>&1 || true
kubectl --kubeconfig="$KUBECONFIG" -n e2e-integration get events --sort-by='.lastTimestamp' > /tmp/e2e-artifacts/events.txt 2>&1 || true
kubectl --kubeconfig="$KUBECONFIG" -n e2e-integration logs -l app.kubernetes.io/name=async-processor --tail=500 > /tmp/e2e-artifacts/processor-logs.txt 2>&1 || true
kubectl --kubeconfig="$KUBECONFIG" -n e2e-integration logs -l app.kubernetes.io/name=llm-d-async --tail=500 > /tmp/e2e-artifacts/processor-logs.txt 2>&1 || true

- name: Upload E2E artifacts
if: failure()
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,12 @@ jobs:
run: make test-integration

- name: Lint Helm chart
run: helm lint charts/async-processor
run: helm lint charts/llm-d-async

- name: Run Helm unit tests
run: |
helm plugin install --version v1.0.3 --verify=false https://github.com/helm-unittest/helm-unittest.git
helm unittest charts/async-processor
helm unittest charts/llm-d-async

check-code-changes:
runs-on: ubuntu-latest
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@ COPY internal/ internal
# was called. For example, if we call make docker-build in a local env which has the Apple Silicon M1 SO
# the docker BUILDPLATFORM arg will be linux/arm64 when for Apple x86 it will be linux/amd64. Therefore,
# by leaving it empty we can ensure that the container and binary shipped on it will have the same platform.
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -ldflags "${LDFLAGS}" -o async-processor cmd/main.go
RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} go build -a -ldflags "${LDFLAGS}" -o llm-d-async cmd/main.go

# Use distroless as minimal base image to package the manager binary
# Refer to https://github.com/GoogleContainerTools/distroless for more details
FROM gcr.io/distroless/static:nonroot
WORKDIR /
COPY --from=builder /workspace/async-processor .
COPY --from=builder /workspace/llm-d-async .
USER 65532:65532

ENTRYPOINT ["/async-processor"]
ENTRYPOINT ["/llm-d-async"]
6 changes: 3 additions & 3 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export
# Image URL to use all building/pushing image targets
IMAGE_TAG_BASE ?= ghcr.io/llm-d
IMG_TAG ?= latest
IMG ?= $(IMAGE_TAG_BASE)/async-processor:$(IMG_TAG)
IMG ?= $(IMAGE_TAG_BASE)/llm-d-async:$(IMG_TAG)

# Versioning information
VERSION ?= $(shell git describe --tags --always --dirty 2>/dev/null || echo "dev")
Expand Down Expand Up @@ -160,7 +160,7 @@ undeploy-ap-on-k8s:
# Optional env vars:
# GAIE_ROOT — GAIE checkout; enables local EPP build and CRDs
# SIM_ROOT — llm-d-inference-sim checkout; enables local sim build
# AP_IMAGE — async-processor image tag (default: $(IMAGE_TAG_BASE)/async-processor:e2e-test)
# AP_IMAGE — async-processor image tag (default: $(IMAGE_TAG_BASE)/llm-d-async:e2e-test)
# EPP_IMAGE — EPP image tag (default: registry.k8s.io/.../epp:v1.5.0)
# SIM_IMAGE — inference-sim image tag (default: ghcr.io/llm-d/llm-d-inference-sim:v0.0.0-test)
# REDIS_IMAGE — Redis/Valkey image for E2E MQ (default: valkey/valkey:8-alpine)
Expand All @@ -171,7 +171,7 @@ undeploy-ap-on-k8s:
# E2E_INTEGRATION_REDIS_PORT, E2E_INTEGRATION_PROM_PORT,
# E2E_INTEGRATION_SIM_PORT, E2E_INTEGRATION_ENVOY_PORT,
# E2E_INTEGRATION_ENVOY_ADMIN_PORT
E2E_IMG ?= $(IMAGE_TAG_BASE)/async-processor:e2e-test
E2E_IMG ?= $(IMAGE_TAG_BASE)/llm-d-async:e2e-test

.PHONY: test-e2e
test-e2e: ## Run e2e integration tests against a Kind cluster
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -498,7 +498,7 @@ Tracing is controlled via standard OpenTelemetry environment variables. Set `OTE
|---------------------|-------------|---------|
| `OTEL_EXPORTER_OTLP_ENDPOINT` | OTLP gRPC collector endpoint (e.g., `http://jaeger:4317`). Empty disables tracing. | _(disabled)_ |
| `OTEL_EXPORTER_OTLP_INSECURE` | Use plaintext gRPC connection | `true` |
| `OTEL_SERVICE_NAME` | Service name for traces | `async-processor` |
| `OTEL_SERVICE_NAME` | Service name for traces | `llm-d-async` |
| `OTEL_TRACES_SAMPLER` | Sampling strategy (`always_on`, `parentbased_traceidratio`, etc.) | `parentbased_traceidratio` |
| `OTEL_TRACES_SAMPLER_ARG` | Sampling ratio (0.0–1.0) | `1.0` |

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
apiVersion: v2
name: async-processor
name: llm-d-async
description: Helm chart for Async-Processor (AP) - Asynchronous Processor for LLM inference workloads
type: application
version: 0.7.0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -185,5 +185,5 @@
},
"time": { "from": "now-1h", "to": "now" },
"title": "Async Processor",
"uid": "async-processor"
"uid": "llm-d-async"
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{{/*
Expand the name of the chart.
*/}}
{{- define "async-processor.name" -}}
{{- define "llm-d-async.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

Expand All @@ -10,7 +10,7 @@ Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "async-processor.fullname" -}}
{{- define "llm-d-async.fullname" -}}
{{- if .Values.fullnameOverride }}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
{{- else }}
Expand All @@ -26,16 +26,16 @@ If release name contains chart name it will be used as a full name.
{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "async-processor.chart" -}}
{{- define "llm-d-async.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Common labels
*/}}
{{- define "async-processor.labels" -}}
helm.sh/chart: {{ include "async-processor.chart" . }}
{{ include "async-processor.selectorLabels" . }}
{{- define "llm-d-async.labels" -}}
helm.sh/chart: {{ include "llm-d-async.chart" . }}
{{ include "llm-d-async.selectorLabels" . }}
{{- if .Chart.AppVersion }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}
Expand All @@ -45,23 +45,23 @@ app.kubernetes.io/managed-by: {{ .Release.Service }}
{{/*
Selector labels
*/}}
{{- define "async-processor.selectorLabels" -}}
app.kubernetes.io/name: {{ include "async-processor.name" . }}
{{- define "llm-d-async.selectorLabels" -}}
app.kubernetes.io/name: {{ include "llm-d-async.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{/*
Create the name of the service account to use
*/}}
{{- define "async-processor.serviceAccountName" -}}
{{- default (include "async-processor.fullname" .) .Values.serviceAccount.name }}
{{- define "llm-d-async.serviceAccountName" -}}
{{- default (include "llm-d-async.fullname" .) .Values.serviceAccount.name }}
{{- end }}

{{/*
Render gate params as JSON with all values as strings.
The gate params parser expects map[string]string, so numeric values must be quoted.
*/}}
{{- define "async-processor.gateParamsJson" -}}
{{- define "llm-d-async.gateParamsJson" -}}
{{- $out := dict -}}
{{- range $k, $v := .Values.ap.redis.gateParams -}}
{{- $_ := set $out $k ($v | toString) -}}
Expand All @@ -74,9 +74,9 @@ Resolve the Redis secret name.
If redis.url is set, the chart creates a Secret named <fullname>-redis.
Otherwise, use the user-provided redis.secretName.
*/}}
{{- define "async-processor.redisSecretName" -}}
{{- define "llm-d-async.redisSecretName" -}}
{{- if .Values.ap.redis.url -}}
{{- printf "%s-redis" (include "async-processor.fullname" .) -}}
{{- printf "%s-redis" (include "llm-d-async.fullname" .) -}}
{{- else -}}
{{- .Values.ap.redis.secretName -}}
{{- end -}}
Expand All @@ -86,7 +86,7 @@ Otherwise, use the user-provided redis.secretName.
Resolve the Redis secret key.
When the chart creates the Secret, the key is always "url".
*/}}
{{- define "async-processor.redisSecretKey" -}}
{{- define "llm-d-async.redisSecretKey" -}}
{{- if .Values.ap.redis.url -}}
url
{{- else -}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "async-processor.fullname" . }}-config
name: {{ include "llm-d-async.fullname" . }}-config
namespace: {{ .Release.Namespace }}
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
data:
{{- if .Values.ap.workerPools }}
worker-pools.json: {{ .Values.ap.workerPools | toJson | quote }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,27 +20,28 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "async-processor.fullname" . }}
name: {{ include "llm-d-async.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
spec:
selector:
matchLabels:
{{- include "async-processor.selectorLabels" . | nindent 6 }}
{{- include "llm-d-async.selectorLabels" . | nindent 6 }}
replicas: 1
template:
metadata:
labels:
{{- include "async-processor.selectorLabels" . | nindent 8 }}
{{- include "llm-d-async.selectorLabels" . | nindent 8 }}
spec:
securityContext:
runAsNonRoot: true
seccompProfile:
type: RuntimeDefault
containers:
- command:
- /async-processor
# Must match the binary produced by the Dockerfile (ENTRYPOINT /llm-d-async).
- /llm-d-async
args:
{{- if .Values.ap.redis.enabled }}
{{- if eq (.Values.ap.messageQueueImpl | default "redis-pubsub") "redis-sortedset" }}
Expand All @@ -59,7 +60,7 @@ spec:
- "{{ .Values.ap.redis.requestQueueName | default "request-sortedset" }}"
{{- if .Values.ap.redis.gateType }}
- --redis.ss.gate-type={{ .Values.ap.redis.gateType }}
- --redis.ss.gate-params={{ include "async-processor.gateParamsJson" . }}
- --redis.ss.gate-params={{ include "llm-d-async.gateParamsJson" . }}
{{- end }}
{{- end }}
- --redis.ss.result-queue-name
Expand Down Expand Up @@ -97,7 +98,7 @@ spec:
{{- end }}
- --pubsub.result-topic-id={{ .Values.ap.gcpPubSub.resultTopicId }}
{{- if .Values.ap.gcpPubSub.topicsConfig }}
- --pubsub.topics-config-file=/etc/async-processor/config/pubsub-topics.json
- --pubsub.topics-config-file=/etc/llm-d-async/config/pubsub-topics.json
{{- else }}
- --pubsub.igw-base-url={{ .Values.ap.igwBaseURL }}
- --pubsub.request-subscriber-id={{ .Values.ap.gcpPubSub.requestSubscriberId }}
Expand All @@ -112,13 +113,13 @@ spec:
- --prometheus-cache-ttl={{ .Values.ap.prometheusCacheTTL }}
{{- end }}
{{- if .Values.ap.workerPools }}
- --pool-config-file=/etc/async-processor/config/worker-pools.json
- --pool-config-file=/etc/llm-d-async/config/worker-pools.json
{{- end }}
{{- if .Values.ap.transformConfig }}
- --transform-config-file=/etc/async-processor/config/transform-config.json
- --transform-config-file=/etc/llm-d-async/config/transform-config.json
{{- end }}
{{- if .Values.ap.requestMergePolicyConfig }}
- --request-merge-policy-config=/etc/async-processor/config/request-merge-policy.json
- --request-merge-policy-config=/etc/llm-d-async/config/request-merge-policy.json
{{- end }}
- --concurrency={{ .Values.ap.concurrency | default 64 }}
- --drain-timeout={{ .Values.ap.drainTimeout | default "2m" }}
Expand Down Expand Up @@ -161,18 +162,18 @@ spec:
- name: OTEL_TRACES_SAMPLER_ARG
value: {{ .Values.ap.otel.samplerArg | quote }}
- name: OTEL_SERVICE_NAME
value: "async-processor"
value: "llm-d-async"

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

charts/llm-d-async/templates/ap-deployments.yaml:259 changes:

        - name: OTEL_SERVICE_NAME
          value: "llm-d-async"   # was: "async-processor"

and the unittest at tests/deployment_test.yaml:449 was updated to match. But the PR body says OTEL service name is intentionally unchanged (async-processor). So
either:

  • the value change is an accidental over-replace (the updated test masks it), or
  • the intent changed and the description is stale.

- name: OTEL_RESOURCE_ATTRIBUTES
value: "k8s.namespace.name=$(NAMESPACE),k8s.pod.name=$(POD_NAME),service.version={{ .Chart.AppVersion }}"
{{- end }}
{{- if .Values.ap.redis.enabled }}
- name: REDIS_URL
valueFrom:
secretKeyRef:
name: {{ include "async-processor.redisSecretName" . }}
key: {{ include "async-processor.redisSecretKey" . }}
name: {{ include "llm-d-async.redisSecretName" . }}
key: {{ include "llm-d-async.redisSecretKey" . }}
{{- end }}
name: async-processor
name: llm-d-async
ports:
- name: metrics
containerPort: {{ .Values.ap.metrics.port | default 9090 }}
Expand Down Expand Up @@ -216,7 +217,7 @@ spec:
volumeMounts:
{{- if or .Values.ap.workerPools .Values.ap.gcpPubSub.topicsConfig .Values.ap.transformConfig .Values.ap.requestMergePolicyConfig }}
- name: ap-config
mountPath: /etc/async-processor/config
mountPath: /etc/llm-d-async/config
readOnly: true
{{- end }}
{{- if .Values.ap.tls.secretName }}
Expand All @@ -225,14 +226,14 @@ spec:
readOnly: true
{{- end }}
{{- end }}
serviceAccountName: {{ include "async-processor.fullname" . }}
serviceAccountName: {{ include "llm-d-async.fullname" . }}
terminationGracePeriodSeconds: 130
{{- if or .Values.ap.workerPools .Values.ap.gcpPubSub.topicsConfig .Values.ap.transformConfig .Values.ap.requestMergePolicyConfig .Values.ap.tls.secretName }}
volumes:
{{- if or .Values.ap.workerPools .Values.ap.gcpPubSub.topicsConfig .Values.ap.transformConfig .Values.ap.requestMergePolicyConfig }}
- name: ap-config
configMap:
name: {{ include "async-processor.fullname" . }}-config
name: {{ include "llm-d-async.fullname" . }}-config
{{- end }}
{{- if .Values.ap.tls.secretName }}
- name: tls-certs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: {{ include "async-processor.fullname" . }}
name: {{ include "llm-d-async.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
{{- with .Values.ap.podMonitor.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
selector:
matchLabels:
{{- include "async-processor.selectorLabels" . | nindent 6 }}
{{- include "llm-d-async.selectorLabels" . | nindent 6 }}
podMetricsEndpoints:
- port: metrics
path: /metrics
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
apiVersion: v1
kind: ServiceAccount
metadata:
name: {{ include "async-processor.fullname" . }}
name: {{ include "llm-d-async.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
{{- if .Values.ap.imagePullSecrets }}
imagePullSecrets:
{{- toYaml .Values.ap.imagePullSecrets | nindent 2 }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "async-processor.fullname" . }}-dashboards
name: {{ include "llm-d-async.fullname" . }}-dashboards
namespace: {{ .Release.Namespace }}
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
{{ .Values.ap.grafana.dashboards.label }}: {{ .Values.ap.grafana.dashboards.labelValue | quote }}
data:
{{- (.Files.Glob "dashboards/*.json").AsConfig | nindent 2 }}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
name: {{ include "async-processor.fullname" . }}-modelserver
name: {{ include "llm-d-async.fullname" . }}-modelserver
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
spec:
selector:
matchLabels:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: {{ include "async-processor.fullname" . }}
name: {{ include "llm-d-async.fullname" . }}
namespace: {{ .Release.Namespace }}
labels:
{{- include "async-processor.labels" . | nindent 4 }}
{{- include "llm-d-async.labels" . | nindent 4 }}
{{- with .Values.ap.prometheusRule.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
groups:
- name: async-processor.rules
- name: llm-d-async.rules
rules:
{{- if .Values.ap.prometheusRule.rules.highRetryRate.enabled }}
- alert: AsyncProcessorHighRetryRate
Expand Down
Loading
Loading