Skip to content

Commit 34da0e5

Browse files
committed
add statefulset
1 parent 3051935 commit 34da0e5

11 files changed

Lines changed: 348 additions & 7 deletions

charts/llm-d-modelservice/templates/_helpers.tpl

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,40 @@ Truncated to 63 characrters because Kubernetes label values are limited to this
3232
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
3333
{{- end }}
3434

35+
{{/*
36+
Determine the workload kind for decode pods.
37+
Priority: requester.enable > multinode > decode.workloadKind > workloadKind > default(Deployment).
38+
*/}}
39+
{{- define "llm-d-modelservice.decodeWorkloadKind" -}}
40+
{{- if .Values.requester.enable -}}
41+
ReplicaSet
42+
{{- else if .Values.multinode -}}
43+
LeaderWorkerSet
44+
{{- else if and (hasKey .Values.decode "workloadKind") .Values.decode.workloadKind -}}
45+
{{- .Values.decode.workloadKind -}}
46+
{{- else if .Values.workloadKind -}}
47+
{{- .Values.workloadKind -}}
48+
{{- else -}}
49+
Deployment
50+
{{- end -}}
51+
{{- end -}}
52+
53+
{{/*
54+
Determine the workload kind for prefill pods.
55+
Priority: multinode > prefill.workloadKind > workloadKind > default(Deployment).
56+
*/}}
57+
{{- define "llm-d-modelservice.prefillWorkloadKind" -}}
58+
{{- if .Values.multinode -}}
59+
LeaderWorkerSet
60+
{{- else if and (hasKey .Values.prefill "workloadKind") .Values.prefill.workloadKind -}}
61+
{{- .Values.prefill.workloadKind -}}
62+
{{- else if .Values.workloadKind -}}
63+
{{- .Values.workloadKind -}}
64+
{{- else -}}
65+
Deployment
66+
{{- end -}}
67+
{{- end -}}
68+
3569
{{/*
3670
Create common labels for the resources managed by this chart.
3771
*/}}
@@ -450,7 +484,16 @@ context is a pdSpec
450484
{{- $hasModelVolume = true }}
451485
{{- end -}}
452486
{{- end -}}
453-
{{- if $hasModelVolume }}
487+
{{- /* Check if model-storage is managed by StatefulSet volumeClaimTemplates */ -}}
488+
{{- $hasModelStorageClaim := false }}
489+
{{- if .pdSpec.volumeClaimTemplates }}
490+
{{- range .pdSpec.volumeClaimTemplates }}
491+
{{- if and .metadata (eq .metadata.name "model-storage") }}
492+
{{- $hasModelStorageClaim = true }}
493+
{{- end }}
494+
{{- end }}
495+
{{- end }}
496+
{{- if and $hasModelVolume (not $hasModelStorageClaim) }}
454497
{{ include "llm-d-modelservice.mountModelVolumeVolumes" .Values.modelArtifacts | nindent 4}}
455498
{{- end -}}
456499
{{- /* Add resourceClaims for DRA (new and old API) */}}

charts/llm-d-modelservice/templates/decode-deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{- if and (not .Values.requester.enable) .Values.decode.create (not .Values.multinode) }}
1+
{{- if and .Values.decode.create (eq (include "llm-d-modelservice.decodeWorkloadKind" .) "Deployment") }}
22
apiVersion: apps/v1
33
kind: Deployment
44
metadata:
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{{- if and .Values.decode.create (eq (include "llm-d-modelservice.decodeWorkloadKind" .) "StatefulSet") }}
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: {{ include "llm-d-modelservice.decodeName" . }}-headless
6+
labels:
7+
{{- include "llm-d-modelservice.labels" . | nindent 4 }}
8+
llm-d.ai/role: decode
9+
spec:
10+
clusterIP: None
11+
selector:
12+
{{- include "llm-d-modelservice.decodelabels" . | nindent 4 }}
13+
ports:
14+
- name: http
15+
port: {{ .Values.routing.servicePort }}
16+
protocol: TCP
17+
{{- end }}

charts/llm-d-modelservice/templates/decode-lws.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{- if and .Values.decode.create .Values.multinode }}
1+
{{- if and .Values.decode.create (eq (include "llm-d-modelservice.decodeWorkloadKind" .) "LeaderWorkerSet") }}
22
apiVersion: leaderworkerset.x-k8s.io/v1
33
kind: LeaderWorkerSet
44
metadata:

charts/llm-d-modelservice/templates/decode-requester-replicaset.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{- if and .Values.requester.enable (and .Values.decode.create (not .Values.multinode)) }}
1+
{{- if and .Values.decode.create (eq (include "llm-d-modelservice.decodeWorkloadKind" .) "ReplicaSet") }}
22
apiVersion: apps/v1
33
kind: ReplicaSet
44
metadata:
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
{{- if and .Values.decode.create (eq (include "llm-d-modelservice.decodeWorkloadKind" .) "StatefulSet") }}
2+
apiVersion: apps/v1
3+
kind: StatefulSet
4+
metadata:
5+
name: {{ include "llm-d-modelservice.decodeName" . }}
6+
labels:
7+
{{- include "llm-d-modelservice.labels" . | nindent 4 }}
8+
{{- $warning := "" }}
9+
{{- if .Values.decode.containers }}
10+
{{- $firstContainer := index .Values.decode.containers 0 }}
11+
{{- $warning = include "llm-d-modelservice.acceleratorWarning" (dict "parallelism" .Values.decode.parallelism "resources" $firstContainer.resources "Values" .Values "container" $firstContainer) }}
12+
{{- end }}
13+
{{- if or .Values.decode.annotations $warning }}
14+
annotations:
15+
{{- if .Values.decode.annotations }}
16+
{{- toYaml .Values.decode.annotations | nindent 4 }}
17+
{{- end }}
18+
{{- if $warning }}
19+
llm-d.ai/accelerator-warning: {{ $warning | quote }}
20+
{{- end }}
21+
{{- end }}
22+
spec:
23+
replicas: {{ ternary .Values.decode.replicas 1 (hasKey .Values.decode "replicas") }}
24+
serviceName: {{ include "llm-d-modelservice.decodeName" . }}-headless
25+
{{- if .Values.decode.updateStrategy }}
26+
updateStrategy:
27+
{{- toYaml .Values.decode.updateStrategy | nindent 4 }}
28+
{{- else if .Values.decode.strategy }}
29+
{{- /* Fall back to strategy for backward compat (may contain Deployment-only fields like maxSurge) */}}
30+
updateStrategy:
31+
{{- toYaml .Values.decode.strategy | nindent 4 }}
32+
{{- end }}
33+
podManagementPolicy: {{ .Values.decode.podManagementPolicy | default "Parallel" }}
34+
{{- if .Values.decode.revisionHistoryLimit }}
35+
revisionHistoryLimit: {{ .Values.decode.revisionHistoryLimit }}
36+
{{- end }}
37+
{{- if .Values.decode.minReadySeconds }}
38+
minReadySeconds: {{ .Values.decode.minReadySeconds }}
39+
{{- end }}
40+
{{- if .Values.decode.volumeClaimTemplates }}
41+
volumeClaimTemplates:
42+
{{- toYaml .Values.decode.volumeClaimTemplates | nindent 4 }}
43+
{{- end }}
44+
selector:
45+
matchLabels:
46+
{{- include "llm-d-modelservice.decodelabels" . | nindent 6 }}
47+
template:
48+
metadata:
49+
labels:
50+
{{- include "llm-d-modelservice.decodelabels" . | nindent 8 }}
51+
{{- if .Values.decode.podAnnotations }}
52+
annotations:
53+
{{- toYaml .Values.decode.podAnnotations | nindent 8 }}
54+
{{- end }}
55+
spec:
56+
{{- if .Values.decode.nodeSelector }}
57+
nodeSelector:
58+
{{- toYaml .Values.decode.nodeSelector | nindent 8 }}
59+
{{- end }}
60+
{{- if or (.Values.decode.initContainers) (eq .Values.routing.proxy.enabled true) }}
61+
initContainers:
62+
{{- (include "llm-d-modelservice.routingProxy" (dict "proxy" .Values.routing.proxy "servicePort" .Values.routing.servicePort "Values" .Values)) | nindent 8 }}
63+
{{- if .Values.decode.initContainers }}
64+
{{- toYaml .Values.decode.initContainers | nindent 8 }}
65+
{{- end }}
66+
{{- end }}
67+
{{- if hasKey .Values.decode "enableServiceLinks" }}
68+
enableServiceLinks: {{ .Values.decode.enableServiceLinks }}
69+
{{- end }}
70+
{{- if hasKey .Values.decode "terminationGracePeriodSeconds" }}
71+
terminationGracePeriodSeconds: {{ .Values.decode.terminationGracePeriodSeconds }}
72+
{{- end }}
73+
{{- (include "llm-d-modelservice.modelPod" (dict "role" "decode" "pdSpec" .Values.decode "Values" .Values "Release" .Release "Chart" .Chart)) | nindent 4 }}
74+
{{- with .Values.decode.containers }}
75+
containers:
76+
{{- range . }}
77+
{{- (include "llm-d-modelservice.container" (dict "role" "decode" "container" . "parallelism" $.Values.decode.parallelism "Values" $.Values "Release" $.Release "Chart" $.Chart "pdSpec" $.Values.decode)) | nindent 8 }}
78+
{{- end }}
79+
{{- end }}
80+
{{- if .Values.decode.tolerations }}
81+
tolerations:
82+
{{- toYaml .Values.decode.tolerations | nindent 8 }}
83+
{{- end }}
84+
{{- end }}

