From 52a008a2742eb8bab46d482b92263d3d902106e2 Mon Sep 17 00:00:00 2001 From: Pavel Kirilin Date: Thu, 24 Jul 2025 22:57:37 +0200 Subject: [PATCH] Added kubernetes post. --- .gitea/workflows/release.yaml | 61 +++++++ config.toml | 1 + content/posts/kube-intro/imgs/reqs.gif | Bin 0 -> 90896 bytes content/posts/kube-intro/index.md | 226 ++++++++++++++++++++++++- values.yaml | 22 +++ 5 files changed, 304 insertions(+), 6 deletions(-) create mode 100644 .gitea/workflows/release.yaml create mode 100644 content/posts/kube-intro/imgs/reqs.gif create mode 100644 values.yaml diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..6710855 --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,61 @@ +name: "Release" + +on: + push: + tags: ["*"] + +env: + DEPLOY_RELEASE_NAME: "blog" + DEPLOY_IMAGE_URL: "gitea.le-memese.com/s3rius/blog" + DEPLOY_NAMESPACE: "s3rius" + +jobs: + docker_build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + registry: gitea.le-memese.com + username: ${{ gitea.actor }} + password: ${{ secrets.PACKAGE_PAT }} + - name: Build and push + uses: docker/build-push-action@v6 + with: + context: . + push: true + file: ./Dockerfile + platforms: linux/amd64 + tags: | + ${{ env.DEPLOY_IMAGE_URL }}:latest + ${{ env.DEPLOY_IMAGE_URL }}:${{ gitea.ref_name }} + deploy_helm: + runs-on: ubuntu-latest + needs: docker_build + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup helm + uses: azure/setup-helm@v4.3.0 + - name: Deploy + run: | + echo "${{secrets.KUBE_CONFIG}}" > /tmp/kubeconfig + helm upgrade \ + "${{ env.DEPLOY_RELEASE_NAME }}" \ + 'oci://gitea.le-memese.com/common/charts/py-app' \ + --install \ + --wait \ + --atomic \ + --kubeconfig "/tmp/kubeconfig" \ + --namespace="${{ env.DEPLOY_NAMESPACE }}" \ + --create-namespace \ + --values=./values.yaml \ + --version "0.1.0" \ + --set-literal "image.tag=${{ gitea.ref_name }}" \ + --set-literal "image.repository=${{ env.DEPLOY_IMAGE_URL }}" diff --git a/config.toml b/config.toml index 063288b..6a1169e 100644 --- a/config.toml +++ b/config.toml @@ -11,6 +11,7 @@ generate_robots_txt = true [markdown] highlight_code = true +highlight_theme = "nord" render_emojis = true smart_punctuation = true diff --git a/content/posts/kube-intro/imgs/reqs.gif b/content/posts/kube-intro/imgs/reqs.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ae4dc38bfc9451396db4f8f18c411d3c7de3e13 GIT binary patch literal 90896 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¥~Z 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 web.Response: + # We increment the request count and return the state + req.app["state"]["requests"] += 1 + return web.json_response(req.app["state"]) + + +app = web.Application() +app["state"] = { + "requests": 0, + "hostname": os.environ.get("HOSTNAME", "unknown"), +} +app.router.add_routes(routes) + +if __name__ == "__main__": + web.run_app(app, port=8000, host="0.0.0.0") +``` + +As you can see, this is a simple aiohttp application that returns the number of requests and the hostname of the pod. +This is a good example of an application that can be deployed in Kubernetes, because it is stateless and can be scaled easily. + +Let's create a Dockerfile for this application: +```dockerfile,name=Dockerfile +FROM python:3.11-alpine3.19 + +RUN pip install "aiohttp>=3.12,<4.0" +WORKDIR /app +COPY server.py . +CMD ["python", "server.py"] +``` + +Here's a simple Dockerfile that installs aiohttp and runs the application. Let's build an image and upload it to our running cluster. + +```bash +docker build -t "registry.localhost:5000/small-app:latest" . +docker push "registry.localhost:5000/small-app:latest" +``` + +Now let's deploy this application so it will become available from our host machine. + +```yaml +apiVersion: apps/v1 +kind: Deployment +# Here's the name of the deployment, which is small-app. +metadata: + creationTimestamp: null + name: small-app +spec: + replicas: 1 + # Here we define selector that will help this deployment + # to find pods that it manages. Usually it is the + # same as labels in pod template. + selector: + matchLabels: + app: small-app + strategy: {} + # Here we define the pod template that will be used to create + # pods for this deployment. + template: + metadata: + # Each pod create by this deployment will have these labels. + labels: + app: small-app + spec: + containers: + - image: registry.localhost:5000/small-app:latest + name: small-app + ports: + - containerPort: 8000 + protocol: TCP + resources: {} +--- +apiVersion: v1 +kind: Service +metadata: + name: small-app + namespace: small-app +spec: + # This type of service will make it accessible only + # from inside the cluster. + # If you want to expose it to the outside world, + # you can use LoadBalancer or NodePort. + # But we don't need it for now. + type: ClusterIP + # Here we define ports available for this service. + # Port is the port that will be exposed by the service, + # targetPort is the port that the service + # will forward traffic to in target pods. + ports: + - name: http + port: 80 + protocol: TCP + targetPort: 8000 + # Here we define where to route traffic for this service. + # In this case we route traffic to pods that have + # label app=small-app. + selector: + app: small-app +--- +# Write ingress +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: small-app + namespace: small-app +spec: + rules: + # Here's the host configuration for the Ingress + # It will route traffic for this host to the small-app service + - host: small-app.localhost + http: + paths: + # Here we define the path and the backend service + # The path is set to '/' which means all + # traffic to this host will be routed + # to the defined backend service + - path: / + pathType: Prefix + backend: + service: + name: small-app + port: + number: 80 + resources: {} +``` + +Now let's save this file as `small-app.yaml` and apply it to our cluster: + +```bash +kubectl apply -f small-app.yaml +``` + +Once the command is executed, you should see that the deployment and service are created successfully. + +```bash +❯ kubectl get pods -n small-app +NAME READY STATUS RESTARTS AGE +small-app-54f455696b-rp8qw 1/1 Running 0 13m +``` + +If you were using my k3d configuration, you should be able to access the application at [small-app.localhost](http://small-app.localhost/). + +Let's check if it works. I'm gonna use curl and jq for that: + +```bash +❯ curl -s http://small-app.localhost | jq +{ + "requests": 1, + "hostname": "small-app-54f455696b-rp8qw" +} +``` + +Now you can scale up the application by changing the number of replicas in the deployment. +You can do it by editing the deployment and updating the `replicas` field to 3, for example and then running + +```bash +kubectl apply -f "small-app.yaml" +``` + +Or alternatively you can use `kubectl scale` command: +```bash +kubectl scale deployment -n small-app small-app --replicas 3 +``` + +Let's verify that the application is scaled up: +```bash +❯ kubectl get pods -n small-app +NAME READY STATUS RESTARTS AGE +small-app-54f455696b-6tkxx 1/1 Running 0 21s +small-app-54f455696b-9sd7r 1/1 Running 0 21s +small-app-54f455696b-rp8qw 1/1 Running 0 25m +``` + +Now let's fire some requests to the application and see how it works. + +![Requests](./imgs/reqs.gif) + +Works as expected. The application is scaled up and we can see that the requests are distributed between the pods. + +I guess that is more than enough to get you started with Kubernetes. I might create some more posts on how to tune up your cluster, how to use volumes, how to use secrets and configmaps, and so on. + +But now I'm tired and just want to publish it already. So please go easy on me. Stay tuned. diff --git a/values.yaml b/values.yaml new file mode 100644 index 0000000..6185d79 --- /dev/null +++ b/values.yaml @@ -0,0 +1,22 @@ +nameOverride: "blog" + +image: + tag: "latest" + +service: + port: 80 + +ingress: + enabled: true + annotations: + cert-manager.io/cluster-issuer: cert-issuer + external-dns.alpha.kubernetes.io/hostname: s3rius.blog + tls: + - hosts: + - s3rius.blog + secretName: blog-tls + hosts: + - host: s3rius.blog + paths: + - path: / + pathType: Prefix