Skip to content

Instantly share code, notes, and snippets.

@rafi
Last active March 18, 2023 08:02
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rafi/d4440661e7de208009701ca3627caa1d to your computer and use it in GitHub Desktop.
Save rafi/d4440661e7de208009701ca3627caa1d to your computer and use it in GitHub Desktop.
Rancher on k3s with k3d Workshop

Rancher Workshop

Prerequisites

  1. Docker
  2. kubectl
  3. Helm 2 (You can use Helm 3 too)
  4. K3D ≥ 3.0.0
  5. ngrok

For example, with macOS and Homebrew:

# Install tools
brew cask install docker
brew install k3d kubernetes-cli helm@2 ngrok

# You have to add helm@2 to PATH, or symlink helm@2, for example:
ln -s /usr/local/opt/helm@2/bin/helm /usr/local/bin/helm2

For other platforms, see https://github.com/rancher/k3d

Ensure you install version ≥ 3.0.0 of K3D.

Install

Step 0: Create Temporary Domain

We will use ngrok to create a temporary domain to proxy to our port 443:

ngrok http https://localhost

Copy/paste the temporary domain, e.g. a1b2c3d4e5f6.ngrok.io

Don't close this terminal! Once you quit ngrok, the temporary domain is purged.

Step 1: Install Kubernetes

We'll use k3d to create a quick Kubernetes installation.

k3d cluster create rancher \
  --k3s-server-arg "--no-deploy=traefik" \
  --api-port 6550 --servers 1 --agents 1 \
  --port 80:80@loadbalancer --port 443:443@loadbalancer \
  --wait

kubectl cluster-info

kubectl get node          # or kubectl get no
kubectl get storageclass  # or kubectl get sc
kubectl get namespace     # or kubectl get ns
kubectl get pod -A
kubectl get svc -A

Step 2: Install Helm 2 Tiller (Skip for Helm 3)

Let's install Helm 2 tiller.

kubectl -n kube-system create serviceaccount tiller

kubectl create clusterrolebinding tiller \
  --clusterrole=cluster-admin \
  --serviceaccount=kube-system:tiller

helm2 init --service-account=tiller

# Wait for tiller to be ready
kubectl -n kube-system rollout status deploy/tiller-deploy

# You can also watch pods state changes
kubectl get po -n kube-system -w

helm2 version

Step 3: Install Nginx-Ingress

Instead of Traefik, let's use nginx-ingress controller.

helm2 repo update
helm2 install --name nginx-ingress stable/nginx-ingress \
  --version 1.33.0 --set-string controller.config.ssl-redirect=false

# Wait for nginx-ingress to be ready
kubectl rollout status deploy/nginx-ingress-controller

# This should respond with 404 from default backend!
curl http://localhost

If our nginx-ingress controller is working correctly, you should see a 404 not found message, because we haven't installed anything.

Step 4: Install cert-manager

We'll need to install cert-manager for our Rancher installation.

helm2 repo add jetstack https://charts.jetstack.io
helm2 repo update
kubectl create namespace cert-manager
kubectl label namespace cert-manager certmanager.k8s.io/disable-validation=true
kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.2/cert-manager.crds.yaml
helm2 install \
  --name cert-manager \
  --namespace cert-manager \
  --version v0.15.2 \
  jetstack/cert-manager

Step 5: Install Rancher

Finally, let's install latest rancher. Don't forget to change MYDOMAIN!

helm2 repo add rancher-latest https://releases.rancher.com/server-charts/latest
helm2 repo update

# Change this to your domain from the ngrok tool
export MYDOMAIN=a1b2c3d4e5f6.ngrok.io

kubectl create namespace cattle-system
helm2 install --name rancher rancher-latest/rancher \
  --namespace cattle-system \
  --set hostname="$MYDOMAIN" \
  --set replicas=1 \
  --wait

# Wait for rancher to start
kubectl -n cattle-system rollout status deploy/rancher

Step 6: Login to Rancher

That's it, open up a browser and start exploring Rancher.

open https://$MYDOMAIN/

The End

Thanks for participating!

@felipemeamaral
Copy link

In the cluster setup these parameter changed quite a bit to make the command like this:

k3d cluster create rancher \
  --k3s-arg "--no-deploy=traefik@server:*" \
  --api-port 6550 --servers 1 --agents 1 \
  --port 80:80@loadbalancer --port 443:443@loadbalancer \
  --wait

@eu10
Copy link

eu10 commented Mar 18, 2023

k3d cluster create rancher
--k3s-arg "--disable=traefik@server:*"
--api-port 6550 --servers 1 --agents 1
--port 80:80@loadbalancer --port 443:443@loadbalancer
--wait

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment