<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Catt</title>
    <description>The latest articles on DEV Community by Catt (@cattkaizen).</description>
    <link>https://dev.to/cattkaizen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F370192%2F12d9640a-3cf4-491e-b118-8eac0d95f866.jpeg</url>
      <title>DEV Community: Catt</title>
      <link>https://dev.to/cattkaizen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cattkaizen"/>
    <language>en</language>
    <item>
      <title>day5: kubelet</title>
      <dc:creator>Catt</dc:creator>
      <pubDate>Fri, 12 Dec 2025 02:51:20 +0000</pubDate>
      <link>https://dev.to/cattkaizen/day5-kubelet-3bhi</link>
      <guid>https://dev.to/cattkaizen/day5-kubelet-3bhi</guid>
      <description>&lt;p&gt;Short and sweet one on the Kubelet today.&lt;/p&gt;

&lt;p&gt;Kubelet is like a captain on a ship in the ship analogy - it asks for the paperwork necessary to become part of the cluster. It is sole point of contact from the master/control plane ship, it loads and unloads containers on the ship as instructed by the Scheduler, and it sends back reports on the status of the ship as well as the containers on them.&lt;/p&gt;

&lt;p&gt;The Kubelet registers the worker node with a Kubernetes cluster. When it receives instructions to load a pod on the node with a container, it requests the container runtime engine to pull and run an image. The Kubelet will then continue to monitor the state of the pod and containers in it, and then reports this back to the Kube API server.&lt;/p&gt;

&lt;p&gt;I personally think of the Kubelet as the manager of the node and what's going on on it - the fact that it's the one doing status reports to the API server encapsulates what I think of when I think of the Kubelet, especially as it needs to know the state and status of the pods in this way. Also it's the one instructing the container runtime.&lt;/p&gt;

&lt;p&gt;Even with the Kube Admin Tool, the Kubelet needs to be manually installed on the worker nodes - download the installer, extract it, and run it as a service.&lt;/p&gt;

&lt;p&gt;You can view the running Kubelet process and options by listeing the process on the worker node and search for kubelet with &lt;code&gt;ps aux | grep kubelet&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Sweet and simple!&lt;/p&gt;

&lt;p&gt;- Catt&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kubernetesjourney</category>
      <category>kubelet</category>
    </item>
    <item>
      <title>day4: kube scheduler</title>
      <dc:creator>Catt</dc:creator>
      <pubDate>Thu, 11 Dec 2025 03:12:18 +0000</pubDate>
      <link>https://dev.to/cattkaizen/day4-kube-scheduler-5ggk</link>
      <guid>https://dev.to/cattkaizen/day4-kube-scheduler-5ggk</guid>
      <description>&lt;p&gt;Day 4, writing about the Kubernetes Scheduler!&lt;/p&gt;

&lt;p&gt;The Kubernetes scheduler is responsible for deciding which pods go on which nodes - it doesn't place the pods on the nodes but it notes which node a pod should go on. The Kubelet is the actual agent that is responsible for creating pods on the nodes.&lt;/p&gt;

&lt;p&gt;The Scheduler is for ensuring that the right pods end up on the right notes - in the previous analogy with the ships, there are different sizes of ships and different destinations to which the ships are directed, and the containers have different sizes as well. The kube scheduler looks at each pod and finds the best fit node for the pod.&lt;/p&gt;

&lt;p&gt;There are two phases to this -&lt;/p&gt;

&lt;p&gt;The first is the scheduler will filter out the nodes that do not fit the profile for the pod - it may be marked to not go on a specific node or it may not have the resources to support the resources the pod requires.&lt;/p&gt;

&lt;p&gt;The second is it creates a priority function to assign a score to the nodes on a scale of 1-10 and schedules the pod on the most suited one.&lt;/p&gt;

&lt;p&gt;These values can be customised, and you can write your own scheduler as well.&lt;/p&gt;

&lt;p&gt;Some determinants for this are resource requirements/requests and limits, taints and tolerations, node selectors, affinity rules, etc.&lt;/p&gt;

&lt;p&gt;To install the kube scheduler, you can download the kube scheduler binary from the kubernetes release page, extract it and run it as a service. When you run it as a service, you specify the scheduler config file.&lt;/p&gt;

&lt;p&gt;To view the kube scheduler, you have the option to find the kube scheduler as a pod in the kube-system namespace if you deployed it with the kubeadm tool - the pod definition file exists in the &lt;code&gt;/etc/kubernetes/manifests&lt;/code&gt; file, or you can do a process search using &lt;code&gt;ps -aux | grep kube-scheduler&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's all I have for today!&lt;/p&gt;

&lt;p&gt;-Catt&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kubernetesjourney</category>
      <category>kubernetesscheduler</category>
    </item>
    <item>
      <title>day3: kube controller manager</title>
      <dc:creator>Catt</dc:creator>
      <pubDate>Wed, 10 Dec 2025 01:34:19 +0000</pubDate>
      <link>https://dev.to/cattkaizen/day3-kube-controller-manager-4gfh</link>
      <guid>https://dev.to/cattkaizen/day3-kube-controller-manager-4gfh</guid>
      <description>&lt;p&gt;The Kube Controller Manager manages the various controllers in Kubernetes.&lt;/p&gt;

&lt;p&gt;Controllers are:&lt;br&gt;
1 - continually on the lookout for the status of things&lt;br&gt;
2 - take necessary actions to remediate the situation&lt;/p&gt;

&lt;p&gt;A controller is a process that continually monitors the state of various components within the system, and it works towards bringing the whole system to the desired functioning state.&lt;/p&gt;

&lt;p&gt;For example, with a node controller, it monitors the status of the nodes and takes necessary actions to keep the apps running. It does this through the Kube API server. It checks the nodes every 5 seconds - if a heartbeat is not detected, it waits for 40 seconds before marking it as unreachable. Then it gives it 5 minutes to come back up - if it doesn't, the pods get evicted and provisioned onto healthy nodes if they're part of a replicaset&lt;/p&gt;

&lt;p&gt;Another example with a replica controller - these monitor the status of replicasets, ensuring the desired number of pods are available at all times within the set.&lt;/p&gt;

&lt;p&gt;The controllers are packaged in a single process known as the Kubernetes Controller Manager. When the Kubernetes Controller Manager is installed, the different controllers get installed as well.&lt;/p&gt;

&lt;p&gt;To install the Kubernetes Controller Manager, you can download it from the Kubernetes release page, extract it and run it as a service. &lt;/p&gt;

&lt;p&gt;There are additional options to customise your controllers, such as default settings for the node controller to evict your pods, for example. &lt;/p&gt;

&lt;p&gt;If set up with kube admin tool, kubeadm deploys a kube controller manager as a pod in the kube-system namespace on the master node's &lt;code&gt;/etc/kubernetes/manifests&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Without the kube admin tool, you have to inspect options by viewing the Kube Controller Manager service, located in the services directory. You can also list the processes on the master node with &lt;code&gt;ps -aux | grep kube-controller-manager&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;That's what I've got for today!&lt;/p&gt;

&lt;p&gt;-Catt&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kubernetescontrollers</category>
      <category>kubernetesjourney</category>
    </item>
    <item>
      <title>day2: kube-api server</title>
      <dc:creator>Catt</dc:creator>
      <pubDate>Sat, 06 Dec 2025 03:31:22 +0000</pubDate>
      <link>https://dev.to/cattkaizen/day2-kube-api-server-3l5f</link>
      <guid>https://dev.to/cattkaizen/day2-kube-api-server-3l5f</guid>
      <description>&lt;p&gt;day 2 of my CKA study course - this one was a bit long and it is Friday - but yeah I happen to be free today so why not :) had I plans I would have skipped a writeup today but it's 10pm and my house is in good order and I just happen to have nothing planned. Tomorrow is a different story I've got plans from 8am on basically, should be fun and a good break, though if I've got time in the middle of the day I'll work more on the course.&lt;/p&gt;

