diff --git a/k8s/apps/llm-serving/kustomization.yaml b/k8s/apps/llm-serving/kustomization.yaml index 5680790..801ae29 100644 --- a/k8s/apps/llm-serving/kustomization.yaml +++ b/k8s/apps/llm-serving/kustomization.yaml @@ -19,6 +19,9 @@ resources: # model-name change. reasoning.yaml below can be dropped once that host change lands. - coder.yaml - reasoning.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. + - 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, # so it is left unmanaged and is not listed here. Delete the CR when convenient. diff --git a/k8s/apps/llm-serving/reasoning-long-service.yaml b/k8s/apps/llm-serving/reasoning-long-service.yaml new file mode 100644 index 0000000..2b05330 --- /dev/null +++ b/k8s/apps/llm-serving/reasoning-long-service.yaml @@ -0,0 +1,43 @@ +# Stable client-facing name for the chat model, deliberately decoupled from the +# process that currently serves it. +# +# poimen-memory addresses this Service, not a pod and not an InferenceService. That +# means the vLLM -> candle-vllm handoff changes only this file's selector. The client +# config never changes again, so the ingest cutover has no window in which the host +# name is wrong. +# +# Two ports on purpose: +# - 80 matches every other predictor Service in this namespace, and matches +# poimen-memory's LLM_CHAT_BASE, which carries no port number. +# - 8080 is the container port. It is also the only port llm-serving-ingress and +# poimen-memory-llm-egress permit, and the port the handoff readiness check +# uses. Publishing it directly avoids a port translation that is easy to get +# wrong in a curl. +# +# The selector names the vLLM reasoning pod today. To hand off, replace the three +# selector labels with candle-vllm's pod labels and nothing else. Do not delete and +# recreate this Service: a delete drops the ClusterIP, and a client that cached the +# name during the gap will fail until it re-resolves. +apiVersion: v1 +kind: Service +metadata: + name: reasoning-long-predictor + namespace: llm-serving + labels: + app.kubernetes.io/part-of: llm-serving + app: reasoning-long-predictor +spec: + type: ClusterIP + selector: + app.kubernetes.io/name: llm-reasoning + component: predictor + serving.kserve.io/inferenceservice: reasoning + ports: + - name: http + protocol: TCP + port: 80 + targetPort: 8080 + - name: http-8080 + protocol: TCP + port: 8080 + targetPort: 8080