From e0f26c05a562dc05479639d971f80ce8bf0a7115 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Gro=C3=9Fmann?= Date: Fri, 18 Jul 2025 01:00:01 +0200 Subject: [PATCH 1/6] Refactor Kubernetes manifests and workflows to enhance deployment process, improve labeling consistency, and streamline environment configurations --- .github/workflows/deploy.yml | 32 ++++++++++++++++++++++------ k8s/base/deployment.yml | 14 ++++++++---- k8s/base/ingress.yml | 11 ++++++---- k8s/base/kustomization.yml | 8 +++++-- k8s/base/service.yml | 14 ++++++++---- k8s/overlays/dev/kustomization.yml | 31 +++++++++++++++------------ k8s/overlays/dev/namespace.yml | 7 ++++++ k8s/overlays/main/kustomization.yml | 33 +++++++++++++++++------------ k8s/overlays/main/namespace.yml | 7 ++++++ 9 files changed, 110 insertions(+), 47 deletions(-) create mode 100644 k8s/overlays/dev/namespace.yml create mode 100644 k8s/overlays/main/namespace.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 454550e..4708e9a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -82,19 +82,37 @@ jobs: kubectl cluster-info - name: Deploy to Kubernetes + env: + BRANCH_NAME: ${{ github.ref_name }} + SHORT_SHA: ${{ github.sha }} run: | - if [ "${{ github.ref_name }}" = "main" ]; then + if [ "$BRANCH_NAME" = "main" ]; then OVERLAY=main - elif [ "${{ github.ref_name }}" = "dev" ]; then + IMAGE_TAG="main" + elif [ "$BRANCH_NAME" = "dev" ]; then OVERLAY=dev + IMAGE_TAG="dev" else echo "Branch is not main or dev, skipping deployment." exit 1 fi + cd k8s/overlays/$OVERLAY - if [ "$OVERLAY" = "main" ]; then - ENV_LABEL="main" - else - ENV_LABEL="dev" - fi + + # Create a temporary kustomization that uses the exact image from this build + cp kustomization.yml kustomization.yml.bak + + # Update the image tag to use the branch-specific tag + sed -i "s/newTag: .*/newTag: $IMAGE_TAG/" kustomization.yml + + echo "Deploying to $OVERLAY environment..." + echo "Using image tag: $IMAGE_TAG" + + # Build and apply kustomize build . | kubectl apply -f - + + # Verify deployment + kubectl rollout status deployment/$(kubectl get deployment -n wiki-$OVERLAY -o name | head -1 | cut -d'/' -f2) -n wiki-$OVERLAY --timeout=300s + + # Restore original kustomization + mv kustomization.yml.bak kustomization.yml diff --git a/k8s/base/deployment.yml b/k8s/base/deployment.yml index 46abe10..c3db236 100644 --- a/k8s/base/deployment.yml +++ b/k8s/base/deployment.yml @@ -2,18 +2,24 @@ apiVersion: apps/v1 kind: Deployment metadata: name: public-wiki + labels: + app.kubernetes.io/name: public-wiki + app.kubernetes.io/component: web spec: - replicas: 1 # default, will be overridden by overlays + replicas: 1 selector: matchLabels: - app: public-wiki + app.kubernetes.io/name: public-wiki + app.kubernetes.io/component: web template: metadata: labels: - app: public-wiki + app.kubernetes.io/name: public-wiki + app.kubernetes.io/component: web spec: containers: - name: public-wiki - image: ghcr.io/42core-team/wiki:dev # will be replaced by overlays + image: ghcr.io/42core-team/wiki:latest ports: - containerPort: 3000 + name: http diff --git a/k8s/base/ingress.yml b/k8s/base/ingress.yml index 6238aeb..6f038c7 100644 --- a/k8s/base/ingress.yml +++ b/k8s/base/ingress.yml @@ -2,6 +2,9 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: public-wiki-ingress + labels: + app.kubernetes.io/name: public-wiki + app.kubernetes.io/component: web annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" cert-manager.io/cluster-issuer: "letsencrypt-prod" @@ -9,10 +12,10 @@ spec: ingressClassName: nginx tls: - hosts: - - PLACEHOLDER_HOST # will be patched in overlays - secretName: PLACEHOLDER_TLS_SECRET # will be patched in overlays + - example.com + secretName: public-wiki-tls rules: - - host: PLACEHOLDER_HOST # will be patched in overlays + - host: example.com http: paths: - path: / @@ -21,4 +24,4 @@ spec: service: name: public-wiki port: - number: 80 + name: http diff --git a/k8s/base/kustomization.yml b/k8s/base/kustomization.yml index ab16a5d..cd3fd9e 100644 --- a/k8s/base/kustomization.yml +++ b/k8s/base/kustomization.yml @@ -1,7 +1,11 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + resources: - - namespace.yml - deployment.yml - service.yml - ingress.yml -namespace: wiki +labels: + - pairs: + app.kubernetes.io/part-of: public-wiki diff --git a/k8s/base/service.yml b/k8s/base/service.yml index e779618..4d8af9b 100644 --- a/k8s/base/service.yml +++ b/k8s/base/service.yml @@ -2,10 +2,16 @@ apiVersion: v1 kind: Service metadata: name: public-wiki + labels: + app.kubernetes.io/name: public-wiki + app.kubernetes.io/component: web spec: + type: ClusterIP selector: - app: public-wiki + app.kubernetes.io/name: public-wiki + app.kubernetes.io/component: web ports: - - protocol: TCP - port: 80 - targetPort: 3000 + - port: 80 + targetPort: http + protocol: TCP + name: http diff --git a/k8s/overlays/dev/kustomization.yml b/k8s/overlays/dev/kustomization.yml index 86a2a68..0fbbe07 100644 --- a/k8s/overlays/dev/kustomization.yml +++ b/k8s/overlays/dev/kustomization.yml @@ -1,24 +1,29 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: wiki-dev + namePrefix: dev- -namespace: wiki +nameSuffix: -dev + labels: - pairs: - app: public-wiki - env: dev + app.kubernetes.io/environment: dev + app.kubernetes.io/instance: dev resources: + - namespace.yml - ../../base +replicas: + - name: public-wiki + count: 1 + +images: + - name: ghcr.io/42core-team/wiki + newTag: dev + patches: - - target: - kind: Deployment - name: public-wiki - patch: |- - - op: replace - path: /spec/replicas - value: 1 - - op: replace - path: /spec/template/spec/containers/0/image - value: ghcr.io/42core-team/wiki:dev - target: kind: Ingress name: public-wiki-ingress diff --git a/k8s/overlays/dev/namespace.yml b/k8s/overlays/dev/namespace.yml new file mode 100644 index 0000000..b65618b --- /dev/null +++ b/k8s/overlays/dev/namespace.yml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: wiki-dev + labels: + app.kubernetes.io/name: public-wiki + app.kubernetes.io/environment: dev diff --git a/k8s/overlays/main/kustomization.yml b/k8s/overlays/main/kustomization.yml index e6d595e..c114247 100644 --- a/k8s/overlays/main/kustomization.yml +++ b/k8s/overlays/main/kustomization.yml @@ -1,22 +1,29 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization + +namespace: wiki-main + namePrefix: main- -namespace: wiki +nameSuffix: -main + labels: - pairs: - app: public-wiki - env: main + app.kubernetes.io/environment: main + app.kubernetes.io/instance: main + resources: + - namespace.yml - ../../base + +replicas: + - name: public-wiki + count: 3 + +images: + - name: ghcr.io/42core-team/wiki + newTag: main + patches: - - target: - kind: Deployment - name: public-wiki - patch: |- - - op: replace - path: /spec/replicas - value: 3 - - op: replace - path: /spec/template/spec/containers/0/image - value: ghcr.io/42core-team/wiki:main - target: kind: Ingress name: public-wiki-ingress diff --git a/k8s/overlays/main/namespace.yml b/k8s/overlays/main/namespace.yml new file mode 100644 index 0000000..30c2268 --- /dev/null +++ b/k8s/overlays/main/namespace.yml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: wiki-main + labels: + app.kubernetes.io/name: public-wiki + app.kubernetes.io/environment: main From e025acd484637e63a9ae15a73938d175c327e138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Gro=C3=9Fmann?= Date: Fri, 18 Jul 2025 01:02:24 +0200 Subject: [PATCH 2/6] Refactor deployment workflow to specify multiple runner architectures for build and deploy jobs --- .github/workflows/deploy.yml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4708e9a..c60a099 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,7 +11,9 @@ env: jobs: build-and-push: - runs-on: self-hosted + runs-on: + - self-hosted + - x64 permissions: contents: read packages: write @@ -51,7 +53,9 @@ jobs: tags: ${{ steps.docker_tags.outputs.tags }} deploy: - runs-on: ubuntu-latest + runs-on: + - ubuntu-latest + - x64 needs: build-and-push steps: From 8b8819508eb3eb28bc078d7f19469eefb180719b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Gro=C3=9Fmann?= Date: Fri, 18 Jul 2025 01:03:33 +0200 Subject: [PATCH 3/6] Change deployment runner to self-hosted for improved consistency in build environment --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c60a099..bf2953a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -54,7 +54,7 @@ jobs: deploy: runs-on: - - ubuntu-latest + - self-hosted - x64 needs: build-and-push From 9451b55bfe2e88301bad15c8f529bf1ddfa7454c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Gro=C3=9Fmann?= Date: Fri, 18 Jul 2025 01:06:00 +0200 Subject: [PATCH 4/6] Add setup steps for kubectl and kustomize in deployment workflow --- .github/workflows/deploy.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index bf2953a..c147c9e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -62,6 +62,16 @@ jobs: - name: Checkout repository uses: actions/checkout@v3 + - name: Set up kubectl + uses: azure/setup-kubectl@v3 + with: + version: 'latest' + + - name: Set up kustomize + uses: imranismail/setup-kustomize@v2 + with: + kustomize-version: 'latest' + - name: Set up Kubeconfig env: KUBECONFIG_DATA: ${{ secrets.KUBE_CONFIG_DATA }} From c542e481d07d603433e355b63f025748a1702eea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Gro=C3=9Fmann?= Date: Fri, 18 Jul 2025 01:07:27 +0200 Subject: [PATCH 5/6] Update kustomize version to 5.0.0 in deployment workflow --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c147c9e..742fa9e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -70,7 +70,7 @@ jobs: - name: Set up kustomize uses: imranismail/setup-kustomize@v2 with: - kustomize-version: 'latest' + kustomize-version: '5.0.0' - name: Set up Kubeconfig env: From 3d40dedc8a0e7d23d59b0024a725e5afe0c9213b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20Gro=C3=9Fmann?= Date: Fri, 18 Jul 2025 01:09:59 +0200 Subject: [PATCH 6/6] Remove x64 architecture specification from deploy job in workflow --- .github/workflows/deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 742fa9e..aa349c5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -55,7 +55,6 @@ jobs: deploy: runs-on: - self-hosted - - x64 needs: build-and-push steps: