@dictcp (https://dictcp.men)
Session at HKOSCon 2020: https://hkoscon.org/2020/topics/automating-kubernetes-gitops
Slide: https://docs.google.com/presentation/d/1rA6bhCGMydP-NOmFu7fv0zbBSzGvK9GLn63H8dHLP2g
- Hands-on Preparation
- Install k3s Kubernetes on your VM
- Install Helm & fluxctl
- [Prepare the git repository for GitOps](#Prepare the git repository for GitOps)
- Install fluxcd
- fluxcd playaround
- Install Helm operator
- Helm operator playaround
You need
- a GitHub account (to access this material and setup gitops flow)
- a working Kubernetes in the hands-on session (to s)
- multipass VM (local installation, recommended)
- [DigitalOcean VM] (remote installation)
- Install multipass on https://multipass.run
- support Windows 10 Pro+, Mac OS X, Linux
- Mac OS X (with homebrew installed):
brew cask install multipass - Ubuntu (or any Linux distro with snap installed):
sudo snap install multipass --classic
- Start Command prompt / Terminal
- Execute
multipass launch -d 30G -m 2G --name fluxcd-workshop 18.04 - Depends on network condition, you need to wait for 5-20 mins.
- Execute
multipass shell fluxcd-workshopto obtain shell in the VMs
- Execute
curl -sfL https://get.k3s.io | sh -in the VM - Depends on network condition, you need to wait for 5-10 mins.
- You should have your local Kubernetes cluster installed. To verify, execute
sudo -i k3s kubectl get nodes, it should give you something like
NAME STATUS ROLES AGE VERSION
fluxcd-workshop Ready master 5m53s v1.18.3+k3s1`
- Make sure the cluster setup is avaiable by the following commands:
$ mkdir .kube
$ sudo cat /etc/rancher/k3s/k3s.yaml > .kube/config
Normally you can install helm and fluxctl with the following 2 commands:
sudo snap install kubectl --classic
sudo snap install helm --classic --channel=3.0/stable
sudo snap install fluxctl --classic
- Helm
$ curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3
$ chmod 700 get_helm.sh
$ ./get_helm.sh
$ helm version
version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}
- fluxctl
wget -O fluxctl https://github.com/fluxcd/flux/releases/download/1.19.0/fluxctl_linux_amd64
chmod +x fluxctl
sudo mv fluxctl /usr/local/bin/
- Fork https://github.com/dictcp/flux-get-started in GitHub to your own account
-
Setup the chart repository for flux helm repo add fluxcd https://charts.fluxcd.io
-
Install flux on Kubernetes cluster via Helm, with following commands
$ export GHUSER="dictcp"
$ kubectl create ns flux
$ helm upgrade -i flux fluxcd/flux \
--git-path=namespaces,workloads \
--namespace flux \
--set git.url=git@github.com:${GHUSER}/stackfiles
- Copy the public SSH key
fluxctl identity --k8s-fwd-ns flux
-
Setup in GitHub
-
Trigger
fluxctl sync --k8s-fwd-ns flux
- View the applied change
kubectl get
- Install the CRD for HelmRelease
kubectl apply -f https://raw.githubusercontent.com/fluxcd/helm-operator/1.1.0/deploy/crds.yaml
- Install Helm Operator via Helm
helm upgrade -i helm-operator fluxcd/helm-operator \
--set git.ssh.secretName=flux-git-deploy \
--set helm.versions=v3 \
--namespace flux