-
Automated Failover to GKE with Terraform, CI/CD, and ArgoCD
I created a fully automated disaster recovery solution for my Kubernetes homelab using CI/CD, Terraform, Google Kubernetes Engine (GKE), and ArgoCD. It adds a safety net in case I lose power, WiFi, or need to perform physical maintenance on my Raspberry Pis. I host live demos on my cluster so this solution allows me to maximize uptime.
Read More -
K3s (SQLite): Promoting a Node to the Control Plane
K3s is a lightweight Kubernetes distribution in which the core components are packaged into a single binary. The only way to accomplish a Control Plane promotion in K3s is by doing a backup & restore of the embedded SQLite datastore.
Read More -
Configuring ArgoCD with Traefik Ingress and cert-manager
Install and configure ArgoCD when using Traefik Ingress and cert-manager to handle TLS.
Read More -
A Practical Guide to Azure AI + Bing Grounding in Python: Prompt Tuning, Cost Control, and Redis Caching
Guide to implement Azure AI agents into your Python app, selecting the right AI model for your use case, finetuning prompts, and optimizing with Redis. Includes a full cost analysis section with practical cost mitigation strategies. Live demo: zhf.danielstanecki.com
Read More -
Monitor Traefik Ingress Controller in Kubernetes with Prometheus and Grafana
Simple step-by-step guide to configure Traefik monitoring in Kubernetes using Prometheus and Grafana.
Read More -
Monitor a Flask App in Kubernetes with Prometheus and Grafana (Step-by-Step Guide)
An end-to-end practical guide for setting up prometheus-flask-exporter to measure HTTP metrics and custom counters.
Read More -
Helm: Managing My Dev and Prod Environments in K3s
I’d been deploying my Zillow Housing Forecast application using the traditional kubectl apply -f method. Now that I’d created different types of deployment YAMLs (single node, multi-node, dev/prod), it was time to package and organize these into a Helm chart. I did this while setting up my dev/staging environment which is almost 1:1 with my “prod” environment, save for the hostname, image pull policy, and container tags.
Read More -
Exposing a K8s App Behind CGNAT on a Multi-Node, Bare Metal Raspberry Pi Cluster
A step-by-step guide to serving a Kubernetes app over HTTPS using Traefik, cert-manager, and Cloudflare Tunnel — without a public IP, on bare metal Raspberry Pis. (Zillow Housing Forecast: zhf.dstanecki.com)
When I moved into my new apartment, I brought my Raspberry Pi K8s cluster with me, planning to expose it publicly. Except I missed one small detail: the apartment didn’t have a coaxial outlet for traditional internet. I had to get a wireless 5G router which uses CGNAT (Carrier-Grade NAT) – a method used by ISPs to conserve public IPv4 addresses by having multiple customers share a single public IP. You can’t assign a public IP to your load balancer if you don’t have your own to begin with. That wrecked my plan to expose my app via MetalLB and Traefik. Here’s how I worked around it.
Read More -
Debugging Flannel and CoreDNS after adding a second K8s node
I had been running my Zillow Housing Forecast application on a single Kubernetes node and I decided to add a second Raspberry Pi to the cluster. Both nodes were running and in a “Ready” state, however I noticed two problems.
- The frontend app on the second node could be accessed via NodePort, but it couldn’t connect to the database—queries were timing out. The database pod also couldn’t curl a file from GitHub, and nslookup confirmed that DNS resolution was failing, indicating a CoreDNS issue.
- What’s more is I realized that despite the nodes being able to communicate just fine, cross-node pod communication was failing.
-
One-Click Website Generation using OpenAI, CI/CD, and Terraform
I remember when I was in high school English class I had to write about a dream job. I chose to write about web development, but the more I learned about the career path, the more I realized that I didn’t want to pursue it. Not because I wouldn’t enjoy it, but because the web development field was shrinking and being replaced by Wix, Wordpress, and the like. Over time it became easier for people to create websites themselves, without the need to hire a developer.
Fast forward to 2025, and I’ve built a project that reflects just how far things have come. Using OpenAI, Terraform, and a CI/CD pipeline, it can deploy a website from user prompts in just 2-3 minutes. Granted, it’s rudimentary, consisting of a single-page HTML file, built-in CSS, and an optional AI-generated image, but I think it’s a good demonstration of how far technology has come and a taste of what AI could be capable of in the future.
Read More -
Bootstrapping MariaDB in Kubernetes with ConfigMaps and initContainers
While replatforming my zillow-housing-forecast project to Kubernetes, I needed to find the most effective way to initialize my mariadb SQL database. I preferred to mount the files as volumes rather than bake it into the container because I wanted to have the flexibility to edit my files without rebuilding a container. This is the approach I used when the app was just docker-compose. However, accomplishing the same in Kubernetes posed some unique challenges, especially because I needed to combine a small SQL script with a large dataset and inject both into a MariaDB pod on startup.
Read More -
Migrating From GitHub Pages to AWS
I migrated this site from GitHub Pages to S3 + CloudFront and transferred my DNS name from Namecheap to Route 53. I also added visitor count functionality to the website using API Gateway, Lambda, and DynamoDB, and automated the infrastructure deployment using Terraform (the code can be found here: https://github.com/dstanecki/website-visitor-count).
Read More -
Automated Cross-Region Duplication of an RDS Database Using Lambda, EventBridge, and SNS
I saw a contract job listing asking for some Lambda functions to interact with RDS. Though the listing was outdated, I still wanted to prove to myself that I could do it. My Lambda scripts, written in Python (Boto3), are located here: https://github.com/dstanecki/automated-cross-region-duplication-of-rds-db
Read More -
Zillow Housing Forecast Web Application
This was my first self-driven project dabbling in AWS. It’s a simple two-tier web application that allows the user to input a ZIP code and view Zillow’s predicted one year percent-change in housing costs for the given area. The back-end database resides on a LAMP web server running on an EC2 instance. The frontend is a Python Flask app hosted on Elastic Beanstalk. You can view my GitHub repo here.
Read More -
Space Adventure Minigame
This is a side-scroller style space-shooter minigame created on Greenfoot. For those unfamiliar with Greenfoot, it’s “a visual and interactive program that uses object orientation with Java to build games, simulations, and other graphical programs”. I created this project to use as a demo for a course I taught, as well as brush up on my own knowledge. To play, head to https://www.greenfoot.org/scenarios/29074. Here’s the GitHub repo with my code: https://github.com/dstanecki/space-adventure-minigame.
Read More -
Building a Serverless Web Application
The goal of this project was to create a web application that has a user management system, serverless backend, and RESTful API. The project utilizes AWS Lambda, Amazon API Gateway, AWS Amplify, Amazon DynamoDB, and Amazon Cognito. I followed the hands-on tutorial provided by AWS here.
Read More -
Deploying An AWS EC2 Instance To Host A Web Page
The goal of this project was to perform some basic Amazon Web Services tasks and deploy an EC2 Virtual Machine that can host a static web page. The process for this involved creating a Virtual Private Cloud, creating a MySQL database instance, and installing Apache web server onto the VM.
Read More -
Virtual Homelab Running Active Directory
This homelab utilizes VirtualBox to connect a Windows 2019 Server Domain Controller to a Windows 10 client machine. I followed Josh Madakor’s tutorial on YouTube to set this up. He also provides a randomly generated list of ~1,000 users to add via PowerShell.
Read More -
Creating This Website
This is my first blog website. It took some trial and error, but I managed to get it up and running. I used GitHub Pages and Jekyll to create the site, and I used namecheap.com to obtain the domain. The grand total to run the site came out to only $9/year, which I was very happy with. This tutorial was extremely helpful and easy to follow for a first-time Jekyll user. You can view my github repository here.