Modes of operation

To support the different use-cases from Day 0 to Day 2 operations, Streaming Data Manager has different modes of operation. The same binary can act as:

Imperative mode

The main purpose of the imperative mode is to install Streaming Data Manager, get you started, and help you experiment with the various components. You can access only a small subset of the available configuration options and features (mostly just the default settings and some of the most important configuration flags) to avoid getting overloaded with command line flags.

Most notably, you can install and delete Streaming Data Manager from the command line. Internally, the install and delete commands change the component-specific parts of the main configuration, then trigger the reconciliation of the affected components.

Other commands do not necessarily change the main configuration, nor trigger reconciliation of any component. Such commands create dynamic resources which are out of scope for the reconcilers, but are convenient for getting started without having to leave the CLI.

Once you are finished experimenting with Streaming Data Manager, the recommended way forward is to start using the reconcile command, and apply all configuration through the custom resource directly. This is analogous to how you use kubectl create and then switch to using kubectl apply when you already have a full configuration and just want to apply changes incrementally. If you are an experienced Kubernetes user, you probably skip the imperative mode and start using the reconcile command from the beginning.

The drawback of the imperative mode is that there is no overall state of components, so it can’t tell what has already been installed.

Also, it is not suitable for automation. CD systems typically require Helm charts, Kustomize, or pure YAML resources to operate with.

Using the imperative mode

To use Streaming Data Manager in imperative mode, install the smm command-line tool, then use its commands to install Streaming Data Manager and perform other actions. For a list of available commands, see the CLI reference.

Install/Uninstall components

The following components can be installed/uninstalled individually. The -a flag installs/uninstalls them all. For details on installing and uninstalling the Streaming Data Manager operator, see Operator mode.

Note: the smm install -a --install-sdm command assumes that there is a default storage class available on the cluster, to provision the needed volumes. If your Kubernetes environment doesn’t have a default storage class, then the CRs deployed by Streaming Data Manager must be adjusted in order to work in your environment. In that case, request a demo and describe your use case so we can guide you through the configuration details as part of the demo.

Operator mode

The operator mode (also called declarative mode) follows the familiar operator pattern. In operator mode, Streaming Data Manager watches events on the ApplicationManifest CRD schema reference (group, and triggers a reconciliation for all components in order, the same way you can trigger the reconcile command locally.

Note: Unlike in the declarative CLI mode, in operator mode the Streaming Data Manager operator is running inside Kubernetes, and not on a client machine. This naturally means that this mode is mutually exclusive with the install, delete, and reconcile commands.

Using the operator mode is the recommended way to integrate the Streaming Data Manager installer into a Kubernetes-native continuous delivery solution, for example, Argo, where the integration boils down to applying YAML files to get the installer deployed as an operator.

Existing configurations managed using the reconcile command work out-of-the box after switching to the operator mode.

Using the operator mode

To use Streaming Data Manager in operator mode, see Operator mode.

When to use operator mode

Imperative mode is best suited for Day 0 and Day 1 operations, while declarative mode is best for Day 2, production usage. We recommend to start in imperative mode to familiarize yourself with all the CRs, deployments, and configurations. Then experiment: tweak the various CRs, deployments, and configurations to suit your environments and your needs. When you are finished, redeploy everything in declarative mode using a GitOps flow.