diff --git a/charts/api7/README.md b/charts/api7/README.md index 0cf64e4..f6686b5 100644 --- a/charts/api7/README.md +++ b/charts/api7/README.md @@ -221,6 +221,33 @@ A Helm chart for Kubernetes | dp_manager_service.tlsNodePort | int | `nil` | The nodePort for HTTPS service, only used if dp_manager_service.type is NodePort. If not set, a random port will be assigned by Kubernetes. | | dp_manager_service.tlsPort | int | `7943` | | | dp_manager_service.type | string | `"ClusterIP"` | | +| file_server.enabled | bool | `false` | | +| file_server.extraEnvVars | list | `[]` | | +| file_server.extraVolumeMounts | list | `[]` | | +| file_server.extraVolumes | list | `[]` | | +| file_server.image.pullPolicy | string | `"Always"` | | +| file_server.image.repository | string | `"api7/api7-ee-file-server"` | | +| file_server.image.tag | string | `"v3.9.7"` | | +| file_server.livenessProbe.failureThreshold | int | `3` | | +| file_server.livenessProbe.initialDelaySeconds | int | `10` | | +| file_server.livenessProbe.periodSeconds | int | `3` | | +| file_server.podLabels | object | `{}` | | +| file_server.readinessProbe.failureThreshold | int | `3` | | +| file_server.readinessProbe.initialDelaySeconds | int | `5` | | +| file_server.readinessProbe.periodSeconds | int | `3` | | +| file_server.replicaCount | int | `1` | | +| file_server.topologySpreadConstraints | list | `[]` | Topology Spread Constraints for pod assignment https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ The value is evaluated as a template | +| file_server_configuration.database.dsn | string | `"postgres://api7ee:changeme@api7-postgresql:5432/api7ee"` | | +| file_server_configuration.database.max_idle_time | string | `"30s"` | | +| file_server_configuration.database.max_open_conns | int | `10` | | +| file_server_configuration.database.timeout | string | `"5s"` | | +| file_server_configuration.log.level | string | `"warn"` | | +| file_server_configuration.log.output | string | `"stderr"` | | +| file_server_configuration.server.listen.host | string | `"0.0.0.0"` | | +| file_server_configuration.server.listen.port | int | `8080` | | +| file_server_service.annotations | object | `{}` | | +| file_server_service.port | int | `8080` | | +| file_server_service.type | string | `"ClusterIP"` | | | fullnameOverride | string | `""` | | | global.storageClass | string | `""` | | | imagePullSecret | string | `""` | | diff --git a/charts/api7/templates/file-server-configmap.yaml b/charts/api7/templates/file-server-configmap.yaml new file mode 100644 index 0000000..b94efe4 --- /dev/null +++ b/charts/api7/templates/file-server-configmap.yaml @@ -0,0 +1,10 @@ +{{- if .Values.file_server.enabled }} +kind: ConfigMap +apiVersion: v1 +metadata: + name: {{ include "api7ee3.fullname" . }}-file-server-config + namespace: {{ .Release.Namespace | quote }} +data: + config.yaml: | + {{- toYaml .Values.file_server_configuration | nindent 4 }} +{{- end }} diff --git a/charts/api7/templates/file-server-deploy.yaml b/charts/api7/templates/file-server-deploy.yaml new file mode 100644 index 0000000..bac8fa9 --- /dev/null +++ b/charts/api7/templates/file-server-deploy.yaml @@ -0,0 +1,106 @@ +{{- if .Values.file_server.enabled }} +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "api7ee3.fullname" . }}-file-server + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "api7ee3.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.file_server.replicaCount }} + selector: + matchLabels: + {{- include "api7ee3.selectorLabels" . | nindent 6 }} + app.kubernetes.io/component: file-server + template: + metadata: + annotations: + checksum/config: {{ include (print $.Template.BasePath "/file-server-configmap.yaml") . | sha256sum }} + {{- with .Values.podAnnotations }} + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "api7ee3.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: file-server + {{- if .Values.file_server.podLabels }} + {{- range $key, $value := $.Values.file_server.podLabels }} + {{ $key }}: {{ $value | quote }} + {{- end }} + {{- end }} + spec: + {{- if .Values.imagePullSecret }} + imagePullSecrets: + - name: {{ .Values.imagePullSecret }} + {{- end }} + serviceAccountName: {{ include "api7ee3.serviceAccountName" . }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + volumes: + - name: config + configMap: + name: {{ include "api7ee3.fullname" . }}-file-server-config + {{- if .Values.file_server.extraVolumes }} + {{- include "api7ee3.tplvalues.render" (dict "value" .Values.file_server.extraVolumes "context" $) | nindent 8 }} + {{- end }} + containers: + - name: file-server + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.file_server.image.repository }}:{{ .Values.file_server.image.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.file_server.image.pullPolicy }} + command: + - /usr/local/api7/api7-ee-file-server + - -c + - /api7-ee/config.yaml + ports: + - name: http + containerPort: {{ .Values.file_server_configuration.server.listen.port }} + protocol: TCP + livenessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: {{ .Values.file_server.livenessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.file_server.livenessProbe.periodSeconds }} + failureThreshold: {{ .Values.file_server.livenessProbe.failureThreshold }} + readinessProbe: + httpGet: + path: /healthz + port: http + initialDelaySeconds: {{ .Values.file_server.readinessProbe.initialDelaySeconds }} + periodSeconds: {{ .Values.file_server.readinessProbe.periodSeconds }} + failureThreshold: {{ .Values.file_server.readinessProbe.failureThreshold }} + volumeMounts: + - name: config + mountPath: /api7-ee + {{- if .Values.file_server.extraVolumeMounts }} + {{- include "api7ee3.tplvalues.render" (dict "value" .Values.file_server.extraVolumeMounts "context" $) | nindent 12 }} + {{- end }} + resources: + {{- if .Values.file_server.resources }} + {{- toYaml .Values.file_server.resources | nindent 12 }} + {{- else }} + {{- toYaml .Values.resources | nindent 12 }} + {{- end }} + env: + {{- if .Values.file_server.extraEnvVars }} + {{- include "api7ee3.tplvalues.render" (dict "value" .Values.file_server.extraEnvVars "context" $) | nindent 12 }} + {{- end }} + + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with or .Values.file_server.topologySpreadConstraints .Values.topologySpreadConstraints }} + topologySpreadConstraints: + {{- tpl (. | toYaml) $ | nindent 8 }} + {{- end }} +{{- end }} diff --git a/charts/api7/templates/file-server-service.yaml b/charts/api7/templates/file-server-service.yaml new file mode 100644 index 0000000..ee84bd3 --- /dev/null +++ b/charts/api7/templates/file-server-service.yaml @@ -0,0 +1,23 @@ +{{- if .Values.file_server.enabled }} +apiVersion: v1 +kind: Service +metadata: + name: {{ include "api7ee3.fullname" . }}-file-server + namespace: {{ .Release.Namespace | quote }} + labels: + {{- include "api7ee3.labels" . | nindent 4 }} + {{- with .Values.file_server_service.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + type: {{ .Values.file_server_service.type }} + ports: + - port: {{ .Values.file_server_service.port }} + targetPort: http + protocol: TCP + name: http + selector: + {{- include "api7ee3.selectorLabels" . | nindent 4 }} + app.kubernetes.io/component: file-server +{{- end }} diff --git a/charts/api7/values.yaml b/charts/api7/values.yaml index 8637779..510f263 100644 --- a/charts/api7/values.yaml +++ b/charts/api7/values.yaml @@ -111,6 +111,42 @@ developer_portal: periodSeconds: 3 failureThreshold: 3 +file_server: + enabled: false + replicaCount: 1 + image: + repository: api7/api7-ee-file-server + pullPolicy: Always + tag: "v3.9.7" + # Resources of the deployment. + # It has a higher priority than the common resources configuration: + # when this field is configured, it is used first in the deployment, + # otherwise the common resources configuration is used. + # resources: + # limits: + # cpu: 100m + # memory: 128Mi + # requests: + # cpu: 100m + # memory: 128Mi + + extraEnvVars: [] + extraVolumes: [] + extraVolumeMounts: [] + podLabels: {} + # -- Topology Spread Constraints for pod assignment + # https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/ + # The value is evaluated as a template + topologySpreadConstraints: [] + livenessProbe: + initialDelaySeconds: 10 + periodSeconds: 3 + failureThreshold: 3 + readinessProbe: + initialDelaySeconds: 5 + periodSeconds: 3 + failureThreshold: 3 + imagePullSecret: "" nameOverride: "" fullnameOverride: "" @@ -223,6 +259,11 @@ developer_portal_service: # hosts: # - developer-portal.local +file_server_service: + type: ClusterIP + annotations: {} + port: 8080 + resources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little @@ -515,3 +556,17 @@ developer_portal_configuration: max_open_conns: 30 max_idle_time: 30s timeout: 5s + +file_server_configuration: + server: + listen: + host: "0.0.0.0" + port: 8080 + log: + level: warn + output: stderr + database: + dsn: "postgres://api7ee:changeme@api7-postgresql:5432/api7ee" + max_open_conns: 10 + max_idle_time: 30s + timeout: 5s