Skip to content

Commit

Permalink
WAPI-23578 Styles API
Browse files Browse the repository at this point in the history
  • Loading branch information
pavelgopanenko authored and Gopanenko Pavel committed Aug 16, 2024
1 parent 0bb2be5 commit dd207ec
Show file tree
Hide file tree
Showing 18 changed files with 981 additions and 2 deletions.
12 changes: 12 additions & 0 deletions charts/styles-api/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
apiVersion: v2
name: styles-api
type: application
description: A Helm chart for Kubernetes to deploy API Styles service

version: 1.26.0
appVersion: 1.0.0

maintainers:
- name: 2gis
url: https://github.com/2gis
email: [email protected]
147 changes: 147 additions & 0 deletions charts/styles-api/README.md

Large diffs are not rendered by default.

10 changes: 10 additions & 0 deletions charts/styles-api/templates/NOTES.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
Twins API service is released as "{{ .Release.Name }}" at "{{ .Release.Namespace }}" namespace.

{{ if .Values.api.ingress.enabled }}
You can check service using curl
{{- range $host := .Values.api.ingress.hosts }}
http{{ if $.Values.api.ingress.tls }}s{{ end }}://{{ $host.host }}/healthcheck
{{- end }}
{{- else }}
You can publish api service in your preferred way (ingress, balancer, etc).
{{ end }}
198 changes: 198 additions & 0 deletions charts/styles-api/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
{{- define "styles.name" -}}
{{- .Release.Name | trunc 32 | trimSuffix "-" }}
{{- end }}

{{- define "styles.api.name" -}}
{{ include "styles.name" . }}
{{- end }}

{{- define "styles.worker.name" -}}
{{ include "styles.name" . }}-worker
{{- end }}

{{- define "styles.migrate.name" -}}
{{ include "styles.name" . }}-migrate
{{- end }}

{{- define "styles.secret.deploys.name" -}}
{{ include "styles.name" . }}-secret-deploys
{{- end }}

{{- define "styles.secret.jobs.name" -}}
{{ include "styles.name" . }}-secret-jobs
{{- end }}

{{- define "styles.selectorLabels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{- define "styles.labels" -}}
{{ include "styles.selectorLabels" . }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}

{{- define "styles.api.selectorLabels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end }}

{{- define "styles.api.labels" -}}
{{ include "styles.api.selectorLabels" . }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}

{{- define "styles.worker.labels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}-worker
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}

{{- define "styles.migrate.labels" -}}
app.kubernetes.io/name: {{ .Chart.Name }}-migrate
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
{{- end }}

{{- define "styles.env.loglevel" -}}
- name: MGS_LOG_LEVEL
value: "{{ .Values.log.level }}"
{{- end }}

{{- define "styles.env.db" -}}
- name: MGS_DB_HOST
value: "{{ required "A valid .Values.postgres.host required" .Values.postgres.host }}"
- name: MGS_DB_PORT
value: "{{ .Values.postgres.port }}"
- name: MGS_DB_NAME
value: "{{ required "A valid .Values.postgres.name required" .Values.postgres.name }}"
- name: MGS_DB_SCHEMA
value: "{{ .Values.postgres.schema }}"
- name: MGS_DB_CONNECTION_TIMEOUT
value: "{{ .Values.postgres.timeout }}"
- name: MGS_DB_CONNECTION_RETRY
value: "{{ .Values.postgres.retry }}"
- name: MGS_DB_USERNAME
value: "{{ required "A valid .Values.postgres.ro.username required" .Values.postgres.username }}"
{{- end}}

{{- define "styles.env.db.deploys" -}}
{{ include "styles.env.db" . }}
- name: MGS_DB_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "styles.secret.deploys.name" . }}
key: dbPassword
{{- end }}

{{- define "styles.env.s3" -}}
- name: MGS_S3_ENDPOINT
value: "{{ required "A valid .Values.s3.endpoint required" .Values.s3.endpoint }}"
- name: MGS_S3_BUCKET
value: "{{ .Values.s3.bucket }}"
- name: MGS_S3_PUBLIC_DOMAIN
value: "{{ .Values.s3.publicDomain }}"
- name: MGS_S3_CONNECT_TIMEOUT
value: "{{ .Values.s3.connectTimeout }}"
- name: MGS_S3_REQUEST_TIMEOUT
value: "{{ .Values.s3.requestTimeout }}"
- name: MGS_S3_RESPONSE_TIMEOUT
value: "{{ .Values.s3.responseTimeout }}"
{{- end}}

{{- define "styles.env.s3.deploys" -}}
{{ include "styles.env.s3" . }}
- name: MGS_S3_ACCESS_KEY
valueFrom:
secretKeyRef:
name: {{ include "styles.secret.deploys.name" . }}
key: s3AccessKey
- name: MGS_S3_SECRET_KEY
valueFrom:
secretKeyRef:
name: {{ include "styles.secret.deploys.name" . }}
key: s3SecretKey
{{- end }}

{{- define "styles.env.api" -}}
{{ include "styles.env.loglevel" . }}
{{ include "styles.env.db.deploys" . }}
{{ include "styles.env.s3.deploys" . }}
{{- end }}

{{- define "styles.env.worker" -}}
{{ include "styles.env.loglevel" . }}
{{ include "styles.env.db.deploys" . }}
{{ include "styles.env.s3.deploys" . }}
{{- end }}

{{- define "styles.env.migrate" -}}
{{ include "styles.env.loglevel" . }}
{{ include "styles.env.db.deploys" . }}
{{- end }}

{{/*
Return the target Kubernetes version
*/}}
{{- define "capabilities.kubeVersion" -}}
{{- if .Values.global }}
{{- if .Values.global.kubeVersion }}
{{- .Values.global.kubeVersion -}}
{{- else }}
{{- default .Capabilities.KubeVersion.Version .Values.kubeVersion -}}
{{- end -}}
{{- else }}
{{- default .Capabilities.KubeVersion.Version .Values.kubeVersion -}}
{{- end -}}
{{- end -}}

{{/*
Return the appropriate apiVersion for Horizontal Pod Autoscaler.
*/}}
{{- define "capabilities.hpa.apiVersion" -}}
{{- if semverCompare "<1.23-0" (include "capabilities.kubeVersion" .) -}}
{{- if .beta2 -}}
{{- print "autoscaling/v2beta2" -}}
{{- else -}}
{{- print "autoscaling/v2beta1" -}}
{{- end -}}
{{- else -}}
{{- print "autoscaling/v2" -}}
{{- end -}}
{{- end -}}

{{- define "styles.env.custom.ca.path" -}}
- name: SSL_CERT_DIR
value: {{ include "styles.custom.ca.mountPath" . }}
{{- end }}

{{- define "styles.custom.ca.mountPath" -}}
{{ .Values.customCAs.certsPath | default "/usr/local/share/ca-certificates" }}
{{- end -}}

{{- define "styles.custom.ca.volumeMounts" -}}
- name: custom-ca
mountPath: {{ include "styles.custom.ca.mountPath" . }}/custom-ca.crt
subPath: custom-ca.crt
readOnly: true
{{- end -}}

{{- define "styles.custom.ca.jobs.volumes" -}}
- name: custom-ca
configMap:
name: {{ include "styles.configmap.jobs.name" . }}
{{- end -}}

{{- define "styles.custom.ca.deploys.volumes" -}}
- name: custom-ca
configMap:
name: {{ include "styles.configmap.deploys.name" . }}
{{- end -}}

{{- define "styles.configmap.jobs.name" -}}
{{ include "styles.name" . }}-configmap-jobs
{{- end -}}

{{- define "styles.configmap.deploys.name" -}}
{{ include "styles.name" . }}-configmap-deploys
{{- end -}}
81 changes: 81 additions & 0 deletions charts/styles-api/templates/api/deployment.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "styles.api.name" . }}
{{- if or .Values.api.annotations .Values.customCAs.bundle }}
annotations:
{{- if .Values.customCAs.bundle }}
checksum/config: {{ include (print .Template.BasePath "/configmap-deploys.yaml") . | sha256sum }}
{{- end }}
{{- with .Values.api.annotations }}
{{- toYaml . | nindent 4 }}
{{- end }}
{{- end }}
labels:
{{- include "styles.api.labels" . | nindent 4 }}
{{- with .Values.api.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
{{- if not .Values.api.hpa.enabled }}
replicas: {{ .Values.api.replicas }}
{{- end }}
revisionHistoryLimit: {{ .Values.api.revisionHistoryLimit }}
strategy:
{{- toYaml .Values.api.strategy | nindent 4 }}
selector:
matchLabels:
{{- include "styles.api.selectorLabels" . | nindent 6 }}
template:
metadata:
annotations:
checksum/config: {{ (include (print $.Template.BasePath "/secret-deploys.yaml") . | fromYaml).data | toYaml | sha256sum }}
{{- with .Values.api.podAnnotations }}
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "styles.api.labels" . | nindent 8 }}
{{- with .Values.api.podLabels }}
{{- toYaml . | nindent 8 }}
{{- end }}
spec:
containers:
- name: api
image: {{ required "A valid .Values.dgctlDockerRegistry entry required" .Values.dgctlDockerRegistry }}/{{ .Values.image.repository }}:{{ .Values.image.tag }}
imagePullPolicy: {{ .Values.imagePullPolicy }}
command: [ "mgs", "server" ]
ports:
- name: http
containerPort: 8080
readinessProbe:
httpGet:
path: /healthcheck
port: http
resources:
{{- toYaml .Values.api.resources | nindent 12 }}
env:
{{- include "styles.env.api" . | nindent 12 }}
{{- if .Values.customCAs.bundle }}
volumeMounts:
{{- include "styles.custom.ca.volumeMounts" . | nindent 12 }}
{{- end }}
{{- if .Values.customCAs.bundle }}
volumes:
{{- include "styles.custom.ca.deploys.volumes" . | nindent 8 }}
{{- end }}
{{- with .Values.api.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.api.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
39 changes: 39 additions & 0 deletions charts/styles-api/templates/api/hpa.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{{- with .Values.api.hpa }}
{{- if .enabled }}
apiVersion: {{ include "capabilities.hpa.apiVersion" $ }}
kind: HorizontalPodAutoscaler
metadata:
name: {{ include "styles.api.name" $ }}
labels:
{{- include "styles.api.labels" $ | nindent 4 }}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{ include "styles.api.name" $ }}
minReplicas: {{ .minReplicas }}
maxReplicas: {{ .maxReplicas }}
behavior:
scaleUp:
stabilizationWindowSeconds: {{ .scaleUpStabilizationWindowSeconds }}
scaleDown:
stabilizationWindowSeconds: {{ .scaleDownStabilizationWindowSeconds }}
metrics:
{{- with .targetCPUUtilizationPercentage }}
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: {{ . }}
{{- end }}
{{- with .targetMemoryUtilizationPercentage }}
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: {{ . }}
{{- end }}
{{- end }}
{{- end }}
39 changes: 39 additions & 0 deletions charts/styles-api/templates/api/ingress.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
{{- if .Values.api.ingress.enabled -}}
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: {{ include "styles.api.name" . }}
labels:
{{- include "styles.api.labels" . | nindent 4 }}
{{- with .Values.api.ingress.annotations }}
annotations:
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
ingressClassName: {{ .Values.api.ingress.className }}
{{- if .Values.api.ingress.tls }}
tls:
{{- range .Values.api.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.api.ingress.hosts }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ .path }}
pathType: Prefix
backend:
service:
name: {{ include "styles.api.name" $ }}
port:
number: {{ $.Values.api.service.port }}
{{- end }}
{{- end }}
{{- end }}
Loading

0 comments on commit dd207ec

Please sign in to comment.