From 67760720fc463d9d3a2d8e819b94c33be9b82292 Mon Sep 17 00:00:00 2001 From: rock Date: Wed, 4 Nov 2026 06:19:41 +0800 Subject: [PATCH] k8s(llm-serving): client-facing Service for candle-vllm coder Creates coder-predictor selecting app=candle-vllm on ports 80 and 8080, so clients keep one stable host name across the vLLM -> candle-vllm handoff and only this selector changes from now on. The retired KTML predictor requested two V100s and never reached Ready. --- k8s/apps/llm-serving/coder-service.yaml | 40 +++++++++++++++++++++++++ k8s/apps/llm-serving/kustomization.yaml | 1 + 2 files changed, 41 insertions(+) create mode 100644 k8s/apps/llm-serving/coder-service.yaml diff --git a/k8s/apps/llm-serving/coder-service.yaml b/k8s/apps/llm-serving/coder-service.yaml new file mode 100644 index 0000000..83aec11 --- /dev/null +++ b/k8s/apps/llm-serving/coder-service.yaml @@ -0,0 +1,40 @@ +# Stable client-facing name for the coder chat model, deliberately decoupled +# from the process that serves it. +# +# poimen-memory addresses a Service, not a pod and not an InferenceService. The +# vLLM -> candle-vllm handoff therefore changes this file's selector and nothing +# else, so the client config never changes again and there is no window in which +# the host name is wrong. +# +# The previous KTML predictor requested two V100s and never reached Ready, so it +# held half the GPU pool while serving nothing. candle-vllm replaces it. +# +# Two ports on purpose: +# - 80 matches every other predictor Service in this namespace, and matches +# a client base URL that carries no port number. +# - 8080 is the container port. Publishing it directly avoids a port +# translation that is easy to get wrong in a curl. +# +# Do not delete and recreate this Service: a delete drops the ClusterIP, and a +# client that cached the name during the gap fails until it re-resolves. +apiVersion: v1 +kind: Service +metadata: + name: coder-predictor + namespace: llm-serving + labels: + app.kubernetes.io/part-of: llm-serving + app: coder-predictor +spec: + type: ClusterIP + selector: + app: candle-vllm + ports: + - name: http + protocol: TCP + port: 80 + targetPort: 8080 + - name: http-8080 + protocol: TCP + port: 8080 + targetPort: 8080 diff --git a/k8s/apps/llm-serving/kustomization.yaml b/k8s/apps/llm-serving/kustomization.yaml index 925774a..0aa63fc 100644 --- a/k8s/apps/llm-serving/kustomization.yaml +++ b/k8s/apps/llm-serving/kustomization.yaml @@ -16,6 +16,7 @@ resources: - clef-serve.yaml # Stable client-facing name for the chat model. poimen-memory points at this Service, # so the vLLM -> candle-vllm handoff is a selector edit here and no client change. + - coder-service.yaml - reasoning-long-service.yaml # ornith is retired: its InferenceService still reports Ready=True while running zero # replicas, because desired equals available at 0. Its manifest was never committed,