<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Kubernetes on jecklgamis.com</title><link>https://jecklgamis.com/tags/kubernetes/</link><description>Recent content in Kubernetes on jecklgamis.com</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 16 Apr 2026 13:49:15 +1000</lastBuildDate><atom:link href="https://jecklgamis.com/tags/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>Load Testing with Gatling and Scala</title><link>https://jecklgamis.com/guides/gatling-scala-example/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><guid>https://jecklgamis.com/guides/gatling-scala-example/</guid><description>&lt;p&gt;A Gatling load testing example in Scala with multiple ways to run simulations against an HTTP target.&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Simulation written in Scala using the Gatling DSL&lt;/li&gt;
&lt;li&gt;Configurable via system properties (URL, duration, rate, thresholds)&lt;/li&gt;
&lt;li&gt;Four execution modes: Maven plugin, executable jar, Docker, Kubernetes Job&lt;/li&gt;
&lt;li&gt;Bundled Node.js HTTP test server as a minimal system under test&lt;/li&gt;
&lt;li&gt;Helm chart for Kubernetes deployment&lt;/li&gt;
&lt;li&gt;GitHub template — clone from a clean slate with one click&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;
&lt;h3 id="requirements"&gt;Requirements&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;JDK 21&lt;/li&gt;
&lt;li&gt;Node.js (for the bundled test server)&lt;/li&gt;
&lt;li&gt;Maven&lt;/li&gt;
&lt;li&gt;Docker (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="start-the-test-app"&gt;Start the Test App&lt;/h3&gt;
&lt;p&gt;The included test server is a minimal Node.js HTTP server that echoes requests back.&lt;/p&gt;</description></item><item><title>A WebSocket Client/Server Skeleton Using FastAPI</title><link>https://jecklgamis.com/guides/websocket-client-server-skeleton-using-fastapi/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://jecklgamis.com/guides/websocket-client-server-skeleton-using-fastapi/</guid><description>&lt;p&gt;A production-ready WebSocket client/server app using FastAPI.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm --name websocket-python-example -p 8080:8080 -it jecklgamis/websocket-python-example:main
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="tech-stack"&gt;Tech Stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;FastAPI&lt;/strong&gt; - async web framework with WebSocket support&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;websockets&lt;/strong&gt; - WebSocket client library&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pydantic v2&lt;/strong&gt; - validation and settings management&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker&lt;/strong&gt; - containerized deployment (Python 3.12-slim)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helm&lt;/strong&gt; - Kubernetes deployment chart&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ruff&lt;/strong&gt; - linting and formatting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;pytest&lt;/strong&gt; - testing with async support&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="project-structure"&gt;Project Structure&lt;/h2&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;├── app/
│ ├── __init__.py # Global logging init (INFO level)
│ ├── main.py # FastAPI application entry point
│ ├── config.py # Environment-specific settings (dev/test/prod)
│ └── routers/ # API route handlers
│ └── websocket.py # WebSocket /ws endpoint
├── tests/ # Test suite
├── deployment/
│ └── k8s/helm/ # Helm chart and deploy Makefile
├── websocket_client.py # WebSocket client
├── run-server.sh # Start the server
├── run-client.sh # Start the client
├── Dockerfile
├── Makefile
└── pyproject.toml
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="getting-started"&gt;Getting Started&lt;/h2&gt;
&lt;h3 id="prerequisites"&gt;Prerequisites&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Python 3.12+&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/astral-sh/uv"&gt;uv&lt;/a&gt; (recommended)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/"&gt;Docker&lt;/a&gt; (for containerized deployment)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Clone the repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone git@github.com:jecklgamis/websocket-python-example.git &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; cd websocket-python-example
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Install dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make install-deps
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Start the dev server (uses .env.dev by default)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;make run-dev
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The server will be available at &lt;code&gt;http://localhost:8080&lt;/code&gt;. This will reload on file changes.&lt;/p&gt;</description></item></channel></rss>