This Hugo update was pushed automatically using GitLab CI/CD!

Welcome to my blog !


13 Automating Hugo K8s Deployment With GitLab CICD

Published at March 10, 2022 ·  6 min read

When I started this project, I wanted to keep things as simple as possible. My application - this Hugo blog - has been running for a while now, and every time I write a new blog post, I have to run through a process to update it. So far, this has been a manual process. The time has come to look into automating it. Current vs Desired State Before we start jumping into “automating all the things”, we have to understand the current process and break it down to smaller sections....

12 Upgrading Kubernetes Cluster

Published at January 11, 2022 ·  9 min read

It has been a while since I have deployed this Kubernetes cluster, so the time has come to upgrade it. The version I initially ran was v1.20.1. When it comes to supported versions, this is the official statement on the Kubernetes.io website: “The Kubernetes project maintains release branches for the most recent three minor releases (1.23, 1.22, 1.21). Kubernetes 1.19 and newer receive approximately 1 year of patch support. Kubernetes 1....

My CKA Exam Experience and Tips

Published at December 6, 2021 ·  8 min read

Last week I passed the Certified Kubernetes Administrator (CKA) exam and in today’s post, I’d like to share my experience and some tips for preparing and taking for the exam. I have taken a fair share of exams in my life but I have to say this was by far the best exam I’ve ever taken. I’d even go as far as saying it was… fun. The one thing I did not enjoy was the booking and check-in process....

11 Working With Compute Resource Requests and Limits

Published at November 10, 2021 ·  7 min read

A long time ago, in a blog post far, far away… …we talked about Resource Quotas and set Object limits to our new Namespace called Playpen. In this post, we will look at Compute Resource Requests and Limits. Compute Resource Requests and Limits Before we proceed it is good to understand the difference between a request and a limit. As the name suggests, both are used to control resources, such as CPU and Memory, and are set on a contrainer level....

10 Working With Namespaces

Published at August 9, 2021 ·  5 min read

Today, we will look at Namespaces. Namespaces give us an option to divide our Kubernetes cluster to multiple virtual clusters. This may be useful if you want to create different environments, for example for Prod, Dev, and Test, or if you want to assign specific permissions and policies to users. It also allows you to define resource quotas, defining how many resources can a given namespace use. Default Namespace Before we start creating custom namespaces, we can have a look at namespaces that already exist in our cluster by running kubectl get namespaces command:...

9 Blue/Green and Canary Deployments

Published at July 25, 2021 ·  5 min read

Previously, we talked about Rolling Updates and how we are able to update the application with zero downtime. In that scenario, all old pods were gradually replaced by new pods running the updated version of our application. While this method was very efficient, it did not really allow us to perform any kind of testing of the updated application in the new setting, and in case of a failure, our only option was to fully roll back....

8 Configuring Update Strategies

Published at June 30, 2021 ·  9 min read

One thing I did not talk about yet is how I keep the website updated. This is what we will discuss in today’s post. Current update process I am a firm believer in KISS rule (Keep It Simple, Stupid), especially when I am working with new technologies. While I will be looking at automating this process at some stage, for now I update my blog by executing 5 simple steps:...

7 Configuring Topology Spread Constraints

Published at June 15, 2021 ·  6 min read

In previous post, we have scaled our deployment by defining number of replicas required but we weren’t able to control where they get deployed. Today, we’ll look into this further. Understanding default restart behaviour It is important to note that if a node fails, pods running on that node are scheduled for deletion. Pods only get scheduled on a node once, when they are created, and remain running on that node until it stops or is terminated....

6 Creating a Deployment

Published at June 9, 2021 ·  5 min read

Our website is now running and we can access it, however it is running in a single pod. That means that if it fails, our website will be down. To prevent this, we need to introduce some self-healing and scaling, and that’s why we’ll create a Deployment. Working with Deployments Before we create a Deployment, let’s have a look what happens when we delete our single pod: katarinabrookfield@KatsMac hugo-site % kubectl get pod hugo-site-pod -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES hugo-site-pod 1/1 Running 0 27h 10....

5 Creating a Loadbalancer

Published at June 7, 2021 ·  2 min read

Our pod is now running but we need to be able to connect to it. To do that, we will deploy a Service. One of the reasons why we are running this on a cloud-based cluster is the ability to deploy load-balancers. I know what you are thinking; “Why are we deploying a load-balancer for a single pod?". At this stage, we’re doing it to prepare for next steps which will include scaling-out of our application....