From 6bf14043bbde60be9a12676bf1f41202bf368d95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vorburger=20=E2=9B=91=EF=B8=8F?= Date: Sat, 20 Nov 2021 19:16:56 +0100 Subject: [PATCH] add support for developing in-cluster with Skaffold (#27) --- README.md | 13 +++++++++++++ docs/k8s-deployment.yaml | 35 +++++++++++++++++++++++++++++++++++ skaffold.yaml | 14 ++++++++++++++ 3 files changed, 62 insertions(+) create mode 100644 docs/k8s-deployment.yaml create mode 100644 skaffold.yaml diff --git a/README.md b/README.md index 738882e..bba1af2 100644 --- a/README.md +++ b/README.md @@ -161,6 +161,19 @@ docker run -it --rm \ go build ./cmd/mc-router ``` +## Skaffold + +For "in-cluster development" it's convenient to use https://skaffold.dev. Any changes to Go source code +will trigger a go build, new container image pushed to registry with a new tag, and refresh in Kubernetes +with the image tag used in the deployment transparently updated to the new tag and thus new pod created pulling new images: + + skaffold dev + +When using Google Cloud (GCP), first create a _Docker Artifact Registry_, +then add the _Artifact Registry Reader_ Role to the _Compute Engine default service account_ of your GKE clusterService Account_ (to avoid error like "container mc-router is waiting to start: ...-docker.pkg.dev/... can't be pulled"), +then use e.g. `gcloud auth configure-docker europe-docker.pkg.dev` or equivalent one time (to create a `~/.docker/config.json`), +and then use e.g. `--default-repo=europe-docker.pkg.dev/YOUR-PROJECT/YOUR-ARTIFACT-REGISTRY` option for `skaffold dev`. + ## Performing snapshot release with Docker ```bash diff --git a/docs/k8s-deployment.yaml b/docs/k8s-deployment.yaml new file mode 100644 index 0000000..8237631 --- /dev/null +++ b/docs/k8s-deployment.yaml @@ -0,0 +1,35 @@ +# used by ../skaffold.yaml +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + run: mc-router + name: mc-router +spec: + selector: + matchLabels: + run: mc-router + strategy: + type: Recreate + template: + metadata: + labels: + run: mc-router + spec: + serviceAccountName: mc-router + containers: + - image: itzg/mc-router:latest + name: mc-router + args: ["--api-binding", ":8080", "--in-kube-cluster"] + ports: + - name: proxy + containerPort: 25565 + - name: web + containerPort: 8080 + resources: + requests: + memory: 50Mi + cpu: "100m" + limits: + memory: 100Mi + cpu: "250m" diff --git a/skaffold.yaml b/skaffold.yaml new file mode 100644 index 0000000..1dd0b67 --- /dev/null +++ b/skaffold.yaml @@ -0,0 +1,14 @@ +apiVersion: skaffold/v2beta26 +kind: Config +metadata: + name: mc-router +build: + artifacts: + - image: itzg/mc-router + # https://skaffold.dev/docs/pipeline-stages/builders/ko/ + ko: + main: ./cmd/mc-router/ +deploy: + kubectl: + manifests: + - docs/k8s-deployment.yaml