charts/llm-d-modelservice/templates/prefill-deployment.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{- if and .Values.prefill.create (not .Values.multinode) }}
1+
{{- if and .Values.prefill.create (eq (include "llm-d-modelservice.prefillWorkloadKind" .) "Deployment") }}
22
apiVersion: apps/v1
33
kind: Deployment
44
metadata:
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{{- if and .Values.prefill.create (eq (include "llm-d-modelservice.prefillWorkloadKind" .) "StatefulSet") }}
2+
apiVersion: v1
3+
kind: Service
4+
metadata:
5+
name: {{ include "llm-d-modelservice.prefillName" . }}-headless
6+
labels:
7+
{{- include "llm-d-modelservice.labels" . | nindent 4 }}
8+
llm-d.ai/role: prefill
9+
spec:
10+
clusterIP: None
11+
selector:
12+
{{- include "llm-d-modelservice.prefilllabels" . | nindent 4 }}
13+
ports:
14+
- name: http
15+
port: {{ .Values.routing.servicePort }}
16+
protocol: TCP
17+
{{- end }}

charts/llm-d-modelservice/templates/prefill-lws.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{- if and .Values.prefill.create .Values.multinode }}
1+
{{- if and .Values.prefill.create (eq (include "llm-d-modelservice.prefillWorkloadKind" .) "LeaderWorkerSet") }}
22
apiVersion: leaderworkerset.x-k8s.io/v1
33
kind: LeaderWorkerSet
44
metadata:
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
{{- if and .Values.prefill.create (eq (include "llm-d-modelservice.prefillWorkloadKind" .) "StatefulSet") }}
2+
apiVersion: apps/v1
3+
kind: StatefulSet
4+
metadata:
5+
name: {{ include "llm-d-modelservice.prefillName" . }}
6+
labels:
7+
{{- include "llm-d-modelservice.labels" . | nindent 4 }}
8+
{{- $warning := "" }}
9+
{{- if .Values.prefill.containers }}
10+
{{- $firstContainer := index .Values.prefill.containers 0 }}
11+
{{- $warning = include "llm-d-modelservice.acceleratorWarning" (dict "parallelism" .Values.prefill.parallelism "resources" $firstContainer.resources "Values" .Values "container" $firstContainer) }}
12+
{{- end }}
13+
{{- if or .Values.prefill.annotations $warning }}
14+
annotations:
15+
{{- if .Values.prefill.annotations }}
16+
{{- toYaml .Values.prefill.annotations | nindent 4 }}
17+
{{- end }}
18+
{{- if $warning }}
19+
llm-d.ai/accelerator-warning: {{ $warning | quote }}
20+
{{- end }}
21+
{{- end }}
22+
spec:
23+
replicas: {{ ternary .Values.prefill.replicas 1 (hasKey .Values.prefill "replicas") }}
24+
serviceName: {{ include "llm-d-modelservice.prefillName" . }}-headless
25+
{{- if .Values.prefill.updateStrategy }}
26+
updateStrategy:
27+
{{- toYaml .Values.prefill.updateStrategy | nindent 4 }}
28+
{{- else if .Values.prefill.strategy }}
29+
{{- /* Fall back to strategy for backward compat (may contain Deployment-only fields like maxSurge) */}}
30+
updateStrategy:
31+
{{- toYaml .Values.prefill.strategy | nindent 4 }}
32+
{{- end }}
33+
podManagementPolicy: {{ .Values.prefill.podManagementPolicy | default "Parallel" }}
34+
{{- if .Values.prefill.revisionHistoryLimit }}
35+
revisionHistoryLimit: {{ .Values.prefill.revisionHistoryLimit }}
36+
{{- end }}
37+
{{- if .Values.prefill.minReadySeconds }}
38+
minReadySeconds: {{ .Values.prefill.minReadySeconds }}
39+
{{- end }}
40+
{{- if .Values.prefill.volumeClaimTemplates }}
41+
volumeClaimTemplates:
42+
{{- toYaml .Values.prefill.volumeClaimTemplates | nindent 4 }}
43+
{{- end }}
44+
selector:
45+
matchLabels:
46+
{{- include "llm-d-modelservice.prefilllabels" . | nindent 6 }}
47+
template:
48+
metadata:
49+
labels:
50+
{{- include "llm-d-modelservice.prefilllabels" . | nindent 8 }}
51+
{{- if .Values.prefill.podAnnotations }}
52+
annotations:
53+
{{- toYaml .Values.prefill.podAnnotations | nindent 8 }}
54+
{{- end }}
55+
spec:
56+
{{- if .Values.prefill.initContainers }}
57+
initContainers:
58+
{{- toYaml .Values.prefill.initContainers | nindent 8 }}
59+
{{- end }}
60+
{{- if hasKey .Values.prefill "enableServiceLinks" }}
61+
enableServiceLinks: {{ .Values.prefill.enableServiceLinks }}
62+
{{- end }}
63+
{{- if hasKey .Values.prefill "terminationGracePeriodSeconds" }}
64+
terminationGracePeriodSeconds: {{ .Values.prefill.terminationGracePeriodSeconds }}
65+
{{- end }}
66+
{{- (include "llm-d-modelservice.modelPod" (dict "role" "prefill" "pdSpec" .Values.prefill "Values" .Values "Release" .Release "Chart" .Chart)) | nindent 4 }}
67+
{{- if .Values.prefill.nodeSelector }}
68+
nodeSelector:
69+
{{- toYaml .Values.prefill.nodeSelector | nindent 8 }}
70+
{{- end }}
71+
{{- with .Values.prefill.containers }}
72+
containers:
73+
{{- range . }}
74+
{{- (include "llm-d-modelservice.container" (dict "role" "prefill" "container" . "parallelism" $.Values.prefill.parallelism "Values" $.Values "Release" $.Release "Chart" $.Chart "pdSpec" $.Values.prefill)) | nindent 8 }}
75+
{{- end }}
76+
{{- end }}
77+
{{- if .Values.prefill.tolerations }}
78+
tolerations:
79+
{{- toYaml .Values.prefill.tolerations | nindent 8 }}
80+
{{- end }}
81+
{{- end }}

0 commit comments

Comments
 (0)