Overview
Quickstart
Development Setup
Build and Deploy Locally
Testing
Get Help & Community
More Information/Related
This charm is a demonstration of a charm implemeting the sidecar pattern used during Operator Day 2021. You can grab the slides from the demo here.
The charm is written using the Charmed Operator Framework. It deploys gosherve, relying upon the charm container to populate a shared volume with a simple landing-page style website and configure the app before it is started.
Slides for the demo are available and there is a supporting Github Gist that contains copy-and- pastable content from the slide deck.
The finished charm is published on Charmhub.
The charm will:
- Deploy a container running gosherve
- Fetch a website from Github
- Place the downloaded file in a storage volume
- Expose a
redirect-map
config item to configure gosherve redirects - Expose a
pull-site
action to pull the latest version of the test site - Utilise an ingress relation using the
nginx-ingress-integrator
library
Each branch of this repository represents a different stage from the demonstration:
Assuming you already have Juju installed and bootstrapped on a cluster (if you do not, see the next section):
# Deploy the charm
$ juju deploy hello-kubecon
# Deploy the ingress integrator
$ juju deploy nginx-ingress-integrator
# Relate our app to the ingress
$ juju relate hello-kubecon nginx-ingress-integrator
# Set the ingress class
$ juju config nginx-ingress-integrator ingress-class="public"
# Add an entry to /etc/hosts
$ echo "127.0.1.1 hellokubecon.juju" | sudo tee -a /etc/hosts
# Wait for the deployment to complete
$ watch -n1 --color juju status --color
You should be able to visit http://hellokubecon.juju in your browser.
To set up a local test environment with MicroK8s:
# Install MicroK8s
$ sudo snap install --classic microk8s
# Wait for MicroK8s to be ready
$ sudo microk8s status --wait-ready
# Enable features required by Juju controller & charm
$ sudo microk8s enable storage dns ingress
# (Optional) Alias kubectl bundled with MicroK8s package
$ sudo snap alias microk8s.kubectl kubectl
# (Optional) Add current user to 'microk8s' group
# This avoid needing to use 'sudo' with the 'microk8s' command
$ sudo usermod -aG microk8s $(whoami)
# Activate the new group (in the current shell only)
# Log out and log back in to make the change system-wide
$ newgrp microk8s
# Install Charmcraft
$ sudo snap install charmcraft
# Install juju
$ sudo snap install --classic juju
# Bootstrap the Juju controller on MicroK8s
$ juju bootstrap microk8s micro
# Add a new model to Juju
$ juju add-model development
# Clone the charm code
$ git clone https://github.com/jnsgruk/hello-kubecon && cd hello-kubecon
# Build the charm package
$ charmcraft pack
# Deploy!
$ juju deploy ./hello-kubecon.charm --resource gosherve-image=jnsgruk/gosherve:latest
# Deploy the ingress integrator
$ juju deploy nginx-ingress-integrator
# Relate our app to the ingress
$ juju relate hello-kubecon nginx-ingress-integrator
# Set the ingress class
$ juju config nginx-ingress-integrator ingress-class="public"
# Add an entry to /etc/hosts
$ echo "127.0.1.1 hellokubecon.juju" | sudo tee -a /etc/hosts
# Wait for the deployment to complete
$ watch -n1 --color juju status --color
You should be able to visit http://hellokubecon.juju in your browser.
# Clone the charm code
$ git clone https://github.com/jnsgruk/hello-kubecon && cd hello-kubecon
# Install python3-virtualenv
$ sudo apt update && sudo apt install -y python3-virtualenv
# Create a virtualenv for the charm code
$ virtualenv venv
# Activate the venv
$ source ./venv/bin/activate
# Install dependencies
$ pip install -r requirements-dev.txt
# Run the tests
$ ./run_tests
If you get stuck deploying this charm, or would like help with charming generally, come and join the charming community!
Below are some links related to this demonstration: