-
Notifications
You must be signed in to change notification settings - Fork 4
/
machinelearning.seldon_v1alpha1_seldondeploy.yaml
255 lines (219 loc) · 8.8 KB
/
machinelearning.seldon_v1alpha1_seldondeploy.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
apiVersion: machinelearning.seldon.io/v1alpha1
kind: SeldonDeploy
metadata:
name: seldondeploy-sample
spec:
# Default values copied from <project_dir>/helm-charts/seldon-deploy/values-redhat.yaml
replicaCount: 1
#in RH marketplace images will come from RH hosting through an override in CSV - default to dockerhub ubi images
image:
image: seldonio/seldon-deploy-server-ubi:1.2.1
pullPolicy: Always
#uncomment below to use imagePullSecrets e.g. to avoid docker rate-limiting
#imagePullSecrets:
# - name: regcred
loadtest:
image: seldonio/hey-loadtester-ubi:0.1
alibidetect:
image: seldonio/alibi-detect-server:1.8.0
nameOverride: ""
fullnameOverride: ""
service:
type: ClusterIP
port: 80
# Default user id to add to all Pod Security Context as the default
# Use this to ensure all container run as non-root by default
# For openshift leave blank as usually this will be injected automatically on an openshift cluster
# to all pods.
defaultUserID: ""
# boolean to enable app-level auth (defaults to "false")
enableAppAuth: false
# boolean to enable app-analytics (defaults to "true")
enableAppAnalytics: false
env:
USERID_CLAIM_KEY: "name" # claim to be used as userid (defaults to "preferred_username")
# if using app level auth then set below env vars
# OIDC_PROVIDER oidc providerURL
# CLIENT_ID oidc client ID
# CLIENT_SECRET oidc client secret
# REDIRECT_URL `${oidc_redirect_url}/seldon-deploy/auth/callback`
# OIDC_SCOPES oidc scopes (defaults to "profile email groups")
# RESOURCE_URI resourceURI
# if enableAppAnalytics enabled use token
# APP_ANALYTICS_TOKEN: ""
docker:
user: "unknown"
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
hosts:
- host: chart-example.local
paths: []
tls: []
# - secretName: chart-example-tls
# hosts:
# - chart-example.local
resources:
limits:
cpu: 800m
memory: 800Mi
requests:
cpu: 100m
memory: 200Mi
serviceAccount:
create: true
gitops:
git:
secret: "git-creds"
#user, token and email can be blank if secret is provided
user: ""
email: ""
token: ""
skipVerifyGit: true
webhook:
service:
create: true
loadBalancerSourceRanges: {}
fileFormat: "json"
argocd:
enabled: false
namespace: argocd
batchjobs:
serviceAccount: "workflow"
processor:
image: seldonio/seldon-core-s2i-python37:1.9.0-dev
mc:
image: seldonio/mc-ubi:1.0
pvc:
defaultSize: 1Gi
kfserving:
protocol: "http"
enabled: false
#Below are templates that can be changed to adjust how requests are made and what curl option is shown to user.
#Change ip to hostname on AWS. Or put real cluster IP after install.
curlForm: |
MODEL_NAME={{ .ModelName }}<br>
CLUSTER_IP=$(oc get route -n {{ .IngressNamespace }} {{ .IngressServiceName }} -o jsonpath='{.spec.host}')<br>
SERVICE_HOSTNAME=$(kubectl get inferenceservice {{ .ModelName }} -o jsonpath='{.status.url}' | cut -d "/" -f 3)<br>
curl -v -H "Host: ${SERVICE_HOSTNAME}" {{ .KfServingProtocol }}://$CLUSTER_IP/v1/models/$MODEL_NAME:predict -d '{{ .Payload }}'
#Form for cluster-internal calls.
requestForm: "{{ .KfServingProtocol }}://{{ .IngressServiceName }}/v1/models/{{ .ModelName }}:predict"
explainForm: "{{ .KfServingProtocol }}://{{ .IngressServiceName }}/v1/models/{{ .ModelName }}:explain"
seldon:
protocol: "http"
enabled: true
#Below are templates that can be changed to adjust how requests are made and what curl option is shown to user.
#Change ip to hostname on AWS. Or put real cluster IP after install. Shown to user for calls outside cluster.
curlForm: |
CLUSTER_IP=$(oc get route -n {{ .IngressNamespace }} {{ .IngressServiceName }} -o jsonpath='{.spec.host}')<br>
curl -k -H "Content-Type: application/json" {{ .SeldonProtocol }}://$CLUSTER_IP/seldon/{{ .Namespace }}/{{ .ModelName }}/api/v0.1/predictions -d '{{ .Payload }}'
tensorFlowCurlForm: |
CLUSTER_IP=$(oc get route -n {{ .IngressNamespace }} {{ .IngressServiceName }} -o jsonpath='{.spec.host}')<br>
curl -k -H "Content-Type: application/json" {{ .SeldonProtocol }}://$CLUSTER_IP/seldon/{{ .Namespace }}/{{ .ModelName }}/v1/models/:predict -d '{{ .Payload }}'
kfservingV2CurlForm: |
CLUSTER_IP=$(oc get route -n {{ .IngressNamespace }} {{ .IngressServiceName }} -o jsonpath='{.spec.host}')<br>
curl -k -H "Content-Type: application/json" {{ .SeldonProtocol }}://$CLUSTER_IP/seldon/{{ .Namespace }}/{{ .ModelName }}/v2/models/{{ .GraphModelName }}/infer -d '{{ .Payload }}'
#Forms for cluster-internal calls.
#e.g. could be changed to skip ingress by setting to "http://{{ .ModelName }}-{{ .ModelName }}-{{ .Predictor }}.{{ .Namespace }}:8000/api/v0.1/predictions"
seldonRequestForm: "{{ .SeldonProtocol }}://{{ .IngressServiceName }}/seldon/{{ .Namespace }}/{{ .ModelName }}/api/v0.1/predictions"
tensorflowRequestForm: "{{ .SeldonProtocol }}://{{ .IngressServiceName }}/seldon/{{ .Namespace }}/{{ .ModelName }}/v1/models/:predict"
v2RequestForm: "{{ .SeldonProtocol }}://{{ .IngressServiceName }}/seldon/{{ .Namespace }}/{{ .ModelName }}/v2/models/{{ .ModelName }}/infer"
#explainer call for seldon can go straight to predictor rather than ingress as not worried about loadbalancing a canary
explainForm: "http://{{ .ModelName }}-{{ .Predictor }}-explainer.{{ .Namespace }}:9000/v1/models/{{ .ModelName }}:explain"
external:
protocol: "http"
serviceAccountName: seldon-deploy
ingressGateway:
seldonIngressService: "istio-ingressgateway"
kfServingIngressService: "istio-ingressgateway"
ingressNamespace: "istio-system"
virtualService:
create: true
prefix: "/seldon-deploy/"
gateways:
- istio-system/seldon-gateway
rbac:
create: true
clusterWide: true
readNamespaces: true
nodeSelector: {}
tolerations: []
affinity: {}
skipVerifyHttpCalls: true
prometheus:
seldon:
url: "https://thanos-querier.openshift-monitoring.svc:9091/api/v1/"
# if using community operator then above becomes "http://prometheus-operated.seldon:9090/api/v1/"
# resource metrics may come from different prometheus than req metrics - set only if different
resourceMetricsUrl: "https://prometheus-k8s.openshift-monitoring:9091/api/v1/"
# see https://github.com/openshift/cluster-monitoring-operator/issues/768
namespaceMetricName: "namespace"
serviceMetricName: "exported_service"
#leave below empty/commented for prom without token-based auth
#basic auth can be handled by putting user:pass in url.
jwtSecretName: "jwt-seldon"
jwtSecretKey: "jwt-seldon.txt"
knative:
url: "http://prometheus-system-np.knative-monitoring.svc.cluster.local:8080/api/v1/"
elasticsearch:
url: "https://elasticsearch-seldon-es-http.seldon-logs:9200"
#enable below for elastic with user and password
basicAuth: true
secret:
name: "elastic-credentials"
userKey: "username"
passwordKey: "password"
#or instead below for token-based auth
#jwtSecretName: "jwt-seldon"
#jwtSecretKey: "jwt-seldon.txt"
#only create request logger if you've not already installed it outside of helm (or first delete existing install)
#if namespace.create is false then assumes namespace existing with a knative broker (kubectl get broker -n seldon-logs)
requestLogger:
create: true
image: seldonio/seldon-request-logger:1.7.0
#increase logger replicas if there are high traffic volumes
replicas: 1
imagePullPolicy: IfNotPresent
elasticsearch:
host: "elasticsearch-seldon-es-http.seldon-logs"
port: "9200"
protocol: "https"
# jwtSecretName: "jwt-seldon"
# jwtSecretKey: "jwt-seldon.txt"
namespace:
create: false
name: seldon-logs
trigger:
apiVersion: "eventing.knative.dev/v1"
broker: "default"
resources:
limits:
cpu: 600m
memory: 500Mi
requests:
cpu: 100m
memory: 200Mi
openshiftMarketplace:
cleanupClusterServiceVersions: false
kubectlCleanupImage: seldonio/kubectl:1.14.3
seldonCore:
subscription:
create: true
apiVersion: "operators.coreos.com/v1alpha1"
channel: "stable"
metricsPath: "/metrics"
istioEnabled: true
requestLoggerEndpoint: "http://broker-ingress.knative-eventing.svc.cluster.local/seldon-logs/default"
istioGateway:
create: true
name: "seldon-gateway"
namespace: "istio-system"
prometheus:
monitorSpecs:
create: true
metadata:
pg:
enabled: false
secret: "metadata-postgres"