UNPKG

@flowfuse/device-agent

Version:

An Edge Agent for running Node-RED instances deployed from the FlowFuse Platform

162 lines (147 loc) 3.94 kB
# Kubernetes Install Any deployment on Kubernetes is going to be specific to the environment and requirements of the solution. The following are examples that can be adopted to fit specific needs. ## Fixed Configuration If you have an existing `device.yml` file containing a set of Device Agent credentials. ```bash kubectl create secret generic device-one-secret --from-file=device.yml=./device.yml ``` The following manifest will create a Deployment and Service for a device using the supplied Secret as it's credentials ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: device-one labels: app: device-one spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: device-one template: metadata: labels: app: device-one spec: containers: - name: device-one image: flowfuse/device-agent:latest ports: - containerPort: 1880 volumeMounts: - name: config mountPath: "/opt/flowfuse-device/device.yml" subPath: "device.yml" readOnly: true resources: limits: cpu: 1000m memory: 256Mi requests: cpu: 500m memory: 128Mi volumes: - name: config secret: secretName: device-one-secret --- apiVersion: v1 kind: Service metadata: name: device-one-service spec: selector: app: device-one ports: - protocol: TCP port: 1880 targetPort: 1880 ``` ## Automatic Provisioning Using a FlowFuse Provisioning Token to automatically configure a new Device Agent on deployment. Because the Device Agent will need to re-write the `device.yml` file it can no longer be stored in a Secret and a PersistentVolume must be used for each instance of the Device Agent. A Secret is used to hold the initial `device.yml` which contains the provisioning token. ```bash kubectl create secret generic device-provisioning-secret --from-file=device.yml=./device.yml ``` The following manifest will create a Deployment, Service and PVC for a device using the supplied Secret as the source of the Provisioning token. The PVC will be used to store the updated `device.yml` and the Node-RED nodes installed by the Remote Instance. ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: device-one labels: app: device-one spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: device-one template: metadata: labels: app: device-one spec: initContainers: - name: config-copy image: busybox:latest command: - "/bin/sh" - "-c" - "if [ ! -f /opt/flowfuse-device/device.yml ]; then cp /tmp/device.yml /opt/flowfuse-device/device.yml; fi" volumeMounts: - name: config mountPath: "/opt/flowfuse-device" - name: initial-config mountPath: "/tmp/device.yml" subPath: "device.yml" readOnly: true containers: - name: device-one image: flowfuse/device-agent:latest ports: - containerPort: 1880 volumeMounts: - name: config mountPath: "/opt/flowfuse-device" resources: limits: cpu: 1000m memory: 256Mi requests: cpu: 500m memory: 128Mi volumes: - name: initial-config secret: secretName: device-provisioning-secret - name: config persistentVolumeClaim: claimName: device-one-pvc --- apiVersion: v1 kind: Service metadata: name: device-one-service spec: selector: app: device-one ports: - protocol: TCP port: 1880 targetPort: 1880 --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: device-one-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi ```