In order to install the workshop prerequisites you'll need a Kubernetes cluster 1.13 or newer with Load Balancer support and RBAC enabled. Make sure you have the following tools installed locally:

  • kubectl 1.16
  • git 2.20

Helm v3

Download the Helm v3 CLI:

OS=darwin-amd64 && \
mkdir -p $HOME/.helm3/bin && \
curl -sSL "${OS}.tar.gz" | tar xvz && \
chmod +x ${OS}/helm && mv ${OS}/helm $HOME/.helm3/bin/helmv3

Add the helmv3 binary to your path and set Helm home:

export PATH=$PATH:$HOME/.helm3/bin
export HELM_HOME=$HOME/.helm3

Verify the installation with:

helmv3 version


Fork the workshop repository and clone it locally (replace the GHUSER value with your GitHub username):

export GHUSER=stefanprodan
git clone${GHUSER}/gitops-helm-workshop

Set your GitHub username and email:

cd gitops-helm-workshop
git config "${GHUSER}"
git config "your@main.address"

Cluster state directory structure:

├── cluster
    ├── canaries
    ├── charts
    │   └── podinfo
    ├── namespaces
    └── releases


Add FluxCD repository to Helm repos:

helmv3 repo add fluxcd

Create the fluxcd namespace:

kubectl create ns fluxcd

Install Flux by providing your GitHub repository URL:

helmv3 upgrade -i flux fluxcd/flux --wait \
--namespace fluxcd \
--set registry.pollInterval=1m \
--set git.pollInterval=1m \

Install fluxctl:

# macOS and linux
curl -sL | sh
export PATH=$PATH:$HOME/.fluxcd/bin

# windows

Find the Git SSH public key:


fluxctl identity

Copy the public key and create a deploy key with write access on your GitHub repository. Go to Settings > Deploy keys click on Add deploy key, check Allow write access, paste the Flux public key and click Add key.

Helm Operator

Install the HelmRelease CRD:

kubectl apply -f

Install Flux Helm Operator in the fluxcd namespace:

helmv3 upgrade -i helm-operator fluxcd/helm-operator --wait \
--namespace fluxcd \
--set git.ssh.secretName=flux-git-deploy \
--set git.pollInterval=1m \
--set chartsSyncInterval=1m \
--set configureRepositories.enable=true \
--set configureRepositories.repositories[0].name=stable \
--set configureRepositories.repositories[0].url= \
--set extraEnvs[0].name=HELM_VERSION \
--set extraEnvs[0].value=v3 \
--set \
--set image.tag=helm-v3-dev-0b11d9d0


Download the Linkerd v2 CLI:

# macOS and linux
curl -sL | sh
export PATH=$PATH:$HOME/.linkerd2/bin

# windows

Install the Linkerd control plane in the linkerd namespace:

linkerd install | kubectl apply -f -

Validate the install with:

linkerd check


Add Flagger Helm repository:

helmv3 repo add flagger

Install Flagger's Canary CRD:

kubectl apply -f

Install Flagger in the linkerd namespace:

helmv3 upgrade -i flagger flagger/flagger --wait \
--namespace linkerd \
--set crd.create=false \
--set metricsServer=http://linkerd-prometheus:9090 \
--set meshProvider=linkerd