Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →
PorterOps

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.

  • Automate building and publishing bundles, when the bundle definition changes or new versions of images used by the bundle are available.
  • Automatically deploy new versions of bundles.
  • Isolated environments for running bundles in your organization, limiting access to secrets used by the bundles using namespaces and RBAC.
  • Create and respond to events on your cluster to integrate bundles into your pipeline.

Why Porter Operator and not CNAB Operator?

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. 🐱

Why not BUCK?

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.


User Experience

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.

I live my life one kubectl command at a time

Porter Controller can be installed separately and does not depend on the other components. You can use kubectl to build, publish and execute bundles.

I know kung-fu^^^^^^^Flux

Manage your bundles via the Flux CLI and our Flux Controller.

My operators have operators

Install the PorterOps Package from one of the major hubs and manage it using OLM.

I'm all Porter, baby

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.


Components

PorterOps is composed of a suite of components:

  • Porter CLI
  • Kubernetes Plugin
  • Porter Operator
  • Flux Controller
  • Flux CLI
  • PorterOps Package

Porter CLI

In addition to the standard Porter CLI, adds commands for managing PorterOps:

  • Install PorterOps
  • Administer PorterOps (using OLM)
  • Interact with the Porter Operator

Requires: Kubernetes Plugin, Porter Operator, Flux Controller, PorterOps Package

Kubernetes Plugin

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

Porter Operator

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 🤘

Flux Controller

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

Flux CLI

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 Package

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


Milestones

MVP

The following is necessary to demonstrate the vision of PorterOps.

Porter Operator I

  • Build, publish and execute bundles via kubectl.
  • Use secrets stored in an external secret store supported by an existing Porter plugin.
  • Store Porter's data off-cluster using a storage plugin, or on a Kubernetes volume.

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.

Porter CLI I

  • Build, publish and execute bundles via porter.

This will significantly assist with testing which is why it's so early.

OLM Package I

  • Install using OLM.

Again helps with testing, and early adopters/testers.

Flux Controller I

  • Build, publish and execute bundles via GitOps.

This milestone demonstrates integration with Flux and using GitOps with Porter.

Flux Controller II

  • Execute a bundle when a new version is available.

This is a critical usability milestone that really shows how PorterOps experience should be.

Kubernetes Plugin for Porter

  • Use secrets defined on the cluster.
  • Store Porter's data on the cluster.

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.


Finish Line

If the MVP goes well, these round out PorterOps and make it easy for people to find and use.

Porter CLI II

  • Install using porter.

Make it easy for Porter users to try out what we have built.

Flux CLI

  • Build, publish and execute bundles via fluxctl.

Supports people who are more familiar with Flux than Porter, and get Flux to support bundles upstream. It could be dropped if necessary.

OLM Package II

  • List on hubs for discovery.

Make it easier for people who aren't existing Porter users to find what we have made.

Porter Operator II

  • Manage Porter's data through the Porter Operator.
  • Immediately useful for cleaning up test data.
  • Long term management of installations, and other Porter data. For example, pruning deleted installations after a period of time. Removing old revisions, large outputs, etc.

Day 2 operability.

Porter CLI III

  • Use operability functionality in OLM from porter.

Encourage best practices by making the right way accessible directly from porter.