&lt;p&gt;kube-api server does a lot! It's the primary management component in kubernetes. The kubectl command line utility is always reaching out to the kube-api server - it authenticates and validates the request, then retrieves the data from the etcd cluster and responds with the requested information.&lt;/p&gt;

&lt;p&gt;That pretty much sounds like a typical API request, and it is, as you can also send POST requests directly without the CLI.&lt;/p&gt;

&lt;p&gt;The course goes into creating a pod as an example to illustrate how the kube-api server is core to all the functions and behind the scenes with kubernetes, so let's look at that example - &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The request is authenticated and validated&lt;/li&gt;
&lt;li&gt;The API server creates a pod object without assigning it to a node&lt;/li&gt;
&lt;li&gt;The API server updates the etcd server with information, and updates the user that the pod is created&lt;/li&gt;
&lt;li&gt;The scheduler continually monitors the api server, then realises a new pod is now created with no node assigned - it will then kick in to find the right node on which to schedule the pod, and then it will communicate this information back to the API server&lt;/li&gt;
&lt;li&gt;The API server then updates the information in the etcd cluster, and passes that information to the kubelet on the worker node&lt;/li&gt;
&lt;li&gt;The Kubelet then creates the pod on that node, and instructs the container runtime engine to deploy the application image. Once that takes place, the Kubelet updates the status back to the API server, and the API server then updates the etcd cluster.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Wow that's quite a bit of work to get a pod created and scheduled on a node! Might I mention that a similar pattern is followed every single time a change is requested - the kube-api server is at the centre of all these different tasks that need to be performed to make a change in the cluster. The kube-api server is the only component that interacts directly with the etcd data store - the other components such as the scheduler, kube control manager, and the kubelet, use the API server to make updates in the cluster in their respective areas.&lt;/p&gt;

&lt;p&gt;To reiterate some of this again, the kube-api server is responsible for:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Authenticating users&lt;/li&gt;
&lt;li&gt;Validating requests&lt;/li&gt;
&lt;li&gt;Retrieving data (and updates)&lt;/li&gt;
&lt;li&gt;Updating etcd&lt;/li&gt;
&lt;li&gt;The Scheduler&lt;/li&gt;
&lt;li&gt;The Kubelet&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The kube-api server is available as a binary in the kubernetes release page - you can download and configure it to run as a service on your kubernetes master/control plane node. &lt;/p&gt;

&lt;p&gt;Kubernetes architecture consists of a lot of different components working with each other, talking to each other in so many different ways, so they all need to know where the other components are. Additionally, there are different modes of authentication, authorisation, encryption/security, etc. - many options exist with this. The &lt;code&gt;kube-apiserver.service&lt;/code&gt; file has these options and configurations, a lot of the config being certificates that are used to secure connectivity between different components (all the components have certificates associated with them).&lt;/p&gt;

&lt;p&gt;Depending again on how you set up the cluster, viewing the kube-api server options will differ.&lt;/p&gt;

