improwised-charts/charts/polymorphic-app/templates/service.yaml

248 lines
8.8 KiB
YAML

{{- range .Values.services }}
---
apiVersion: {{ include "deployment.apiVersion" $ }}
kind: Deployment
metadata:
name: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
labels:
{{- include "polymorphic-app.labels" $ | nindent 4 }}
app.kubernetes.io/component: {{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc
{{- with .annotations | default $.Values.serviceTemplate.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 50%
maxSurge: 100%
replicas: {{ .minReplicaCount | default $.Values.serviceTemplate.minReplicaCount }}
selector:
matchLabels:
{{- include "polymorphic-app.selectorLabels" $ | nindent 6 }}
app.kubernetes.io/component: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
template:
metadata:
labels:
{{- include "polymorphic-app.labels" $ | nindent 8 }}
app.kubernetes.io/component: {{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc
spec:
{{- if $.Values.serviceTemplate.imagePullSecrets }}
imagePullSecrets:
{{ toYaml .imagePullSecrets | indent 8 }}
{{- else if .imagePullSecrets }}
imagePullSecrets:
{{ toYaml .imagePullSecrets | indent 8 }}
{{- else }}
{{- if $.Values.imagePullSecrets }}
imagePullSecrets:
{{ toYaml $.Values.imagePullSecrets | indent 8 }}
{{- end }}
{{- end }}
terminationGracePeriodSeconds: {{ .terminationGracePeriodSeconds | default $.Values.serviceTemplate.terminationGracePeriodSeconds }}
containers:
- name: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}"
{{- if .image }}
image: "{{ .image.repository }}:{{ .image.tag }}"
{{- else }}
image: "{{ $.Values.image.repository }}:{{ $.Values.image.tag }}"
{{- end }}
imagePullPolicy: {{ $.Values.image.pullPolicy }}
env:
{{- if .env }}
{{ toYaml .env | indent 12 }}
{{- end }}
{{- if $.Values.env }}
{{ toYaml $.Values.env | indent 12 }}
{{- end }}
{{- if $.Values.serviceTemplate.env }}
{{ toYaml $.Values.serviceTemplate.env | indent 12 }}
{{- end }}
envFrom:
{{- if .envFrom }}
{{ toYaml .envFrom | indent 12 }}
{{- end }}
{{- if $.Values.envFrom }}
{{ toYaml $.Values.envFrom | indent 12 }}
{{- end }}
{{- if $.Values.serviceTemplate.envFrom }}
{{ toYaml $.Values.serviceTemplate.envFrom | indent 12 }}
{{- end }}
{{- if .command }}
{{- with .command | default $.Values.serviceTemplate.command }}
command:
{{ toYaml . | indent 12 }}
{{- end }}
{{- end }}
{{- if .args }}
{{- with .args | default $.Values.serviceTemplate.args }}
args:
{{ toYaml . | indent 12 }}
{{- end }}
{{- end }}
{{- with .ports | default $.Values.serviceTemplate.ports }}
ports:
{{ toYaml . | indent 12 }}
{{- end }}
{{- with .resources | default $.Values.serviceTemplate.resources }}
resources:
{{ toYaml . | indent 12 }}
{{- end }}
volumeMounts:
{{- if .volumeMounts }}
{{ toYaml .volumeMounts | indent 10 }}
{{- end }}
{{- if $.Values.volumeMounts }}
{{ toYaml $.Values.volumeMounts | indent 10 }}
{{- end }}
{{- if $.Values.serviceTemplate.volumeMounts }}
{{ toYaml $.Values.serviceTemplate.volumeMounts | indent 10 }}
{{- end }}
lifecycle:
preStop:
exec:
command: ["bash","-c","sleep 120"]
{{- if or ($.Values.serviceTemplate.healthcheck.enabled) (.healthcheck.enabled) }}
{{- if and (or (eq .healthcheck.type "httpGet") (eq $.Values.serviceTemplate.healthcheck.type "httpGet")) (or .healthcheck.path $.Values.serviceTemplate.healthcheck.path) }}
livenessProbe:
httpGet:
path: {{ .healthcheck.path | default $.Values.serviceTemplate.healthcheck.path }}
port: http
timeoutSeconds: 7
readinessProbe:
httpGet:
path: {{ .healthcheck.path | default $.Values.serviceTemplate.healthcheck.path }}
port: http
timeoutSeconds: 7
{{- end }}
{{- end }}
volumes:
{{- if .volumes }}
{{ toYaml .volumes | indent 8 }}
{{- end }}
{{- if $.Values.volumes }}
{{ toYaml $.Values.volumes | indent 8 }}
{{- end }}
{{- if $.Values.serviceTemplate.volumes }}
{{ toYaml $.Values.serviceTemplate.volumes | indent 8 }}
{{- end }}
{{- with .nodeSelector | default $.Values.serviceTemplate.nodeSelector }}
nodeSelector:
{{ toYaml . | indent 8 }}
{{- end }}
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
topologyKey: kubernetes.io/hostname
labelSelector:
matchLabels:
{{- include "polymorphic-app.labels" $ | nindent 18 }}
app.kubernetes.io/component: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
{{- with .affinity | default $.Values.serviceTemplate.affinity }}
{{ toYaml . | indent 8 }}
{{- end }}
{{- with .tolerations | default $.Values.serviceTemplate.tolerations }}
tolerations:
{{ toYaml . | indent 8 }}
{{- end }}
{{- if .autoscaling | default $.Values.serviceTemplate.autoscaling }}
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
labels:
{{- include "polymorphic-app.labels" $ | nindent 4 }}
app.kubernetes.io/component: {{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
minReplicas: {{ .minReplicaCount | default $.Values.serviceTemplate.minReplicaCount }}
maxReplicas: {{ .maxReplicaCount | default $.Values.serviceTemplate.maxReplicaCount }}
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
# - type: Resource
# resource:
# name: memory
# target:
# type: AverageValue
# averageValue: 100Mi
{{- end }}
{{- if and .service (.service.enabled | default $.Values.serviceTemplate.service.enabled) }}
---
apiVersion: v1
kind: Service
metadata:
name: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
labels:
{{- include "polymorphic-app.labels" $ | nindent 4 }}
app.kubernetes.io/component: {{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc
{{- with (.service.annotations | default $.Values.serviceTemplate.service.annotations) }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
type: {{ .service.type | default $.Values.serviceTemplate.service.type }}
ports:
{{- with (.service.ports | default $.Values.serviceTemplate.service.ports) }}
{{ toYaml . | nindent 4 }}
{{- end }}
selector:
{{- include "polymorphic-app.selectorLabels" $ | nindent 4 }}
app.kubernetes.io/component: {{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc
{{- end }}
{{- if and .ingress (.ingress.enabled | default $.Values.serviceTemplate.ingress.enabled) }}
---
{{- $fullName := printf "%s-%s-svc" $.Release.Name (.name | default $.Values.serviceTemplate.name) -}}
apiVersion: {{ include "ingress.apiVersion" $ }}
kind: Ingress
metadata:
name: "{{ $.Release.Name }}-{{ .name | default $.Values.serviceTemplate.name }}-svc"
labels:
{{- include "polymorphic-app.labels" $ | nindent 4 }}
{{- with (.ingress.annotations | default $.Values.serviceTemplate.ingress.annotations) }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if gt (len (.ingress.tls | default $.Values.serviceTemplate.ingress.tls)) 0 }}
tls:
{{- range (.ingress.tls | default $.Values.serviceTemplate.ingress.tls) }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range (.ingress.hosts | default $.Values.serviceTemplate.ingress.hosts) }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
pathType: {{ .pathType }}
backend: {{- include "ingress.backend" (dict "serviceName" $fullName "servicePort" .servicePort "context" $) | nindent 14 }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}