Five model servers were applied by hand and tracked nowhere. Exported live, kubectl diff empty on all five, so the first sync adopts without restarting. prune: false — KServe copies isvc labels to its child Deployment, so ArgoCD would prune children it does not own and KServe would recreate them.
59 lines
2.3 KiB
YAML
59 lines
2.3 KiB
YAML
# Wave 6 — the model servers behind api.riotpiao.com (namespace `llm-serving`).
|
|
#
|
|
# Syncs before wave 7 (Kong), so the predictor Services exist before the routes
|
|
# that point at them. KServe itself is part of the substrate; this Application
|
|
# owns only the InferenceServices.
|
|
#
|
|
# Adopted from live state on 2026-08-15. These five had been `kubectl apply`-ed
|
|
# by hand — no ArgoCD ownership, present in no repo — so every change to them
|
|
# was drift by definition. Each manifest was exported from the cluster and
|
|
# verified with `kubectl diff` returning empty before this file existed; the
|
|
# first sync therefore adopted them without restarting anything.
|
|
apiVersion: argoproj.io/v1alpha1
|
|
kind: Application
|
|
metadata:
|
|
name: llm-serving
|
|
namespace: argocd
|
|
annotations:
|
|
argocd.argoproj.io/sync-wave: "6"
|
|
spec:
|
|
project: homelab
|
|
revisionHistoryLimit: 3
|
|
source:
|
|
repoURL: https://github.com/Riotpiaole/riotpiao.homelab.com.git
|
|
targetRevision: main
|
|
path: k8s/apps/llm-serving
|
|
destination:
|
|
server: https://kubernetes.default.svc
|
|
namespace: llm-serving
|
|
syncPolicy:
|
|
automated:
|
|
# `prune: false` here, unlike every other Application in this repo, and it
|
|
# is not an oversight.
|
|
#
|
|
# ArgoCD tracks ownership with the `argocd.argoproj.io/instance` label
|
|
# (argocd-cm `application.instanceLabelKey`). KServe copies an
|
|
# InferenceService's labels onto the Deployment and Service it generates —
|
|
# visible today as `app.kubernetes.io/name` and `part-of` on
|
|
# `ornith-predictor`. So once ArgoCD labels an InferenceService, KServe
|
|
# propagates that tracking label to children that are not in git, ArgoCD
|
|
# reads them as extraneous, prunes them, and KServe recreates them. That
|
|
# loop churns GPU pods.
|
|
#
|
|
# Deleting an InferenceService therefore means deleting the file AND
|
|
# removing the object, rather than relying on prune.
|
|
prune: false
|
|
selfHeal: true
|
|
syncOptions:
|
|
- CreateNamespace=true
|
|
# KServe CRDs are large; server-side apply avoids the
|
|
# "metadata.annotations: Too long" failure client-side apply hits, and is
|
|
# the correct mode for adopting objects an operator also writes to.
|
|
- ServerSideApply=true
|
|
retry:
|
|
limit: 3
|
|
backoff:
|
|
duration: 10s
|
|
factor: 2
|
|
maxDuration: 3m
|