# Automating Kubernetes with GitOps Workshop @dictcp (https://dictcp.men) ## About the workshop Session at HKOSCon 2020: https://hkoscon.org/2020/topics/automating-kubernetes-gitops Slide: https://docs.google.com/presentation/d/1rA6bhCGMydP-NOmFu7fv0zbBSzGvK9GLn63H8dHLP2g ## Context - [Hands-on Preparation](#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](#Install_fluxcd) - [fluxcd playaround](#fluxcd_playaround) - [Install Helm operator](#Install_Helm_operator) - [Helm operator playaround](#Helm_operator_playaround) ## Hands-on Preparation 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-multipass-VM) (local installation, recommended) - [DigitalOcean VM] (remote installation) ### multipass VM 1. 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` 2. Start Command prompt / Terminal 3. Execute `multipass launch -d 30G -m 2G --name fluxcd-workshop 18.04` 4. Depends on network condition, you need to wait for 5-20 mins. 5. Execute `multipass shell fluxcd-workshop` to obtain shell in the VMs ### DigitalOcean VM ## Install k3s Kubernetes on your VM 1. 2. Execute `curl -sfL https://get.k3s.io | sh -` in the VM 3. Depends on network condition, you need to wait for 5-10 mins. 4. 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` ``` 5. Make sure the cluster setup is avaiable by the following commands: ``` $ mkdir .kube $ sudo cat /etc/rancher/k3s/k3s.yaml > .kube/config ``` ## Install Helm & fluxctl 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 ``` ### Manual steps (if the above does not work) - 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/ ``` ## Prepare the git repository for GitOps 1. Fork https://github.com/dictcp/flux-get-started in GitHub to your own account ## Install fluxcd 1. Setup the chart repository for flux helm repo add fluxcd https://charts.fluxcd.io 2. 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 ``` 3. Copy the public SSH key ``` fluxctl identity --k8s-fwd-ns flux ``` 4. Setup in GitHub 5. Trigger ``` fluxctl sync --k8s-fwd-ns flux ``` 6. View the applied change ``` kubectl get ``` ## fluxcd playaround ## Install Helm operator 1. Install the CRD for HelmRelease ``` kubectl apply -f https://raw.githubusercontent.com/fluxcd/helm-operator/1.1.0/deploy/crds.yaml ``` 2. 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 ``` ## Helm operator playaround