diff --git a/foghorn-edge/Chart.yaml b/foghorn-edge/Chart.yaml new file mode 100644 index 00000000..420480ad --- /dev/null +++ b/foghorn-edge/Chart.yaml @@ -0,0 +1,6 @@ +apiVersion: v2 +appVersion: 2.6.0-GA +description: A helm-chart for deploying FogHorn Lightning Edge +name: foghorn-edge +type: application +version: 2.6.0-GA diff --git a/foghorn-edge/README.md b/foghorn-edge/README.md new file mode 100644 index 00000000..6aec874e --- /dev/null +++ b/foghorn-edge/README.md @@ -0,0 +1,60 @@ +# edge-helm-chart + +Helm chart for edge + +## Sample command with no edgeml: +`helm install edge . --set fhm.endpoint=192.168.56.142 --set edgeName=lightning-edge --namespace foghorn --create-namespace` + +## Sample command with ADVANCED3 edgeml: +`helm install edge . --set fhm.endpoint=192.168.56.142 --set edgeName=lightning-edge --set edgeml.type=ADVANCED3 --namespace foghorn --create-namespace` + +## Sample command with ADVANCED3 edgeml and arm32 architecture: +`helm install edge . --set fhm.endpoint=192.168.56.142 --set edgeName=lightning-edge --set edgeml.type=ADVANCED3 --set image.arch=-armv7l --namespace foghorn --create-namespace` + +## Sample command dry run: +`helm install edge . --set fhm.endpoint=192.168.56.142 --set edgeName=lightning-edge --dry-run --namespace foghorn --create-namespace` + +## Sample command to cleanup leftover resources manually +`kubectl delete service,deployment,job,pod,configmap,secret,pvc,pv,rolebinding,clusterrolebinding,role,clusterrole,sa -ledge.foghorn.io/managed-by=edge --namespace foghorn` + +## Sample command to cleanup pv and pvc that are stuck in terminating state +`kubectl patch pvc foghorn -p '{"metadata":{"finalizers":null}} --namespace foghorn` + +## Create Local Persistent Volumes(Not recommended in Production - workaround for test deployments) +Most deployments have default storageclass and provisioner already set like k3s, aks, gke etc. Incase it is not, please request cluster administrator to do so. A default storageclass and dynamic provisioner would make it easier to create and bind persistentvolumes to persistentvolumeclaims automatically. In case, a cluster does not have provisioner, the following yaml snippet can be applied to create perisistentvolumes manually. Add the snippet to a file and apply it using `kubectl apply -f `. + + + --- + apiVersion: v1 + kind: PersistentVolume + metadata: + name: influx-data + namespace: foghorn + labels: + type: local + spec: + storageClassName: manual + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/opt/influx-data" + + --- + apiVersion: v1 + kind: PersistentVolume + metadata: + name: foghorn + namespace: foghorn + labels: + type: local + spec: + storageClassName: manual + capacity: + storage: 10Gi + accessModes: + - ReadWriteOnce + hostPath: + path: "/opt/foghorn-data" + --- diff --git a/foghorn-edge/files/edge_properties.json b/foghorn-edge/files/edge_properties.json new file mode 100644 index 00000000..63235c63 --- /dev/null +++ b/foghorn-edge/files/edge_properties.json @@ -0,0 +1,12 @@ +{ + "edgeProductVersion": "{{ .Values.image.tag }}", + "initiator": "{{ required "FHM endpoint is required" .Values.fhm.endpoint }}/ecm", + "registration": { + "edgeName": "{{ required "Edge name is required" .Values.edgeName }}" + }, + "perpetual": { + "edgeType": "{{ if eq .Values.edgeml.type "NONE"}}CEP{{ else }}STANDARD{{ end }}", + "edgeMLType": "{{ required "EdgeML type is required" .Values.edgeml.type }}", + "containerPlatform": "{{ required "ContainerPlatform type is required" .Values.containerPlatform.type }}" + } +} diff --git a/foghorn-edge/files/em-container-list.txt b/foghorn-edge/files/em-container-list.txt new file mode 100644 index 00000000..8ee1b4db --- /dev/null +++ b/foghorn-edge/files/em-container-list.txt @@ -0,0 +1,15 @@ +message-bus +edgemanager +mqtt-agent +mqtt-client +opc-agent +av-agent +modbus-agent +data-publisher +analytics-engine +logger +influxdb +opcda-agent +{{ if not (eq .Values.edgeml.type "NONE") }} +edgeml +{{ end }} diff --git a/foghorn-edge/files/fh-log-rotate b/foghorn-edge/files/fh-log-rotate new file mode 100644 index 00000000..3f8e0d63 --- /dev/null +++ b/foghorn-edge/files/fh-log-rotate @@ -0,0 +1,14 @@ +/fh_vol/fh/logs/*log +/fh_vol/fh/apps/*/logs/* +/fh_vol/fh/apps/*/log/* +{ + rotate 2 + size 2M + compress + dateext + dateformat -%Y%m%d-%s + notifempty + copytruncate + missingok + su root root +} diff --git a/foghorn-edge/files/logrotate.sh b/foghorn-edge/files/logrotate.sh new file mode 100644 index 00000000..c9932746 --- /dev/null +++ b/foghorn-edge/files/logrotate.sh @@ -0,0 +1,36 @@ +#!/bin/sh + +# this file is largely the default cron shell script for logrotate + +THIS=$(basename $0) +cd $(dirname $0) +HERE=$(pwd) + +# Configurable values +SAVE_CORES=3 +CORE_LOCATION=/fh_vol/fh/logs/cores + +# Clean non existent log file entries from status file +test -e status || touch status +head -1 status > status.clean +sed 's/"//g' status | while read logfile date +do + [ -e "$logfile" ] && echo "\"$logfile\" $date" +done >> status.clean +mv status.clean status + +# logrotate requires go-w; let's force it to be sure it never breaks +chmod 640 fh-log-rotate + +if test -x /usr/sbin/logrotate; then + echo $(date -Iseconds) $THIS: running /usr/bin/logrotate fh-log-rotate + /usr/sbin/logrotate fh-log-rotate -s ./status +else + echo $THIS: ERROR: /usr/bin/logrotate does not exist. +fi + +if test -d /fh_vol/fh/logs/cores; then + echo $(date -Iseconds) $THIS: removing core files from $CORE_LOCATION to not greater than $SAVE_CORES + ls -dA1t $CORE_LOCATION/* | tail -n +$(($SAVE_CORES + 1)) | xargs rm -f +fi + diff --git a/foghorn-edge/files/logrotate_daemon.sh b/foghorn-edge/files/logrotate_daemon.sh new file mode 100644 index 00000000..10007ce9 --- /dev/null +++ b/foghorn-edge/files/logrotate_daemon.sh @@ -0,0 +1,27 @@ +#!/bin/sh + +# assume the following file exists, i.e., when run in a docker image, proper +# mounts exists: +# $LOGROTATE: see variable below + +# docker stops containers with TERM so make sure we respond to it nicely +trap exit TERM + +THIS=$(basename $0) +HERE=$(dirname $0) +cd $HERE + +LOGROTATE=/fh_vol/fh/assets/logrotate/logrotate.sh + +PERIOD_S=$((60*60)) # hourly + +main() { + while [ 1 -eq 1 ]; do + $LOGROTATE + sleep $PERIOD_S & + wait $! + done +} + +main + diff --git a/foghorn-edge/scripts/bootstrap-edgemanager.sh b/foghorn-edge/scripts/bootstrap-edgemanager.sh new file mode 100644 index 00000000..a98acc19 --- /dev/null +++ b/foghorn-edge/scripts/bootstrap-edgemanager.sh @@ -0,0 +1,12 @@ +yes n | cp -i /fh_vol/fh/tmp/certs/license-ca.crt /fh_vol/fh/certs/ca/ +yes n | cp -i /fh_vol/fh/tmp/certs/key.pem /fh_vol/fh/license/edge/ +yes n | cp -i /fh_vol/fh/tmp/certs/cert.pem /fh_vol/fh/license/edge/ +yes n | cp -i /fh_vol/fh/tmp/certs/ca-cert.pem /fh_vol/fh/license/edge/ +yes n | cp -i /fh_vol/fh/tmp/configs/edge_properties.json /fh_vol/fh/configs/ +yes n | cp -i /fh_vol/fh/tmp/configs/em-container-list.txt /fh_vol/fh/configs/ +yes n | cp -i /fh_vol/fh/tmp/logrotate/fh-log-rotate /fh_vol/fh/assets/logrotate/ +yes n | cp -i /fh_vol/fh/tmp/logrotate/logrotate /fh_vol/fh/assets/logrotate/logrotate.sh +yes n | cp -i /fh_vol/fh/tmp/logrotate/logrotate-daemon /fh_vol/fh/assets/logrotate/logrotate_daemon.sh +chmod +x /fh_vol/fh/assets/logrotate/logrotate_daemon.sh +chmod +x /fh_vol/fh/assets/logrotate/logrotate.sh +echo n | cp -iR /fh_vol/fh/tmp/logger/. /fh_vol/fh/configs/logger/ diff --git a/foghorn-edge/scripts/init-folder-structure.sh b/foghorn-edge/scripts/init-folder-structure.sh new file mode 100644 index 00000000..5c39636f --- /dev/null +++ b/foghorn-edge/scripts/init-folder-structure.sh @@ -0,0 +1,15 @@ + +mkdir -p /fh_vol/fh/certs/ca +mkdir -p /fh_vol/fh/tmp/certs +mkdir -p /fh_vol/fh/tmp/configs +mkdir -p /fh_vol/fh/tmp/logger +mkdir -p /fh_vol/fh/tmp/logrotate +mkdir -p /fh_vol/fh/downloads +mkdir -p /fh_vol/fh/configs +mkdir -p /fh_vol/fh/logs +mkdir -p /fh_vol/fh/apps +mkdir -p /fh_vol/fh/license/edge +mkdir -p /fh_vol/fh/license/edge/sol_bundle +mkdir -p /fh_vol/fh_host/downloads +mkdir -p /fh_vol/fh/vel +mkdir -p /fh_vol/fh/assets/logrotate diff --git a/foghorn-edge/templates/NOTES.txt b/foghorn-edge/templates/NOTES.txt new file mode 100644 index 00000000..775ff221 --- /dev/null +++ b/foghorn-edge/templates/NOTES.txt @@ -0,0 +1,3 @@ +Foghorn lightning edge installed successfully! + +You can manage this edge using Foghorn Manager running at https://{{ .Values.fhm.endpoint }} diff --git a/foghorn-edge/templates/_helpers.tpl b/foghorn-edge/templates/_helpers.tpl new file mode 100644 index 00000000..29ff4ef2 --- /dev/null +++ b/foghorn-edge/templates/_helpers.tpl @@ -0,0 +1,63 @@ +{{/* +Expand the name of the chart. +*/}} +{{- define "foghorn-edge.name" -}} +{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Create a default fully qualified app name. +We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). +If release name contains chart name it will be used as a full name. +*/}} +{{- define "foghorn-edge.fullname" -}} +{{- if .Values.fullnameOverride }} +{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- $name := default .Chart.Name .Values.nameOverride }} +{{- if contains $name .Release.Name }} +{{- .Release.Name | trunc 63 | trimSuffix "-" }} +{{- else }} +{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} +{{- end }} +{{- end }} +{{- end }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "foghorn-edge.chart" -}} +{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "foghorn-edge.labels" -}} +helm.sh/chart: {{ include "foghorn-edge.chart" . }} +{{ include "foghorn-edge.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +edge.foghorn.io/managed-by: {{ .Release.Name }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "foghorn-edge.selectorLabels" -}} +app.kubernetes.io/name: {{ include "foghorn-edge.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Create the name of the service account to use +*/}} +{{- define "foghorn-edge.serviceAccountName" -}} +{{- if .Values.serviceAccount.create }} +{{- default (include "foghorn-edge.fullname" .) .Values.serviceAccount.name }} +{{- else }} +{{- default "default" .Values.serviceAccount.name }} +{{- end }} +{{- end }} diff --git a/foghorn-edge/templates/address-secret.yaml b/foghorn-edge/templates/address-secret.yaml new file mode 100644 index 00000000..4a91fa79 --- /dev/null +++ b/foghorn-edge/templates/address-secret.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-14" + name: address-secret-file + namespace: {{ .Release.Namespace }} + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} +type: Opaque +data: + address: {{ uuidv4 | b64enc }} diff --git a/foghorn-edge/templates/analytics-engine-deployment.yaml b/foghorn-edge/templates/analytics-engine-deployment.yaml new file mode 100644 index 00000000..a961547c --- /dev/null +++ b/foghorn-edge/templates/analytics-engine-deployment.yaml @@ -0,0 +1,62 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.analyticsEngine.serviceName }} + name: {{ .Values.analyticsEngine.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.analyticsEngine.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.analyticsEngine.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.analyticsEngine.serviceName }} + edge.foghorn.io/app-name: {{ .Values.analyticsEngine.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: AE_COLLECTOR_LIMIT + value: "{{ .Values.analyticsEngine.collectorLimit }}" + - name: AE_MEMORY_WATERMARK_HIGH + value: "{{ .Values.analyticsEngine.memoryWaterMarkHigh }}" + - name: AE_MEMORY_WATERMARK_LOW + value: "{{ .Values.analyticsEngine.memoryWaterMarkLow }}" + - name: COMPONENT_NAME + value: {{ .Values.analyticsEngine.componentName }} + - name: MESSAGE_BUS_HOST + value: {{ .Values.messageBus.componentName }} + - name: WORKERS + value: "{{ .Values.messageBus.workers }}" + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.analyticsEngine.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.analyticsEngine.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/av-agent-deployment.yaml b/foghorn-edge/templates/av-agent-deployment.yaml new file mode 100644 index 00000000..ed1c1d94 --- /dev/null +++ b/foghorn-edge/templates/av-agent-deployment.yaml @@ -0,0 +1,80 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.avAgent.serviceName }} + name: {{ .Values.avAgent.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.avAgent.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.avAgent.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.avAgent.serviceName }} + edge.foghorn.io/app-name: {{ .Values.avAgent.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.avAgent.componentName }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.avAgent.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.avAgent.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + - mountPath: /opt/video + name: {{ .Values.volume.hostVideo.name }} + - mountPath: /opt/audio + name: {{ .Values.volume.hostAudio.name }} +{{ if eq .Values.avAgent.privilegedMount true}} + - mountPath: /dev/v4l/ + name: dev-v4l + - mountPath: /dev/snd + name: dev-snd + securityContext: + privileged: true +{{ end }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} + - name: {{ .Values.volume.hostAudio.name }} + hostPath: + path: {{ .Values.volume.hostAudio.path }} + type: DirectoryOrCreate + - name: {{ .Values.volume.hostVideo.name }} + hostPath: + path: {{ .Values.volume.hostVideo.path }} + type: DirectoryOrCreate +{{ if eq .Values.avAgent.privilegedMount true}} + - name: dev-v4l + hostPath: + path: /dev/v4l + - name: dev-snd + hostPath: + path: /dev/snd +{{ end }} +status: {} diff --git a/foghorn-edge/templates/certs-secret.yaml b/foghorn-edge/templates/certs-secret.yaml new file mode 100644 index 00000000..9aafaa83 --- /dev/null +++ b/foghorn-edge/templates/certs-secret.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Secret +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-15" + name: certs-secret + namespace: {{ .Release.Namespace }} + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} +type: Opaque +data: + license-ca.crt: | + {{ .Files.Get "files/certs/PROD-license-ca.crt" | b64enc }} + ca-cert.pem: | + {{ .Files.Get "files/certs/ca-cert.pem" | b64enc }} + key.pem: | + {{ .Files.Get "files/certs/key.pem" | b64enc }} + cert.pem: | + {{ .Files.Get "files/certs/cert.pem" | b64enc }} diff --git a/foghorn-edge/templates/cleanup-cluster-role.yaml b/foghorn-edge/templates/cleanup-cluster-role.yaml new file mode 100644 index 00000000..301e85d0 --- /dev/null +++ b/foghorn-edge/templates/cleanup-cluster-role.yaml @@ -0,0 +1,41 @@ +kind: ClusterRole +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "11" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: {{ .Release.Namespace }}-cleanup-cluster-role +rules: + - apiGroups: + - "" + - "apps" + - "batch" + - "rbac.authorization.k8s.io" + - "extensions" + resources: + - deployments + - pods + - jobs + - daemonsets + - secrets + - configmaps + - persistentvolumeclaims + - persistentvolumes + - services + - namespaces + - serviceaccounts + - clusterrolebindings + - clusterroles + - rolebindings + - roles + - ingresses + verbs: + - get + - list + - watch + - create + - delete diff --git a/foghorn-edge/templates/cleanup-edge-workloads-job.yaml b/foghorn-edge/templates/cleanup-edge-workloads-job.yaml new file mode 100644 index 00000000..3bf5b1cf --- /dev/null +++ b/foghorn-edge/templates/cleanup-edge-workloads-job.yaml @@ -0,0 +1,31 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "15" + "helm.sh/hook-delete-policy": "hook-succeeded,before-hook-creation,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: "cleanup-edge-workloads" + namespace: {{ .Release.Namespace }} +spec: + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + edge.foghorn.io/created-for: cleanup + spec: + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + serviceAccountName: cleanup-sa + containers: + - name: "cleanup-edge-workloads" + image: {{ .Values.kubectl.image }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + command: [ 'kubectl' ] + args: [ 'delete', 'service,deployment,job,pod', '-ledge.foghorn.io/managed-by={{ .Release.Name }},edge.foghorn.io/created-for!=cleanup', '--ignore-not-found' ] + resources: {} + restartPolicy: Never +status: {} diff --git a/foghorn-edge/templates/cleanup-em-apps-jobs.yaml b/foghorn-edge/templates/cleanup-em-apps-jobs.yaml new file mode 100644 index 00000000..565916d2 --- /dev/null +++ b/foghorn-edge/templates/cleanup-em-apps-jobs.yaml @@ -0,0 +1,46 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "14" + "helm.sh/hook-delete-policy": "hook-succeeded,before-hook-creation,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: "cleanup-em-apps" + namespace: {{ .Release.Namespace }} +spec: + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + edge.foghorn.io/created-for: cleanup + spec: + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + serviceAccountName: cleanup-sa + initContainers: + - name: init-cleanup-em-apps + image: {{ .Values.busybox.image }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + command: [ 'sh' ] + args: [ '-c', 'touch /fh_vol/fh/apps/make_kubectl_pass_when_no_apps.yaml' ] + volumeMounts: + - name: {{ .Values.volume.foghorn.name }} + mountPath: /fh_vol + containers: + - name: "cleanup-em-apps" + image: {{ .Values.kubectl.image }} + command: [ 'kubectl' ] + args: [ 'delete', '-f', '/fh_vol/fh/apps', '-R', '--ignore-not-found' ] + resources: {} + volumeMounts: + - name: {{ .Values.volume.foghorn.name }} + mountPath: /fh_vol + restartPolicy: Never + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/cleanup-folder-structure-job.yaml b/foghorn-edge/templates/cleanup-folder-structure-job.yaml new file mode 100644 index 00000000..58cee130 --- /dev/null +++ b/foghorn-edge/templates/cleanup-folder-structure-job.yaml @@ -0,0 +1,43 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "16" + "helm.sh/hook-delete-policy": "hook-succeeded,before-hook-creation,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: "cleanup-folder-structure" + namespace: {{ .Release.Namespace }} +spec: + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + edge.foghorn.io/created-for: cleanup + spec: + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + serviceAccountName: cleanup-sa + containers: + - name: "cleanup-folder-structure" + image: {{ .Values.busybox.image }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + command: [ 'sh' ] + args: [ '-c', 'rm -rf /fh_vol/* /var/lib/influxdb/*' ] + resources: {} + volumeMounts: + - name: {{ .Values.volume.foghorn.name }} + mountPath: /fh_vol + - mountPath: /var/lib/influxdb + name: {{ .Values.volume.influx.name }} + restartPolicy: Never + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} + - name: {{ .Values.volume.influx.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.influx.name }} +status: {} diff --git a/foghorn-edge/templates/cleanup-kube-resources-job.yaml b/foghorn-edge/templates/cleanup-kube-resources-job.yaml new file mode 100644 index 00000000..e9a4f2f5 --- /dev/null +++ b/foghorn-edge/templates/cleanup-kube-resources-job.yaml @@ -0,0 +1,29 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "17" + "helm.sh/hook-delete-policy": "hook-succeeded,before-hook-creation,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: "cleanup-kube-resources" + namespace: {{ .Release.Namespace }} +spec: + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + edge.foghorn.io/created-for: cleanup + spec: + serviceAccountName: cleanup-sa + containers: + - name: cleanup-kube-resources + image: {{ .Values.kubectl.image }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + command: [ 'kubectl' ] + # Had to add --wait=false, as 2 out of the first 3 cleanup jobs are not deleted even though they are completed if the volumemount attached to them is based on dynamically provisioned volume and this job when it tries to delete pvc is stuck until those 2 jobs are deleted + args: [ 'delete', 'service,deployment,job,pod,configmap,pvc,pv,rolebinding,clusterrolebinding,role,clusterrole,secret,sa', '-ledge.foghorn.io/managed-by={{ .Release.Name }},edge.foghorn.io/created-for!=cleanup', '--ignore-not-found', '--wait=false' ] + restartPolicy: Never +status: {} diff --git a/foghorn-edge/templates/cleanup-sa-cluster-role-binding.yaml b/foghorn-edge/templates/cleanup-sa-cluster-role-binding.yaml new file mode 100644 index 00000000..0d7da82c --- /dev/null +++ b/foghorn-edge/templates/cleanup-sa-cluster-role-binding.yaml @@ -0,0 +1,20 @@ +kind: ClusterRoleBinding +apiVersion: rbac.authorization.k8s.io/v1 +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "12" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: cleanup-sa-cluster-role-binding + namespace: {{ .Release.Namespace }} +subjects: + - kind: ServiceAccount + name: cleanup-sa + namespace: {{ .Release.Namespace }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: {{ .Release.Namespace }}-cleanup-cluster-role diff --git a/foghorn-edge/templates/cleanup-sa.yaml b/foghorn-edge/templates/cleanup-sa.yaml new file mode 100644 index 00000000..da165bac --- /dev/null +++ b/foghorn-edge/templates/cleanup-sa.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + annotations: + "helm.sh/hook": "post-delete" + "helm.sh/hook-weight": "10" + "helm.sh/hook-delete-policy": "before-hook-creation,hook-succeeded,hook-failed" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: cleanup + name: cleanup-sa + namespace: {{ .Release.Namespace }} diff --git a/foghorn-edge/templates/data-publisher-deployment.yaml b/foghorn-edge/templates/data-publisher-deployment.yaml new file mode 100644 index 00000000..cf0b7f3b --- /dev/null +++ b/foghorn-edge/templates/data-publisher-deployment.yaml @@ -0,0 +1,59 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + service.name: {{ .Values.dataPublisher.serviceName }} + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: {{ .Values.dataPublisher.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.dataPublisher.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.dataPublisher.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.dataPublisher.serviceName }} + edge.foghorn.io/app-name: {{ .Values.dataPublisher.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.dataPublisher.componentName }} + - name: FOGHORN_DATA_PUBLISHER_OPTS + value: -Demhost={{ .Values.edgemanager.componentName }} -Ddbasehost={{ .Values.influxdb.componentName }} -Ddbushost={{ .Values.messageBus.componentName }} + -Demport={{ .Values.edgemanager.port }} -DretryExitOnError=true -DactiveKey= -Dlog4j.configuration=file:/fh_vol/fh/configs/logger/data-publisher-log4j.properties + -Dlogback.configurationFile=file:/fh_vol/fh/configs/logger/data-publisher-logback.xml + - name: JAVA_OPTS + value: -Dhttps.protocols=TLSv1.1,TLSv1.2 -Xmx512M -XX:+ExitOnOutOfMemoryError + -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/fh_vol/fh/logs/data-publisher/mps + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.dataPublisher.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.dataPublisher.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/edge-properties-configmap.yaml b/foghorn-edge/templates/edge-properties-configmap.yaml new file mode 100644 index 00000000..ba66a5aa --- /dev/null +++ b/foghorn-edge/templates/edge-properties-configmap.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-13" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: edge-properties + namespace: {{ .Release.Namespace }} +data: + edge_properties.json: | +{{ (tpl (.Files.Get "files/edge_properties.json") .) | indent 4 }} diff --git a/foghorn-edge/templates/edgemanager-deployment.yaml b/foghorn-edge/templates/edgemanager-deployment.yaml new file mode 100644 index 00000000..ffd30e83 --- /dev/null +++ b/foghorn-edge/templates/edgemanager-deployment.yaml @@ -0,0 +1,105 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.edgemanager.serviceName }} + name: {{ .Values.edgemanager.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.edgemanager.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.edgemanager.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.edgemanager.serviceName }} + edge.foghorn.io/app-name: {{ .Values.edgemanager.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.edgemanager.componentName }} + - name: MESSAGE_BUS_HOST + value: {{ .Values.messageBus.componentName }} + - name: FOGHORN_K8S_NAMESPACE + value: "{{ .Release.Namespace }}" + - name: FOGHORN_K8S_NODENAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.edgemanager.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.edgemanager.componentName }} + ports: + - containerPort: {{ .Values.edgemanager.port }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + - name: address-secret + mountPath: /fh_ext/devices/eth0/address + subPath: address + readOnly: true + initContainers: + - name: init-edgemanager + image: {{ .Values.busybox.image }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + command: [ 'sh' ] + args: [ '-c', {{ .Files.Get "scripts/bootstrap-edgemanager.sh" | quote }} ] + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + - name: certs-secret + mountPath: /fh_vol/fh/tmp/certs/ + - name: logger-properties + mountPath: /fh_vol/fh/tmp/logger/ + - name: logrotate-properties + mountPath: /fh_vol/fh/tmp/logrotate/ + - name: edge-properties + mountPath: /fh_vol/fh/tmp/configs/edge_properties.json + subPath: edge_properties.json + - name: em-container-list + mountPath: /fh_vol/fh/tmp/configs/em-container-list.txt + subPath: em-container-list.txt + restartPolicy: Always + serviceAccountName: {{ .Release.Namespace }}-em-sa + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} + - name: address-secret + secret: + secretName: address-secret-file + - name: certs-secret + secret: + secretName: certs-secret + - name: edge-properties + configMap: + name: edge-properties + - name: logger-properties + configMap: + name: logger-properties + - name: em-container-list + configMap: + name: em-container-list + - name: logrotate-properties + configMap: + name: logrotate-properties +status: {} diff --git a/foghorn-edge/templates/edgemanager-svc.yaml b/foghorn-edge/templates/edgemanager-svc.yaml new file mode 100644 index 00000000..e02fadfe --- /dev/null +++ b/foghorn-edge/templates/edgemanager-svc.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.edgemanager.serviceName }} + name: {{ .Values.edgemanager.serviceName }} + namespace: {{ .Release.Namespace }} +spec: +{{- if .Values.openPorts }} + type: LoadBalancer + externalIPs: + - {{ .Values.service.loadBalancerIP }} +{{ end }} + ports: + - name: "{{ .Values.edgemanager.port }}" + port: {{ .Values.edgemanager.port }} + targetPort: {{ .Values.edgemanager.port }} + selector: + service.name: {{ .Values.edgemanager.serviceName }} +status: + loadBalancer: {} diff --git a/foghorn-edge/templates/edgeml-advanced3-deployment.yaml b/foghorn-edge/templates/edgeml-advanced3-deployment.yaml new file mode 100644 index 00000000..6abee5aa --- /dev/null +++ b/foghorn-edge/templates/edgeml-advanced3-deployment.yaml @@ -0,0 +1,64 @@ +{{ if eq .Values.edgeml.type "ADVANCED3"}} +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.edgeml.serviceName }} + name: {{ .Values.edgeml.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.edgeml.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.edgeml.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.edgeml.serviceName }} + edge.foghorn.io/app-name: {{ .Values.edgeml.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.edgeml.componentName }} + - name: EDGE_MANAGER_HOST + value: {{ .Values.edgemanager.componentName }} + - name: EDGE_MANAGER_PORT + value: {{ quote .Values.edgemanager.port }} + - name: MESSAGE_BUS_HOST + value: {{ quote .Values.messageBus.componentName }} + - name: MESSAGE_BUS_PUB_PORT + value: {{ quote .Values.messageBus.port.pub }} + - name: MESSAGE_BUS_SUB_PORT + value: {{ quote .Values.messageBus.port.sub }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.edgemlAdvanced3.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.edgeml.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} +{{ end }} diff --git a/foghorn-edge/templates/edgeml-standard3-deployment.yaml b/foghorn-edge/templates/edgeml-standard3-deployment.yaml new file mode 100644 index 00000000..7c80f349 --- /dev/null +++ b/foghorn-edge/templates/edgeml-standard3-deployment.yaml @@ -0,0 +1,64 @@ +{{ if eq .Values.edgeml.type "STANDARD3"}} +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.edgeml.serviceName }} + name: {{ .Values.edgeml.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.edgeml.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.edgeml.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.edgeml.serviceName }} + edge.foghorn.io/app-name: {{ .Values.edgeml.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.edgeml.componentName }} + - name: EDGE_MANAGER_HOST + value: {{ .Values.edgemanager.componentName }} + - name: EDGE_MANAGER_PORT + value: {{ quote .Values.edgemanager.port }} + - name: MESSAGE_BUS_HOST + value: {{ quote .Values.messageBus.componentName }} + - name: MESSAGE_BUS_PUB_PORT + value: {{ quote .Values.messageBus.port.pub }} + - name: MESSAGE_BUS_SUB_PORT + value: {{ quote .Values.messageBus.port.sub }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.edgemlStandard3.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.edgeml.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} +{{ end }} diff --git a/foghorn-edge/templates/em-cluster-role.yaml b/foghorn-edge/templates/em-cluster-role.yaml new file mode 100644 index 00000000..caa83957 --- /dev/null +++ b/foghorn-edge/templates/em-cluster-role.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-9" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: edgemanager + name: {{ .Release.Namespace }}-em-pods-metrics-reader-role +rules: + - apiGroups: [ metrics.k8s.io ] + resources: [ pods, nodes ] + verbs: [ get, list ] + - apiGroups: [ "" ] + resources: [ nodes ] + verbs: [ get, list ] diff --git a/foghorn-edge/templates/em-container-list-configmap.yaml b/foghorn-edge/templates/em-container-list-configmap.yaml new file mode 100644 index 00000000..144008b3 --- /dev/null +++ b/foghorn-edge/templates/em-container-list-configmap.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-13" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: em-container-list + namespace: {{ .Release.Namespace }} +data: + em-container-list.txt: | +{{ (tpl (.Files.Get "files/em-container-list.txt") .) | indent 4 }} diff --git a/foghorn-edge/templates/em-role.yaml b/foghorn-edge/templates/em-role.yaml new file mode 100644 index 00000000..333e793d --- /dev/null +++ b/foghorn-edge/templates/em-role.yaml @@ -0,0 +1,15 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-9" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: edgemanager + name: {{ .Release.Namespace }}-em-workloads-manager-role + namespace: {{ .Release.Namespace }} +rules: + - apiGroups: [ "", apps, batch, extensions ] + resources: [ configmaps, endpoints, persistentvolumeclaims, pods, replicationcontrollers, secrets, services, daemonsets, deployments, replicasets, statefulsets, cronjobs, jobs, endpointslices, ingresses ] + verbs: [ get, list, create, update, patch, watch, delete, and deletecollection ] diff --git a/foghorn-edge/templates/em-sa-cluster-role-binding.yaml b/foghorn-edge/templates/em-sa-cluster-role-binding.yaml new file mode 100644 index 00000000..ad24e93f --- /dev/null +++ b/foghorn-edge/templates/em-sa-cluster-role-binding.yaml @@ -0,0 +1,19 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-8" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: edgemanager + name: {{ .Release.Namespace }}-em-sa-pods-metrics-reader-role-binding + namespace: {{ .Release.Namespace }} +subjects: +- kind: ServiceAccount + name: {{ .Release.Namespace }}-em-sa + namespace: {{ .Release.Namespace }} +roleRef: + kind: ClusterRole + name: {{ .Release.Namespace }}-em-pods-metrics-reader-role + apiGroup: rbac.authorization.k8s.io diff --git a/foghorn-edge/templates/em-sa-role-binding.yaml b/foghorn-edge/templates/em-sa-role-binding.yaml new file mode 100644 index 00000000..e4a3b144 --- /dev/null +++ b/foghorn-edge/templates/em-sa-role-binding.yaml @@ -0,0 +1,19 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-8" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: edgemanager + name: {{ .Release.Namespace }}-em-sa-workloads-manager-role-binding + namespace: {{ .Release.Namespace }} +subjects: +- kind: ServiceAccount + name: {{ .Release.Namespace }}-em-sa + namespace: {{ .Release.Namespace }} +roleRef: + kind: Role + name: {{ .Release.Namespace }}-em-workloads-manager-role + apiGroup: rbac.authorization.k8s.io diff --git a/foghorn-edge/templates/em-sa.yaml b/foghorn-edge/templates/em-sa.yaml new file mode 100644 index 00000000..4e782681 --- /dev/null +++ b/foghorn-edge/templates/em-sa.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-10" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + edge.foghorn.io/created-for: edgemanager + name: {{ .Release.Namespace }}-em-sa + namespace: {{ .Release.Namespace }} +imagePullSecrets: + - name: {{ .Values.image.pullSecret }} diff --git a/foghorn-edge/templates/foghorn-pvc.yaml b/foghorn-edge/templates/foghorn-pvc.yaml new file mode 100644 index 00000000..cd84104e --- /dev/null +++ b/foghorn-edge/templates/foghorn-pvc.yaml @@ -0,0 +1,19 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-19" + creationTimestamp: null + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: foghorn + namespace: {{ .Release.Namespace }} +spec: + storageClassName: {{ .Values.storageClassName }} + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +status: {} diff --git a/foghorn-edge/templates/influx-data-pvc.yaml b/foghorn-edge/templates/influx-data-pvc.yaml new file mode 100644 index 00000000..cc28d380 --- /dev/null +++ b/foghorn-edge/templates/influx-data-pvc.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-22" + creationTimestamp: null + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: influx-data + name: influx-data + namespace: {{ .Release.Namespace }} +spec: + storageClassName: {{ .Values.storageClassName }} + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi +status: {} diff --git a/foghorn-edge/templates/influxdb-deployment.yaml b/foghorn-edge/templates/influxdb-deployment.yaml new file mode 100644 index 00000000..54bbe28f --- /dev/null +++ b/foghorn-edge/templates/influxdb-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.influxdb.serviceName }} + name: {{ .Values.influxdb.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.influxdb.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.influxdb.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.influxdb.serviceName }} + edge.foghorn.io/app-name: {{ .Values.influxdb.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.influxdb.componentName }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.influxdb.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.influxdb.componentName }} + ports: + - containerPort: {{ .Values.influxdb.port }} + resources: {} + volumeMounts: + - mountPath: /var/lib/influxdb + name: {{ .Values.volume.influx.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.influx.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.influx.name }} +status: {} diff --git a/foghorn-edge/templates/influxdb-svc.yaml b/foghorn-edge/templates/influxdb-svc.yaml new file mode 100644 index 00000000..82f87467 --- /dev/null +++ b/foghorn-edge/templates/influxdb-svc.yaml @@ -0,0 +1,20 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.influxdb.serviceName }} + name: {{ .Values.influxdb.serviceName }} + namespace: {{ .Release.Namespace }} +spec: +{{- if .Values.openPorts }} + type: LoadBalancer + externalIPs: + - {{ .Values.service.loadBalancerIP }} +{{ end }} + ports: + - name: "{{ .Values.influxdb.port }}" + port: {{ .Values.influxdb.port }} + targetPort: {{ .Values.influxdb.port }} + selector: + service.name: {{ .Values.influxdb.serviceName }} diff --git a/foghorn-edge/templates/init-folder-structure-job.yaml b/foghorn-edge/templates/init-folder-structure-job.yaml new file mode 100644 index 00000000..362e0597 --- /dev/null +++ b/foghorn-edge/templates/init-folder-structure-job.yaml @@ -0,0 +1,36 @@ +apiVersion: batch/v1 +kind: Job +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-11" + "helm.sh/hook-delete-policy": "hook-succeeded,before-hook-creation" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: "init-folder-structure" + namespace: {{ .Release.Namespace }} +spec: + backoffLimit: 0 + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + spec: + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - name: "init-folder-structure" + image: {{ .Values.busybox.image }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + command: ['sh', '-c', {{ .Files.Get "scripts/init-folder-structure.sh" | quote }}] + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Never + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/logger-deployment.yaml b/foghorn-edge/templates/logger-deployment.yaml new file mode 100644 index 00000000..1b282735 --- /dev/null +++ b/foghorn-edge/templates/logger-deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.logger.serviceName }} + name: {{ .Values.logger.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.logger.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.logger.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.logger.serviceName }} + edge.foghorn.io/app-name: {{ .Values.logger.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.logger.componentName }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.logger.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.logger.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/logger-properties-configmap.yaml b/foghorn-edge/templates/logger-properties-configmap.yaml new file mode 100644 index 00000000..0d4c18d0 --- /dev/null +++ b/foghorn-edge/templates/logger-properties-configmap.yaml @@ -0,0 +1,23 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-12" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: logger-properties + namespace: {{ .Release.Namespace }} +data: + data-publisher-logback.xml: | +{{ .Files.Get "files/logger/data-publisher-logback.xml" | indent 4 }} + opc-agent-logback.xml: | +{{ .Files.Get "files/logger/opc-agent-logback.xml" | indent 4 }} + modbus-agent-logback.xml: | +{{ .Files.Get "files/logger/modbus-agent-logback.xml" | indent 4 }} + data-publisher-log4j.properties: | +{{ .Files.Get "files/logger/data-publisher-log4j.properties" | indent 4 }} + opc-agent-log4j.properties: | +{{ .Files.Get "files/logger/opc-agent-log4j.properties" | indent 4 }} + modbus-agent-log4j.properties: | +{{ .Files.Get "files/logger/modbus-agent-log4j.properties" | indent 4 }} diff --git a/foghorn-edge/templates/logrotate-deployment.yaml b/foghorn-edge/templates/logrotate-deployment.yaml new file mode 100644 index 00000000..c13b1885 --- /dev/null +++ b/foghorn-edge/templates/logrotate-deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.logrotate.serviceName }} + name: {{ .Values.logrotate.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.logrotate.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.logrotate.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.logrotate.serviceName }} + edge.foghorn.io/app-name: {{ .Values.logrotate.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.logrotate.componentName }} + image: {{ .Values.image.repository }}/{{ .Values.image.toolsSubRepository }}{{ .Values.logrotate.imageName }}{{ .Values.image.arch }}:1.2 + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.logrotate.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/logrotate-properties-configmap.yaml b/foghorn-edge/templates/logrotate-properties-configmap.yaml new file mode 100644 index 00000000..ec7c888b --- /dev/null +++ b/foghorn-edge/templates/logrotate-properties-configmap.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + annotations: + "helm.sh/hook": "pre-install" + "helm.sh/hook-weight": "-13" + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + name: logrotate-properties + namespace: {{ .Release.Namespace }} +data: + fh-log-rotate: | +{{ .Files.Get "files/fh-log-rotate" | indent 4 }} + logrotate: | +{{ .Files.Get "files/logrotate.sh" | indent 4 }} + logrotate-daemon: | +{{ .Files.Get "files/logrotate_daemon.sh" | indent 4 }} diff --git a/foghorn-edge/templates/message-bus-deployment.yaml b/foghorn-edge/templates/message-bus-deployment.yaml new file mode 100644 index 00000000..eb6b0fc1 --- /dev/null +++ b/foghorn-edge/templates/message-bus-deployment.yaml @@ -0,0 +1,57 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.messageBus.serviceName }} + name: {{ .Values.messageBus.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.messageBus.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.messageBus.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.messageBus.serviceName }} + edge.foghorn.io/app-name: {{ .Values.messageBus.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.messageBus.componentName }} + - name: WORKERS + value: "{{ .Values.messageBus.workers }}" + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.messageBus.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.messageBus.componentName }} + ports: + - containerPort: {{ .Values.messageBus.port.pub }} + - containerPort: {{ .Values.messageBus.port.sub }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/message-bus-svc.yaml b/foghorn-edge/templates/message-bus-svc.yaml new file mode 100644 index 00000000..e4a067b2 --- /dev/null +++ b/foghorn-edge/templates/message-bus-svc.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.messageBus.serviceName }} + name: {{ .Values.messageBus.serviceName }} + namespace: {{ .Release.Namespace }} +spec: +{{- if .Values.openPorts }} + type: LoadBalancer + externalIPs: + - {{ .Values.service.loadBalancerIP }} +{{ end }} + ports: + - name: "{{ .Values.messageBus.port.pub }}" + port: {{ .Values.messageBus.port.pub }} + targetPort: {{ .Values.messageBus.port.pub }} + - name: "{{ .Values.messageBus.port.sub }}" + port: {{ .Values.messageBus.port.sub }} + targetPort: {{ .Values.messageBus.port.sub }} + selector: + service.name: {{ .Values.messageBus.serviceName }} +status: + loadBalancer: {} diff --git a/foghorn-edge/templates/modbus-agent-deployment.yaml b/foghorn-edge/templates/modbus-agent-deployment.yaml new file mode 100644 index 00000000..51b363ae --- /dev/null +++ b/foghorn-edge/templates/modbus-agent-deployment.yaml @@ -0,0 +1,58 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.modbusAgent.serviceName }} + name: {{ .Values.modbusAgent.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.modbusAgent.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.modbusAgent.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.modbusAgent.serviceName }} + edge.foghorn.io/app-name: {{ .Values.modbusAgent.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.modbusAgent.componentName }} + - name: FOGHORN_MODBUS_AGENT_OPTS + value: -Demhost={{ .Values.edgemanager.componentName }} -Ddbushost={{ .Values.messageBus.componentName }} -Demport={{ .Values.edgemanager.port }} -DretryExitOnError=true + -Dlog4j.configuration=file:/fh_vol/fh/configs/logger/modbus-agent-log4j.properties + -Dlogback.configurationFile=file:/fh_vol/fh/configs/logger/modbus-agent-logback.xml + - name: JAVA_OPTS + value: -Xmx200m -XX:+ExitOnOutOfMemoryError + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.modbusAgent.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.modbusAgent.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/mqtt-agent-deployment.yaml b/foghorn-edge/templates/mqtt-agent-deployment.yaml new file mode 100644 index 00000000..5f513d4a --- /dev/null +++ b/foghorn-edge/templates/mqtt-agent-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.mqttAgent.serviceName }} + name: {{ .Values.mqttAgent.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.mqttAgent.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.mqttAgent.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.mqttAgent.serviceName }} + edge.foghorn.io/app-name: {{ .Values.mqttAgent.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.mqttAgent.componentName }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.mqttAgent.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.mqttAgent.componentName }} + ports: + - containerPort: {{ .Values.mqttAgent.port }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/mqtt-agent-svc.yaml b/foghorn-edge/templates/mqtt-agent-svc.yaml new file mode 100644 index 00000000..30d239cf --- /dev/null +++ b/foghorn-edge/templates/mqtt-agent-svc.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Service +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.mqttAgent.serviceName }} + name: {{ .Values.mqttAgent.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + ports: + - name: "{{ .Values.mqttAgent.port }}" + port: {{ .Values.mqttAgent.port }} + targetPort: {{ .Values.mqttAgent.port }} + selector: + service.name: {{ .Values.mqttAgent.serviceName }} diff --git a/foghorn-edge/templates/mqtt-client-deployment.yaml b/foghorn-edge/templates/mqtt-client-deployment.yaml new file mode 100644 index 00000000..5a328f76 --- /dev/null +++ b/foghorn-edge/templates/mqtt-client-deployment.yaml @@ -0,0 +1,54 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.mqttClient.serviceName }} + name: {{ .Values.mqttClient.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.mqttClient.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.mqttClient.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.mqttClient.serviceName }} + edge.foghorn.io/app-name: {{ .Values.mqttClient.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.mqttClient.componentName }} + - name: MESSAGE_BUS_HOST + value: {{ .Values.messageBus.serviceName }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.mqttClient.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.mqttClient.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/templates/opc-agent-deployment.yaml b/foghorn-edge/templates/opc-agent-deployment.yaml new file mode 100644 index 00000000..69e53e10 --- /dev/null +++ b/foghorn-edge/templates/opc-agent-deployment.yaml @@ -0,0 +1,56 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.opcAgent.serviceName }} + name: {{ .Values.opcAgent.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.opcAgent.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.opcAgent.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.opcAgent.serviceName }} + edge.foghorn.io/app-name: {{ .Values.opcAgent.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.opcAgent.componentName }} + - name: FOGHORN_BROKER_OPC_UA_OPTS + value: -Demhost={{ .Values.edgemanager.componentName }} -Ddbushost={{ .Values.messageBus.componentName }} -Demport={{ .Values.edgemanager.port }} -Dlog4j.configuration=file:/fh_vol/fh/configs/logger/opc-agent-log4j.properties + -Dlogback.configurationFile=file:/fh_vol/fh/configs/logger/opc-agent-logback.xml + - name: JAVA_OPTS + value: -XX:+ExitOnOutOfMemoryError + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.opcAgent.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.opcAgent.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} diff --git a/foghorn-edge/templates/opcda-agent-deployment.yaml b/foghorn-edge/templates/opcda-agent-deployment.yaml new file mode 100644 index 00000000..736abe09 --- /dev/null +++ b/foghorn-edge/templates/opcda-agent-deployment.yaml @@ -0,0 +1,52 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 4 }} + service.name: {{ .Values.opcdaAgent.serviceName }} + name: {{ .Values.opcdaAgent.serviceName }} + namespace: {{ .Release.Namespace }} +spec: + replicas: {{ .Values.opcdaAgent.replicaCount }} + selector: + matchLabels: + service.name: {{ .Values.opcdaAgent.serviceName }} + strategy: + type: Recreate + template: + metadata: + labels: + {{- include "foghorn-edge.labels" . | nindent 8 }} + service.name: {{ .Values.opcdaAgent.serviceName }} + edge.foghorn.io/app-name: {{ .Values.opcdaAgent.serviceName }} + spec: + affinity: + podAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + - labelSelector: + matchExpressions: + - key: edge.foghorn.io/app-name + operator: In + values: + - {{ .Values.messageBus.serviceName }} + topologyKey: "kubernetes.io/hostname" + imagePullSecrets: + - name: {{ .Values.image.pullSecret }} + containers: + - env: + - name: COMPONENT_NAME + value: {{ .Values.opcdaAgent.componentName }} + image: {{ .Values.image.repository }}/{{ .Values.image.releasesSubRepository }}{{ .Values.opcdaAgent.imageName }}{{ .Values.image.arch }}:{{ .Values.image.tag }} + imagePullPolicy: {{ .Values.image.imagePullPolicy }} + name: {{ .Values.opcdaAgent.componentName }} + resources: {} + volumeMounts: + - mountPath: /fh_vol + name: {{ .Values.volume.foghorn.name }} + restartPolicy: Always + serviceAccountName: "" + volumes: + - name: {{ .Values.volume.foghorn.name }} + persistentVolumeClaim: + claimName: {{ .Values.volumeClaim.foghorn.name }} +status: {} diff --git a/foghorn-edge/values.yaml b/foghorn-edge/values.yaml new file mode 100644 index 00000000..156a30a6 --- /dev/null +++ b/foghorn-edge/values.yaml @@ -0,0 +1,29 @@ +# valued to be defaulted for foghorn edge helm chart +image: + imagePullPolicy: "" + tag: 2.6.0-GA + pullSecret: "foghorn-registry-secret" + arch: "" + +storageClassName: "longhorn" + +mode: PROD + +edgeName: edgeName +fhm: + endpoint: 10.10.10.10 + +containerPlatform: + type: "KUBERNETES" + +volume: + foghorn: + name: foghorn + influx: + name: influx-data + hostAudio: + name: host-audio + path: /opt/audio + hostVideo: + name: host-video + path: /opt/video