{{- if ne .Release.Namespace "modeldock-lab" }}{{ fail "install in modeldock-lab" }}{{ end }} apiVersion: v1 kind: ServiceAccount metadata: {name: modeldock-controller} --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: {name: modeldock-controller} rules: - apiGroups: [lab.modeldock.dev] resources: [modelservices, modelservices/status, modelservices/finalizers] verbs: [get, list, watch, update, patch] - apiGroups: [apps] resources: [deployments] verbs: [get, list, watch, create, update, patch, delete] - apiGroups: [""] resources: [services] verbs: [get, list, watch, create, update, patch, delete] - apiGroups: [coordination.k8s.io] resources: [leases] verbs: [get, list, watch, create, update, patch] - apiGroups: [""] resources: [events] verbs: [create, patch] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: {name: modeldock-controller} roleRef: {apiGroup: rbac.authorization.k8s.io, kind: Role, name: modeldock-controller} subjects: [{kind: ServiceAccount, name: modeldock-controller}] --- apiVersion: apps/v1 kind: Deployment metadata: {name: modeldock-controller} spec: replicas: 1 selector: {matchLabels: {app: modeldock-controller}} template: metadata: {labels: {app: modeldock-controller}} spec: serviceAccountName: modeldock-controller containers: - name: operator image: {{ .Values.operatorImage }} env: [{name: LEADER_ELECTION, value: "true"}] --- apiVersion: lab.modeldock.dev/v1alpha1 kind: ModelService metadata: {name: chart-demo} spec: {image: {{ .Values.runtimeImage }}, replicas: 1, autoscale: {{ .Values.autoscale }}} {{- if .Values.autoscale }} --- apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: {name: chart-demo} spec: scaleTargetRef: {name: chart-demo} minReplicaCount: 1 maxReplicaCount: {{ .Values.maxReplicas }} cooldownPeriod: 120 advanced: horizontalPodAutoscalerConfig: behavior: scaleDown: stabilizationWindowSeconds: 180 triggers: - type: prometheus metadata: serverAddress: {{ .Values.prometheusURL }} query: sum(modeldock_waiting_requests{service="chart-demo"}) threshold: "2" ignoreNullValues: "false" {{- end }} {{- if .Values.gatewaySecret }} --- apiVersion: v1 kind: ServiceAccount metadata: {name: modeldock-gateway} --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: {name: modeldock-discovery} rules: - apiGroups: [discovery.k8s.io] resources: [endpointslices] verbs: [list] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: {name: modeldock-discovery} roleRef: {apiGroup: rbac.authorization.k8s.io, kind: Role, name: modeldock-discovery} subjects: [{kind: ServiceAccount, name: modeldock-gateway}] --- apiVersion: apps/v1 kind: Deployment metadata: {name: modeldock-gateway} spec: replicas: 1 selector: {matchLabels: {app: modeldock-gateway}} template: metadata: {labels: {app: modeldock-gateway}} spec: serviceAccountName: modeldock-gateway containers: - name: gateway image: {{ .Values.gatewayImage }} envFrom: [{secretRef: {name: {{ .Values.gatewaySecret }}}}] readinessProbe: {httpGet: {path: /ready, port: 8080}} --- apiVersion: v1 kind: Service metadata: {name: modeldock-gateway} spec: {selector: {app: modeldock-gateway}, ports: [{port: 8080, targetPort: 8080}]} {{- end }}