PorterOps not only gives you a native, integrated experience for managing your bundles with Kubernetes but is the recommended way to automate your bundle pipeline with support for GitOps.
PorterOps uses the Porter CLI, its configuration, storage, and accompanying ecosystem to manage bundles. It supports running any CNAB-compliant bundle, but this is not the CNAB Operator. It has features specific to the Porter ecosystem and you cannot swap from using Porter to another tool.
Also our logo is super cute. 🐱
Using an established operator library, which also integrates with the CNCF ArtifactHub, and is in a language that we are familiar with (Go vs. JavaScript) will enable rapid prototyping.
Our goal is to enable users to interact with the Porter Controller using the tools that they are familiar with. Some components can stand-alone, others build upon each other.
Porter Controller can be installed separately and does not depend on the other components. You can use kubectl to build, publish and execute bundles.
Manage your bundles via the Flux CLI and our Flux Controller.
Install the PorterOps Package from one of the major hubs and manage it using OLM.
Install PorterOps, and then build, publish and execute bundles through the familiar Porter CLI. Just give Porter a cluster and it takes care of the rest.
PorterOps is composed of a suite of components:
In addition to the standard Porter CLI, adds commands for managing PorterOps:
Requires: Kubernetes Plugin, Porter Operator, Flux Controller, PorterOps Package
The Kubernetes Plugin for Porter supports retrieving secrets from Kubernetes for use by the Porter client and for use within bundles. It also enables Porter to use Kubernetes for storage.
Required by the Porter CLI
The Porter Operator is a Kubernetes controller that builds, publishes and executes bundles. It is the main component of PorterOps. It uses the cnab-go Kubernetes driver to execute bundles on the cluster.
Requires: Nothing 🤘
The Flux Controller integrates Flux with the Porter Operator. This enables us to trigger Porter actions based on a git repository and OCI registry.
Requires: Porter Operator
Adds support for interacting with the Porter Operator via the Flux CLI (fluxctl).
This replicates a subset of the functionality of the Porter CLI, It is a generic way of managing Porter resources, similar to how you can create Helm releases with fluxctl.
Fluxctl does not support plugins so it would be an upstream change.
Requires: Porter Operator, Flux Controller
PorterOps can be managed using Operator Lifecycle Manager, a framework to install, upgrade and manage Kubernetes operators. We can then list the PorterOps package on OperatorHub and its successor ArtifactHub.
Requires: Porter Operator, Flux Controller
The following is necessary to demonstrate the vision of PorterOps.
This gives us a vanilla Kubernetes operator that anyone can use (not just with Flux). We still need the Porter plugins to give us the full feature set.
This will significantly assist with testing which is why it's so early.
Again helps with testing, and early adopters/testers.
This milestone demonstrates integration with Flux and using GitOps with Porter.
This is a critical usability milestone that really shows how PorterOps experience should be.
This is a critical security and usability milestone, making it easier to store data securely than to do it in an insecure way. Secure by default. Until this point, the recommended way is to use the azure plugin or hashicorp plugin + encrypted volumes, which most devs won't bother with.
If the MVP goes well, these round out PorterOps and make it easy for people to find and use.
Make it easy for Porter users to try out what we have built.
Supports people who are more familiar with Flux than Porter, and get Flux to support bundles upstream. It could be dropped if necessary.
Make it easier for people who aren't existing Porter users to find what we have made.
Day 2 operability.
Encourage best practices by making the right way accessible directly from porter.