The Control Plane installer lets you deploy your own instance of the Banzai Cloud Platform very similar to the one available at http://beta.banzaicloud.io. The installer software is a command line tool, which will usually run on your workstation, and provisions a stand alone control plane on a target Kubernetes cluster.

Requirements

  • Docker 18.09+
  • The Banzai CLI tool
  • A working Kubernetes cluster with:
  • LoadBalancer support
  • PersistentVolume support (a working default storage class)
  • At least 4 CPU cores and 8GB of available memory
  • A DNS record pointing to the control plane service (the LoadBalancer on the cluster)

See: Installing a single-node PKE cluster on Azure

Installation steps

Once you have installed the Banzai CLI tool, create a new folder to hold the state of the deployment.

If you are using Docker for Mac, you will have to create the folder in a path which is set up to be mounted to containers. The user home directory is set by default.

Prerequisite: GitHub based authentication

You need two things from GitHub to set up Pipeline:

  • a GitHub OAuth application
    • the Authorization callback URL (redirectURI) should point the now installed controlplane: ${scheme}://${externalHost}/dex/callback in the example this is https://banzai-cp.my-doma.in/dex/callback
  • a personal access token with scopes: repo, admin:repo_hook, user. This token is needed to call the GitHub API from the Pipeline, for example to scrape the Spotguide catalog.

Take note of the personal access token and OAuth clientID, clientSecret and fill them into the values.yaml file before running the installer banzai cp up:

Configuring the installer

After the GitHub setup is complete, create a file called values.yaml based on this example:

externalHost: banzai-cp.my-doma.in

scheme: https

traefik:
  ssl:
    generateTLS: true
    defaultCN: banzai-cp.my-doma.in
    enforced: true

cicd:
  externalURLInsecure: true
  github:
    enabled: true

pipeline:
  configuration:
    auth:
      dexInsecure: true
    github:
      token: "${token}"
    pipeline:
      externalURLInsecure: true
dex:
  config:
    connectors:
      publicGithub:
        type: github
        id: github
        name: GitHub
        config:
          clientID: "${clientID}"
          clientSecret: "${clientSecret}"
          redirectURI: https://banzai-cp.my-doma.in/dex/callback
          loadAllGroups: false
          orgs:
            - name: ${githubOrganization}

ui:
  featureSet:
    menuSpotguides: true
    menuCICD: true

Replace banzai-cp.my.doma.in with a DNS record that you have control over, and fill in the GitHub credentials created earlier.

Running the installer

Select the target Kubernetes cluster (called banzai-cp-k8s in this example):

kubectl config use-context banzai-cp-k8s

# or if you have it in a separate file
export KUBECONFIG=/Users/me/Downloads/banzai-cp-k8s.yaml

Now run the CLI tool to start the provisioning (this installs everything into the banzaicloud namespace):

banzai cp up

During the setup you will see a prompt asking you to setup the DNS entries for the control plane:

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Please create a DNS record with the following IP/host (A/CNAME):

  banzai-cp.my.doma.in -->> 52.155.186.149

  (Press enter when ready)

In this example we will setup this DNS entry on the AWS console:

DNS setup

After this, press enter in the console to continue. All the required changes that are going to be made to the cluster will be printed to the console. (The installer is using Terraform in the background, so the output might be familiar.) You still get a chance to review changes if necessary. When your have finished your review, please type yes in the console:

Plan: 20 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

The whole setup procedure takes several minutes, but this all depends on your cloud provider and Kubernetes cluster (network, type of machines, etc.). At the end you should see something very similar to the following message:

module.pipeline.helm_release.pipeline: Creation complete after 51s [id=pipeline]

Apply complete! Resources: 20 added, 0 changed, 0 destroyed.

Outputs:

controlplane-address = https://banzai-cp.my.doma.in/ui
dex-admin-password = dqzlHbb9K7pMzT9I
dex-admin-username = admin@example.com

Uninstall steps

Go into the same directory where you saved your values.yaml file and ran the installation procedure:

banzai cp down

All the resources that are going to be destroyed on the cluster will be printed (it is using Terraform in the background, so the output might be familiar), so you still have a final chance to review if necessary. When your have finished your review, please type yes to the console:

Plan: 0 to add, 0 to change, 22 to destroy.

Do you really want to destroy all resources?
  Terraform will destroy all your managed infrastructure, as shown above.
  There is no undo. Only 'yes' will be accepted to confirm.

  Enter a value: yes

At the end you should see something similar to the following message:

random_string.vault-db-password: Destruction complete after 0s

Destroy complete! Resources: 22 destroyed.

Now the cluster should be in its pre-installation state, the DNS entry has to be removed manually (because it was created manually).