&lt;p&gt;If it was set up with the kube admin tool (kubeadm), kube admin deploys the kube-apiserver as a pod in the kube-system namespace (&lt;code&gt;kubectl get pods -n kube-system&lt;/code&gt;) on the master/control plane node - (&lt;code&gt;/etc/systemd/system/kubeapi-server.service&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;If it was set up without kubeadm, you can inspect the options with a &lt;code&gt;kubeapiserver.service&lt;/code&gt; or do &lt;code&gt;ps -aux | grep kube-apiserver&lt;/code&gt; to see running processes and effective options by listing the processes.&lt;/p&gt;

&lt;p&gt;An additional piece to the notes above - this is coming from &lt;em&gt;The Kubernetes Book&lt;/em&gt; by Nigel Poulton, 2024 Edition, The kube-api server is the front-end of Kubernetes - even the internal control plane services communicate to each other via the kube-api server. It is a RESTful API over HTTPS, so all the requests are subject to authentication and authorisation. &lt;/p&gt;

&lt;p&gt;That's in the intro, which is where I'm at right now in the CKA course as well - it looks like there is also a whole chapter on the API in general that includes JSON serialisation, named API groups, inspecting the API, alpha and beta and stable, resource deprecation, and extending the API. Flipping through the headers, it doesn't seem as bad as I thought - I did see something about extending the API in a Kelsey Hightower Kubernetes book that is about a decade old by now, which I don't know about, but it's otherwise seemingly a pretty standard API, which I know pretty well working with APIs to test things and with the web development work from before. &lt;/p&gt;

&lt;p&gt;That's all I have today - it's getting late actually. Hopefully this is helpful and anyone else interested in studying together or if this helped, leave a comment! Trying to make Kubernetes interesting but it's just a lot of work really ;)&lt;/p&gt;

&lt;p&gt;- Catt&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kubernetesjourney</category>
      <category>kubeapiserver</category>
    </item>
    <item>
      <title>day1: Intro to etcd</title>
      <dc:creator>Catt</dc:creator>
      <pubDate>Fri, 05 Dec 2025 01:55:02 +0000</pubDate>
      <link>https://dev.to/cattkaizen/day1-intro-to-etcd-2hap</link>
      <guid>https://dev.to/cattkaizen/day1-intro-to-etcd-2hap</guid>
      <description>&lt;p&gt;day 1 of the kubernetes CKA study journey - the first lesson in the KodeKloud video is on etcd - so today we're chatting about et-see-dee!&lt;/p&gt;

&lt;p&gt;etcd is basically a highly available, distributed, reliable key-value database that is simple, secure, and fast. This is important because etcd stores all the cluster information and whenever you use &lt;code&gt;kubectl get &amp;lt;object&amp;gt;&lt;/code&gt;, the API is querying the etcd database. It stores information regarding the cluster including nodes, pods, configurations, secrets, accounts, roles, role bindings, etc.&lt;/p&gt;

&lt;p&gt;There are many types of databases and etcd is a key value one for the purpose of being very quick to search and retrieve information (high performance), although this also means it doesn't handle really complex queries like a SQL database might. You can, however, store complex data - you can have the key, then the value can be a set of properties, or an entire json itself.&lt;/p&gt;

&lt;p&gt;When an etcd server is started, it starts a service on the IP address of the server that listens by default on port 2379. You can then attach clients to the etcd server to store and retrieve information. The default client is the etcdctl - the CLI client for etcd. It runs commands such as &lt;code&gt;./etcdctl put key1 value1&lt;/code&gt;. Note that different etcd versions have different APIs, and thus different etcdctl commands/verbs!&lt;/p&gt;

&lt;p&gt;Every change made in a Kubernetes cluster is considered complete only when the etcd server is updated. Kubernetes stores data in a specific directory structure - root directory is a registry, and under that are the various kubernetes objects.&lt;/p&gt;

&lt;p&gt;If you are setting up your cluster from scratch, you will have to download the etcd binary and deploy it on your master/control plane node yourself. If you are setting up your cluster with the kubeadm tool, it will deploy the etcd server as a pod in the kube-system namespace. &lt;/p&gt;

&lt;p&gt;In a high availability environment, you may have multiple master/control plane nodes with multiple etcd servers, so you will have to ensure they know about each other by specifying this in the &lt;code&gt;--initial-cluster controller&lt;/code&gt; parameter in the &lt;code&gt;etcd.service&lt;/code&gt; configuration.&lt;/p&gt;

&lt;p&gt;etcd entered the CNCF incubation as a project in 2018, and graduated November 2020.&lt;/p&gt;

&lt;p&gt;That's all I have for today, hopefully this is solid information about etcd!&lt;/p&gt;

&lt;p&gt;- Catt&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>kubernetesjourney</category>
      <category>etcd</category>
    </item>
    <item>
      <title>day0: The beginning of a journey with Kubernetes - cluster architecture</title>
      <dc:creator>Catt</dc:creator>
      <pubDate>Thu, 04 Dec 2025 00:48:28 +0000</pubDate>
      <link>https://dev.to/cattkaizen/the-beginning-of-a-journey-with-kubernetes-cluster-architecture-2h2d</link>
      <guid>https://dev.to/cattkaizen/the-beginning-of-a-journey-with-kubernetes-cluster-architecture-2h2d</guid>
      <description>&lt;p&gt;I'm starting my Kubernetes journey and wanted to document and blog about what I'm learning, to help myself get more acquainted with the content while I learn. I'm currently studying with Kodekloud's CKA course so I will be documenting my notes from there.&lt;/p&gt;

&lt;p&gt;I don't have any clear idea of how I'll go about it - my main goal is to try to explain what I've learnt to help myself better understand and retain the information in the process of recapping what I've studied.&lt;/p&gt;

&lt;p&gt;First day of this, I have notes from the first video on the core concepts in Kubernetes.&lt;/p&gt;

&lt;p&gt;The video goes over an analogy of a ship operation, carrying cargo containers, to illustrate cluster architecture. The main idea is that there is a master/control plane node managing the cluster, while there are a number of worker nodes carrying the containers.&lt;/p&gt;

&lt;p&gt;Here are some of the notes I have on this analogy, relating the different components like the controllers, etcd, the scheduler, the kube API server, and the kubelet, to the cargo ship operations analogy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Master/control plane node doing all the managing of the cluster using control plane components

&lt;ul&gt;
&lt;li&gt;containers stored on the ship, which ship, what time it was loaded, etc - all stored in a highly available key-value store called the etcd cluster&lt;/li&gt;
&lt;li&gt;cranes identifying containers that need to be on the ships - size, capacity, number of containers already on the ship - the schedulers&lt;/li&gt;
&lt;li&gt;operations team, cargo team, communications, etc - controllers take care of different areas - manage node lifecycle, container replication, system stability. Node controlled, replication controller, controller manager&lt;/li&gt;
&lt;li&gt;Kube API server - central hub for cluster communication and management, primary management component of k8s,

&lt;ul&gt;
&lt;li&gt;Kube API server is responsible for orchestrating all operations within the cluster

&lt;ul&gt;
&lt;li&gt;exposes the k8s API, which is used by external users to perform management operations on the cluster and controllers to monitor the state of the cluster and make necessary changes as required and by worker nodes to communicate with the server&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;li&gt;Cargo ships -

&lt;ul&gt;
&lt;li&gt;every ship has a captain that manages all the activity, liaising with master ship - this is the Kubelet, an agent that runs on each node in a cluster

&lt;ul&gt;
&lt;li&gt;listens for instructions from the kube API server and deploys or destroys containers on the nodes as required.&lt;/li&gt;
&lt;li&gt;Kube API server periodically fetches status reports from the kubelet to monitor the status of nodes and containers on them&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This is a really great way to get an overview of the main components in a kubernetes cluster, however I think I have a better idea of this after having already studied a couple things about kubernetes already - otherwise they can seem pretty abstract. So the more I go into the course and study more of the components individually, I'm sure these will all come together and become more and more familiar!&lt;/p&gt;

&lt;p&gt;If you're also studying Kubernetes reach out to see if we'd have a good accountability buddy system!&lt;/p&gt;

&lt;p&gt;- Catt&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>cka</category>
      <category>kubernetesjourney</category>
    </item>
  </channel>
</rss>
