Deployment patterns

Synpse is flexible enough to create a wide range of architectures for managing devices and applications. We will explain how you can manage your stack in a scalable way.

Single application - multiple devices

Deploying a single application to multiple devices is easy: 1. Create an application with the selector of your choice. In example app_version: v1:

  1. Label devices with label selector app_version: v1 (See device labels page) :

Multiple applications - Multiple devices

When dealing with multiple applications and devices, it is good practice to segregate components outs. All devices are shared between namespaces, so use namespaces to isolate applications.

  1. Create separate namespaces per application, where applications are isolated via different namespaces and using different selectors: in example app: drone and app: nodered :

  1. Label targeted devices via selected labels. In our example, 2 devices are running drone application and one - nodered

Multi-project multi-application

When you need hard isolation, we recommend using different projects for different applications. For example foo-corp-development and foo-corp-production. This way you can isolate your development and production workloads and make sure the right people have access accordingly. See Teams/RBAC documentation.

This allows a dedicated project for production and development workloads. You can promote physical devices from one 'project' to another without re-installing them. See device operations documentation.

Important

In any of these configurations you have to be aware of a few behaviours of the system:

  1. An update to the shared configuration between applications will trigger application redeployment. For example, if you share the same secrets for multiple applications inside the project, updating it will trigger a rolling update to all applications. To avoid this, separate applications by creating dedicated secrets OR separate via projects

  2. Some application updates can cause updates to all other applications on the devices. For example, if you have an application, which modifies underlying device networking configuration, like wireguard or openVPN those might change the device network interface IP address or network card configurations. In situations like this, you might see other applications, restarting as they notice network interface changes. This happens because synpse injects default variables into each application (example below), and changes to any of these values (like name, hostname, IP address) will trigger an update.

"SYNPSE_APPLICATION_ID=app_2BOMpVySqVVY8KqtW1sQ1Oxxxxx"
"SYNPSE_DEVICE_ARCH=amd64"
"SYNPSE_DEVICE_HOSTNAME=localhost.localdomain"
"SYNPSE_DEVICE_IP=192.168.1.100"
"SYNPSE_DEVICE_NAME=minis"
"SYNPSE_NAMESPACE_ID=nms_2BO0QL28VfBsmiJzzXS1HQxxxxx"
"SYNPSE_PROJECT_ID=prj_1vfwzUEZ3Q9l8xcKU263TMxxxxx"

Last updated