FlowFuse/flowfuse

Review - DebianOS Install (w/k8s)

Opened this issue · 5 comments

Given a clean DebianOS image, install and setup FlowFuse using k8s. k8s currently represented just shy of 60% of our EE deployments in self-hosted environments, and 12% of CE deployments

Considerations

  • Each step taken should be recorded
  • Any frustrations/friction should be highlighted and documented
  • The full process should be timed, ideally with rough timestamps along the too so that we understand where time is being spent.

Areas for Improvement

  • #4572
  • Insert other ideas here from this investigation

I don't think the Kubernetes approach should be considered as an installation method for a single server.
The Kubernetes approach is not ideal for a single server installation. While it is technically possible to run Kubernetes on a single-node cluster, it is excessive and does not leverage the key benefits Kubernetes was designed for.
IMO for a single node we should consider a Docker install approach while the installation method on a Kubernetes cluster should be a separate one.

I don't think the Kubernetes approach should be considered as an installation method for a single server.

Thanks Piotr. In that case, why would users choose this route in our documentation? We should make this clearer in that opening documentation, we drive users towards Docker.

As discussed:

  • for quick product evaluation I will go with docker
    • maybe this could apply to small production deployments where high availability and scalability are not the case
  • for production-ready environments, Kubernetes installation is a way to go
    • I can also imagine, that in bigger enterprises Kubernetes cluster is more likely to be available than a single docker server - in that case IT team will use existing resources for product evaluation instead of creating a new server for this purpose

FlowFuse platform installation timeline using Kubernetes approach

Installation prerequisites:

  • kubernetes cluster installed, including ingress controller
  • kubectl, helm tools available
  • domain configured via external local dns server before installation

Installation timeline:

  • Intro to documentation (time spent on reading before I reach ‘actions’ steps): 1m30s
  • Add helm repository: 8s
  • Configure FlowFuse installation:
    • use built-in database: 2m4s
    • own database: 6m57s
  • Installation: 11m36s
    • veery long helm install time, probably due to the need of pulling postgres and FF images

Total time:

  • with built-in database: 15m 18s
  • using own database: 20m 11s
timeline
    title Setup Task Durations with Time in Seconds (in seconds)
    section Intro to Documentation
    Intro to documentation : 90s
    section Add Helm Repo
    Add helm repo : 8s
    section Configure FlowFuse
    Use built-in database : 124s
    Own database : 420s
    section Installation
    Installation : 696s

Loading

My thoughts:

  • I made couple of typos during configuration preparation, finding the root cause required digging into the pod logs
  • documentation is chaotic
    • some information about possible configuration is showed after installation is made (enabling mqtt and file-store), this is confusing
    • some very specific configurations examples are mentioned which may increase the confusion
  • kubernetes node labeling - be default we should disable it to make installation easier
  • Configuring Flowfuse/First Run Setup - we should consider moving it to the same level as Installing Flowfuse and Upgrading Flowfuse and use it as a starting point for configuration-related FAQ
  • typo in forge.localPostrgresql
  • FlowFuse first setup - while creating admin user I cannot confirm the form by hitting Enter
  • This is done by creating a **customization.yml** file in the **helm** directory - there is no need to create helm directory and keep customization.yml there.
  • Installation process took vast amount of time. This should be investigated further to determine the root cause. For sure pulling images took some time, although I didn’t investigate which one.

Like with Docker setup, I would aim to make installation as simple as possible. I would hide stuff related to more specific configuration behind drop-down FAQ or dedicated configuration-related page.

FlowFuse platform installation timeline using Kubernetes approach - evaluation for changes introduced in PR 4704

Installation prerequisites:

  • kubernetes cluster installed, including ingress controller
  • kubectl, helm tools available
  • domain configured via external local dns server before installation

Installation timeline:

  • Intro to documentation (time spent on reading before I reach ‘actions’ steps): 45s
  • Add helm repository: 8s
  • Configure FlowFuse installation:
    • use built-in database: 55s
    • own database: 2m30s
  • label nodes: 40s
  • Installation: 1m 15s

Total time:

  • with built-in database: 3m 33s
  • using own database: 5m 8s
timeline
    title Setup Task Durations with Time in Seconds (in seconds)
    section Intro to Documentation
    Intro to documentation : 45s
    section Add Helm Repo
    Add helm repo : 8s
    section Configure FlowFuse
    Use built-in database : 55s
    Own database : 150s
    label cluster nodes: 40s
    section Installation
    Installation : 75s

Loading

My comment:

I couldn't reproduce the long installation time I faced on the first run. Due to this, the installation time change looks like a huge improvement when it is not - an installation process depends on factors on which we don't have any influence (cluster resources, network bandwidth, external database performance).
The most important conclusion from this evaluation run is the fact that the configuration step seems to be simpler (copy-paste + small adjustments). Documentation itself seems to be cleaner and 'to-the-point'.