# Local development with Kubernetes We use tilt to provide a local development environment for Kubernetes. Tilt is a tool that helps you develop applications for Kubernetes. It watches your files for changes, rebuilds your containers, and restarts your pods. It's like having a conversation with your cluster. ## Prerequisites This guide assumes you have the following tools installed: - [Docker](https://docs.docker.com/get-docker/) - [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) - [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/) * [mkcert](https://github.com/FiloSottile/mkcert) - [ctlptl](https://github.com/tilt-dev/ctlptl) - [Tilt](https://docs.tilt.dev/install.html) * [helm](https://helm.sh/docs/intro/install/) * [helmfile](https://github.com/helmfile/helmfile) * [secrets](https://github.com/jkroepke/helm-secrets/wiki/Installation) * [sops](https://github.com/getsops/sops) ### SOPS configuration **Generate a SOPS key** For this specific step you need to have the `age-keygen` tool installed. See https://github.com/FiloSottile/age. Then generate a key: ```bash age-keygen -o my-age.key ``` **Install the SOPS key** Read the SOPS documentation on how to install the key in your environment. https://github.com/getsops/sops?tab=readme-ov-file#22encrypting-using-age On Ubuntu it's like: ```bash mkdir -p ~/.config/sops/age/ cp my-age.key ~/.config/sops/age/keys.txt chmod 400 ~/.config/sops/age/keys.txt ``` **Add the SOPS key to the repository** Update the [.sops.yaml](../.sops.yaml) file with the **public** key id you generated. ### Helmfile in Docker If you use helmfile in Docker, you may need an additional configuration to make it work with you age key. You need to mount `-v "${HOME}/.config/sops/age/:/helm/.config/sops/age/"` ```bash #!/bin/sh docker run --rm --net=host \ -v "${HOME}/.kube:/root/.kube" \ -v "${HOME}/.config/helm:/root/.config/helm" \ -v "${HOME}/.config/sops/age/:/helm/.config/sops/age/" \ -v "${HOME}/.minikube:/${HOME}/.minikube" \ -v "${PWD}:/wd" \ -e KUBECONFIG=/root/.kube/config \ --workdir /wd ghcr.io/helmfile/helmfile:v0.150.0 helmfile "$@" ``` ## Getting started ### Create the kubernetes cluster Run the following command to create a kubernetes cluster using kind: ```bash ./bin/start-kind.sh ``` **or** run the equivalent using the makefile ```bash make start-kind ``` ### Deploy the application ```bash # Pro Connect environment tilt up -f ./bin/Tiltfile # Standalone environment with keycloak DEV_ENV=dev-keycloak tilt up -f ./bin/Tiltfile ``` **or** run the equivalent using the makefile ```bash make tilt-up ``` That's it! You should now have a local development environment for Kubernetes. You can access the application at https://desk.127.0.0.1.nip.io ## Management To manage the cluster, you can use k9s. ## Next steps - Add dimail to the local development environment - Add a reset demo `cmd_button` to Tilt