From 6239bc017af13b3eb35d05846a41fb7a3a3392a2 Mon Sep 17 00:00:00 2001 From: Arthur Silva Sens <arthursens2005@gmail.com> Date: Thu, 30 Sep 2021 20:53:15 +0000 Subject: [PATCH] Better ephemeral workspace support with Codespaces Signed-off-by: GitHub <noreply@github.com> --- .gitignore | 3 +- .gitpod.yml | 8 ++--- Makefile | 5 ++++ developer-workspace/README.md | 29 +++++++++++++++++++ .../codespaces/prepare-kind.sh | 20 +++++++++++++ .../common}/deploy-kube-prometheus.sh | 4 +++ .../gitpod}/prepare-k3s.sh | 0 .../gitpod}/prepare-rootfs.sh | 0 .../gitpod}/qemu.sh | 0 .../gitpod}/scp.sh | 0 .../gitpod}/ssh.sh | 0 11 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 developer-workspace/README.md create mode 100755 developer-workspace/codespaces/prepare-kind.sh rename {.gitpod => developer-workspace/common}/deploy-kube-prometheus.sh (91%) rename {.gitpod => developer-workspace/gitpod}/prepare-k3s.sh (100%) rename {.gitpod => developer-workspace/gitpod}/prepare-rootfs.sh (100%) rename {.gitpod => developer-workspace/gitpod}/qemu.sh (100%) rename {.gitpod => developer-workspace/gitpod}/scp.sh (100%) rename {.gitpod => developer-workspace/gitpod}/ssh.sh (100%) diff --git a/.gitignore b/.gitignore index a82ceced..cf9dc350 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ vendor/ .swp crdschemas/ -.gitpod/_output/ \ No newline at end of file +developer-workspace/gitpod/_output +kind \ No newline at end of file diff --git a/.gitpod.yml b/.gitpod.yml index e8c0760f..47ce355e 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -24,17 +24,17 @@ tasks: chmod +x ${PWD}/.git/hooks/pre-commit - name: run kube-prometheus command: | - .gitpod/prepare-k3s.sh - .gitpod/deploy-kube-prometheus.sh + developer-workspace/gitpod/prepare-k3s.sh + developer-workspace/common/deploy-kube-prometheus.sh - name: kernel dev environment init: | sudo apt update -y sudo apt install qemu qemu-system-x86 linux-image-$(uname -r) libguestfs-tools sshpass netcat -y sudo curl -o /usr/bin/kubectl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" sudo chmod +x /usr/bin/kubectl - .gitpod/prepare-rootfs.sh + developer-workspace/gitpod/prepare-rootfs.sh command: | - .gitpod/qemu.sh + developer-workspace/gitpod/qemu.sh ports: - port: 3000 onOpen: open-browser diff --git a/Makefile b/Makefile index e2c265cd..c1006677 100644 --- a/Makefile +++ b/Makefile @@ -78,3 +78,8 @@ $(BIN_DIR): $(TOOLING): $(BIN_DIR) @echo Installing tools from scripts/tools.go @cd scripts && cat tools.go | grep _ | awk -F'"' '{print $$2}' | xargs -tI % go build -modfile=go.mod -o $(BIN_DIR) % + +.PHONY: deploy +deploy: + ./developer-workspace/codespaces/prepare-kind.sh + ./developer-workspace/common/deploy-kube-prometheus.sh diff --git a/developer-workspace/README.md b/developer-workspace/README.md new file mode 100644 index 00000000..60dbb210 --- /dev/null +++ b/developer-workspace/README.md @@ -0,0 +1,29 @@ +# Ephemeral developer workspaces + +Aiming to provide better developer experience when making contributions to kube-prometheus, whether by actively developing new features/bug fixes or by reviewing pull requests, we want to provide ephemeral developer workspaces with everything already configured (as far as tooling makes it possible). + +Those developer workspaces should provide a brand new kubernetes cluster, where kube-prometheus can be easily deployed and the contributor can easily see the impact that a pull request is proposing. + +Today there is 2 providers in the market: +* [Github Codespaces](https://github.com/features/codespaces) +* [Gitpod](https://www.gitpod.io/) + +## Codespaces + +Unfortunately, Codespaces is not available for everyone. If you are fortunate to have access to it, you can open a new workspace from a specific branch, or even from Pull Requests. + + + + + +After your workspace start, you can deploy a kube-prometheus inside a Kind cluster inside by running `make deploy`. + +If you are reviewing a PR, you'll have a fully-functional kubernetes cluster, generating real monitoring data that can be used to review if the proposed changes works as described. + +If you are working on new features/bug fixes, you can regenerate kube-prometheus's YAML manifests with `make generate` and deploy it again with `make deploy`. + +## Gitpod + +Gitpod is already available to everyone to use for free. It can also run commands that we speficy in the `.gitpod.yml` file located in the root directory of the git repository, so even the cluster creation can be fully automated. + +You can use the same workflow as mentioned in the [Codespaces](#Codespaces) section, however Gitpod doesn't have native support for any kubernetes distribution. The workaround is to create a full QEMU Virtual Machine and deploy [k3s](https://github.com/k3s-io/k3s) inside this VM. Don't worry, this whole process is already fully automated, but due to the workaround the whole workspace may be very slow. diff --git a/developer-workspace/codespaces/prepare-kind.sh b/developer-workspace/codespaces/prepare-kind.sh new file mode 100755 index 00000000..21bbf5af --- /dev/null +++ b/developer-workspace/codespaces/prepare-kind.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +which kind +if [[ $? != 0 ]]; then + echo 'kind not available in $PATH, installing latest kind' + # Install latest kind + curl -s https://api.github.com/repos/kubernetes-sigs/kind/releases/latest \ + | grep "browser_download_url.*kind-linux-amd64" \ + | cut -d : -f 2,3 \ + | tr -d \" \ + | wget -qi - + mv kind-linux-amd64 kind && chmod +x kind +fi + +cluster_created=$($PWD/kind get clusters 2>&1) +if [[ "$cluster_created" == "No kind clusters found." ]]; then + $PWD/kind create cluster +else + echo "Cluster '$cluster_created' already present" +fi \ No newline at end of file diff --git a/.gitpod/deploy-kube-prometheus.sh b/developer-workspace/common/deploy-kube-prometheus.sh similarity index 91% rename from .gitpod/deploy-kube-prometheus.sh rename to developer-workspace/common/deploy-kube-prometheus.sh index fdd9c1d2..6dc6daf7 100755 --- a/.gitpod/deploy-kube-prometheus.sh +++ b/developer-workspace/common/deploy-kube-prometheus.sh @@ -1,9 +1,13 @@ +#!/bin/bash + kubectl apply -f manifests/setup # Safety wait for CRDs to be working sleep 30 kubectl apply -f manifests/ +sleep 30 +# Safety wait for resources to be created kubectl rollout status -n monitoring daemonset node-exporter kubectl rollout status -n monitoring statefulset alertmanager-main diff --git a/.gitpod/prepare-k3s.sh b/developer-workspace/gitpod/prepare-k3s.sh similarity index 100% rename from .gitpod/prepare-k3s.sh rename to developer-workspace/gitpod/prepare-k3s.sh diff --git a/.gitpod/prepare-rootfs.sh b/developer-workspace/gitpod/prepare-rootfs.sh similarity index 100% rename from .gitpod/prepare-rootfs.sh rename to developer-workspace/gitpod/prepare-rootfs.sh diff --git a/.gitpod/qemu.sh b/developer-workspace/gitpod/qemu.sh similarity index 100% rename from .gitpod/qemu.sh rename to developer-workspace/gitpod/qemu.sh diff --git a/.gitpod/scp.sh b/developer-workspace/gitpod/scp.sh similarity index 100% rename from .gitpod/scp.sh rename to developer-workspace/gitpod/scp.sh diff --git a/.gitpod/ssh.sh b/developer-workspace/gitpod/ssh.sh similarity index 100% rename from .gitpod/ssh.sh rename to developer-workspace/gitpod/ssh.sh -- GitLab