<?xml version="1.0" encoding="utf-8" standalone="yes"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><script src="https://www.rss.style/js/atom-style.js" xmlns="http://www.w3.org/1999/xhtml"/><title>Tower of Kubes</title><link rel="self" type="application/atom+xml" hreflang="en" href="https://www.towerofkubes.com/tags/k8s/feed.xml"/><link rel="alternate" type="text/html" hreflang="en" href="https://www.towerofkubes.com/tags/k8s/"/><link rel="alternate" type="application/rss+xml" hreflang="en" href="https://www.towerofkubes.com/tags/k8s/index.xml"/><id>/</id><updated>2025-11-13T00:00:00Z</updated><author><name>Ro'i Bandel</name></author><generator>Hugo 0.157.0</generator><entry><title>Home Assistant on Kubernetes</title><link rel="alternate" type="text/html" hreflang="en" href="https://www.towerofkubes.com/articles/home-assistant-on-k8s/"/><id>https://www.towerofkubes.com/articles/home-assistant-on-k8s/</id><updated>2025-11-13T00:00:00Z</updated><summary type="html">Run Home Assistant on Kubernetes with the Helm chart, covering persistence, add-ons, replicas, and how it compares to Home Assistant OS for homelab smart home deployments.</summary><content type="html"><![CDATA[<p>Today I learned Home Assistant can run on K8s using this Helm Chart: <a href="https://github.com/pajikos/home-assistant-helm-chart"  target="_blank" rel="noreferrer">pajikos/home-assistant-helm-chart: Helm Chart for Home Assistant</a></p>

    <div class="admonition quote">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72z"/></svg>
        <span>Quote</span>
      </div>
      <div class="admonition-content">
        <p>This Helm chart bootstraps a Home Assistant instance on Kubernetes, supports configurable persistence, controller types, add-ons (e.g. code-server), and is auto-updated with new Home Assistant releases.</p>
      </div>
    </div><ul>
<li><a href="https://t.me/KubeBuilders/1423"  target="_blank" rel="noreferrer">Telegram: View @KubeBuilders</a></li>
</ul>

<h2 class="relative group">My Opinion
    <div id="my-opinion" class="anchor"></div>
    
</h2>
<p>For over two years, I have been running <a href="http://home-assistant.io/"  target="_blank" rel="noreferrer">Home Assistant</a> on <a href="https://www.home-assistant.io/green/"  target="_blank" rel="noreferrer">Home Assistant Green</a>, which comes pre-installed with <a href="https://developers.home-assistant.io/docs/operating-system/"  target="_blank" rel="noreferrer">Home Assistant OS</a>.</p>
<p>The device has been working perfectly well for all of my smart home needs. Even though it is not the most cost-effective way to run Home Assistant, it is a well-designed device, fast enough for my needs and power efficient.</p>
<p>If I were buying a new dedicated device for Home Assistant today, I may have preferred to get a mini PC instead, since some mini PCs are similar in price to the HA Green but significantly more powerful (though maybe not as power efficient). However, I would still strive to run Home Assistant with <a href="https://developers.home-assistant.io/docs/operating-system/"  target="_blank" rel="noreferrer">Home Assistant OS</a>.</p>

<h3 class="relative group">Why standalone device for Home Assistant
    <div id="why-standalone-device-for-home-assistant" class="anchor"></div>
    
</h3>
<p>On recent podcast episodes of Linux Unplugged (including <a href="https://linuxunplugged.com/637"  target="_blank" rel="noreferrer">LINUX Unplugged 637: Chris’ Smart Home Disaster</a>), Chris talked about considering a move away from the Home Assistant Yellow (which is more powerful than the HA Green), perhaps towards a mini PC running multiple services (rather than just a mini PC). Chris also debated the benefits of running Home Assistant on NixOS vs Home Assistant OS. Nevertheless, I tend to agree with Chris’s long-standing stance that it’s best to give Home Assistant its own device, because of how essential it can be to a home.</p>

<h3 class="relative group">Why Home Assistant OS
    <div id="why-home-assistant-os" class="anchor"></div>
    
</h3>
<p>I run all my <em>other</em> self-hosted services in containers. Why not Home Assistant as well? The reason is that <a href="https://developers.home-assistant.io/docs/operating-system/"  target="_blank" rel="noreferrer">Home Assistant OS</a> makes everything easy. Notably, Home Assistant Container installations don’t have access to add-ons.</p>

    <div class="admonition quote">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72z"/></svg>
        <span>Quote</span>
      </div>
      <div class="admonition-content">
        <p>Add-ons are additional standalone third-party software packages that can be installed on Home Assistant OS. <a href="https://www.home-assistant.io/getting-started/concepts-terminology/#add-ons"  target="_blank" rel="noreferrer">\[Learn more\]</a></p>
      </div>
    </div><ul>
<li><a href="https://www.home-assistant.io/installation/"  target="_blank" rel="noreferrer">Installation - Home Assistant</a></li>
</ul>
<p>Although Add-ons are really just containers, and many Home Assistant users manage to install them as separate containers, this requires elaborate configurations to make the different containers work together with Home Assistant. Even though I’ve been doing Docker Compose stacks (for example, applications that have multiple containers including a database), the moment I found out that HAOS allows one-click installation of Add-ons, I immediately gravitated towards that simplicity. Some examples of Add-ons that I use and rely on are <a href="https://www.home-assistant.io/integrations/matter/"  target="_blank" rel="noreferrer">Matter Server</a>, <a href="https://www.zigbee2mqtt.io/"  target="_blank" rel="noreferrer">Zigbee2MQTT</a> and <a href="https://www.music-assistant.io/"  target="_blank" rel="noreferrer">Music Assistant</a>.</p>
<p>Backups are also fairly simple on HAOS.</p>

<h3 class="relative group">Benefits of the Home Assistant Helm Chart
    <div id="benefits-of-the-home-assistant-helm-chart" class="anchor"></div>
    
</h3>
<p>Nevertheless, I do find the idea of this Home Assistant Helm Chart compelling. Features such as replicas and partial add-ons support make this an interesting alternative to HAOS. I may run a test deployment in my parent’s home, since that’s where my homelab cluster is.</p>
<hr>
<p><em>Featured image by <a href="https://unsplash.com/@jakubzerdzicki?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Jakub Żerdzicki</a> on <a href="https://unsplash.com/photos/a-cell-phone-is-connected-to-a-light-switch-We56jns_zLE?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Unsplash</a>.</em></p>
]]></content><author><name>Ro'i Bandel</name></author><category term="k8s" label="K8s" scheme="https://www.towerofkubes.com/tags/k8s/"/><category term="homeassistant" label="Homeassistant" scheme="https://www.towerofkubes.com/tags/homeassistant/"/><category term="homelab" label="Homelab" scheme="https://www.towerofkubes.com/tags/homelab/"/><category term="smarthome" label="Smarthome" scheme="https://www.towerofkubes.com/tags/smarthome/"/><category term="self-hosted" label="Self-Hosted" scheme="https://www.towerofkubes.com/tags/self-hosted/"/><category term="til" label="Til" scheme="https://www.towerofkubes.com/tags/til/"/><published>2025-11-13T00:00:00Z</published></entry><entry><title>Istio Gateway</title><link rel="alternate" type="text/html" hreflang="en" href="https://www.towerofkubes.com/articles/istio-gateway/"/><id>https://www.towerofkubes.com/articles/istio-gateway/</id><updated>2025-10-19T00:00:00Z</updated><summary type="html">Istio is known for its service mesh capabilities, however it can also serve as a Gateway and Ingress Controller, with support for both Ingress resources and Gateway API resources.</summary><content type="html"><![CDATA[
<h2 class="relative group">Istio as a Gateway and Ingress Controller
    <div id="istio-as-a-gateway-and-ingress-controller" class="anchor"></div>
    
</h2>
<p>Istio is known for its service mesh capabilities, however it can also serve as a Gateway and Ingress Controller, with support for both <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource"  target="_blank" rel="noreferrer">Ingress resources</a> and <a href="https://kubernetes.io/docs/concepts/services-networking/gateway/#resource-model"  target="_blank" rel="noreferrer">Gateway API resources</a>. Some view this use-case as <a href="https://www.reddit.com/r/kubernetes/comments/1m1frpy/what_are_the_advantages_of_using_istio_over_nginx/"  target="_blank" rel="noreferrer">overkill</a>. However, my own testing of using Istio exclusively as a gateway (without a service mesh) proves that it can in fact work quite well for this purpose. This is strengthened by the benchmarks done by <a href="https://blog.howardjohn.info/"  target="_blank" rel="noreferrer">Howard John</a>.</p>

<h2 class="relative group">My Rationale for using Istio
    <div id="my-rationale-for-using-istio" class="anchor"></div>
    
</h2>
<p>Here’s one potential reason I found to use Istio for ingress/gateway instead of Envoy Gateway: Coraza WAF.</p>
<p>I was previously using <a href="https://kubernetes.github.io/ingress-nginx/"  target="_blank" rel="noreferrer">ingress-nginx</a> which has easy-to-enable <a href="https://kubernetes.github.io/ingress-nginx/user-guide/third-party-addons/modsecurity/"  target="_blank" rel="noreferrer">support for ModSecurity</a> and OWASP CRS (Core Rule Set). Since <a href="https://kubernetes.github.io/ingress-nginx/"  target="_blank" rel="noreferrer">ingress-nginx</a> is planned to eventually be replaced with <a href="https://github.com/kubernetes-sigs/ingate"  target="_blank" rel="noreferrer">InGate</a>, I decided to look at the currently available Gateway API implementations and what WAF (Web Application Firewall) support they have. I found out that the more modern alternative to ModSecurity is <a href="https://coraza.io/"  target="_blank" rel="noreferrer">OWASP Coraza WAF</a>. From my research it seems to be able to use Coraza with Envoy Gateway you have to use Tetrate Enterprise Gateway.</p>
<p>However, upon further research I found this OpenShift guide: <a href="https://www.redhat.com/en/blog/creating-web-application-firewall-red-hat-openshift"  target="_blank" rel="noreferrer">Creating a Web Application Firewall in Red Hat OpenShift</a>. This guide uses <a href="https://github.com/corazawaf/coraza-proxy-wasm"  target="_blank" rel="noreferrer">Coraza Proxy WASM</a> with Istio. Istio seems to be required in order to be able to use the <a href="https://istio.io/latest/docs/reference/config/proxy_extensions/wasm-plugin/"  target="_blank" rel="noreferrer">WasmPlugin custom resource</a>. I believe that following this guide it should work with Istio on non-OpenShift K8s just the same.</p>

<h2 class="relative group">My Installation
    <div id="my-installation" class="anchor"></div>
    
</h2>
<p>I can confirm this works even without OpenShift! I tested this on my Talos staging cluster. Once Istio is installed and configured with the WASM Plugin for OWASP Coraza WAF, test malicious requests get blocked as expected.</p>
<p>The difficult part for me was getting Istio installed and figuring it out how to configure it as a gateway for Ingress and HTTPRoute resources. I wanted to avoid using the more advanced features of Istio (service mesh, ambient mesh etc.), at least for now. I have not used Istio before so there was a learning curve, certainly more complex than ingress-nginx. However, once I got Istio working as a gateway like I wanted, applying the WASM Plugin was relatively straightforward.</p>
<p>This is the solution that I am now using for my “homelab-as-code” Talos cluster.</p>

<h2 class="relative group">Istio Gateway Installation
    <div id="istio-gateway-installation" class="anchor"></div>
    
</h2>
<p><strong>The main resources which I followed are:</strong></p>
<ol>
<li><a href="https://istio.io/latest/docs/"  target="_blank" rel="noreferrer">Istio / Documentation</a></li>
<li><a href="https://istio.io/latest/docs/setup/install/helm/"  target="_blank" rel="noreferrer">Istio / Install with Helm</a></li>
<li><a href="https://tetrate.io/blog/istio-ingressclass-controller-with-helm"  target="_blank" rel="noreferrer">How to Install and Configure Istio Ingress with Helm</a></li>
<li><a href="https://www.redhat.com/en/blog/creating-web-application-firewall-red-hat-openshift"  target="_blank" rel="noreferrer">Creating a Web Application Firewall in Red Hat OpenShift</a></li>
</ol>
<p>I followed these resources, then adapted them for my own Argo CD GitOps structure and made them work with my existing <a href="https://github.com/adyanth/cloudflare-operator"  target="_blank" rel="noreferrer">adyanth/cloudflare-operator</a> and <a href="https://cert-manager.io/"  target="_blank" rel="noreferrer">cert-manager</a> deployments. I used some Istio custom resources to make the same Istio Gateway work with both <a href="https://kubernetes.io/docs/concepts/services-networking/ingress/#the-ingress-resource"  target="_blank" rel="noreferrer">Ingress resources</a> and <a href="https://kubernetes.io/docs/concepts/services-networking/gateway/#resource-model"  target="_blank" rel="noreferrer">Gateway API resources</a>. This essentially made Istio a drop-in replacement for my previous ingress-nginx deployment (any existing Ingress resources now use Istio as the default ingress class), with the added ability to now use Gateway API.</p>

<h2 class="relative group">Benchmarks
    <div id="benchmarks" class="anchor"></div>
    
</h2>
<p><a href="https://blog.howardjohn.info/"  target="_blank" rel="noreferrer">Howard John</a> works on Istio, so is not entirely without bias (which he admits). Nevertheless, he has created <a href="https://github.com/howardjohn/gateway-api-bench"  target="_blank" rel="noreferrer">Gateway API Benchmarks</a>, a common set of tests to evaluate a Gateway API implementation. Istio comes out quite favorably in the benchmark ("✅ No issues were found"): <a href="https://github.com/howardjohn/gateway-api-bench"  target="_blank" rel="noreferrer">howardjohn/gateway-api-bench: Gateway API Benchmarks provides a common set of tests to evaluate a Gateway API implementation</a>.</p>

    <div class="admonition tip">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M272 384c9.6-31.9 29.5-59.1 49.2-86.2c0 0 0 0 0 0c5.2-7.1 10.4-14.2 15.4-21.4c19.8-28.5 31.4-63 31.4-100.3C368 78.8 289.2 0 192 0S16 78.8 16 176c0 37.3 11.6 71.9 31.4 100.3c5 7.2 10.2 14.3 15.4 21.4c0 0 0 0 0 0c19.8 27.1 39.7 54.4 49.2 86.2l160 0zM192 512c44.2 0 80-35.8 80-80l0-16-160 0 0 16c0 44.2 35.8 80 80 80zM112 176c0 8.8-7.2 16-16 16s-16-7.2-16-16c0-61.9 50.1-112 112-112c8.8 0 16 7.2 16 16s-7.2 16-16 16c-44.2 0-80 35.8-80 80z"/></svg>
        <span><strong>UPDATE:</strong> John Howard has released <a href="https://github.com/howardjohn/gateway-api-bench/blob/main/README-v2.md"  target="_blank" rel="noreferrer">Gateway API Benchmarks - Part 2</a>. According to the new benchmarks, Istio is still among the leading Gateway API implementations; however, the new Agentgateway has better performance in the <a href="https://github.com/howardjohn/gateway-api-bench/blob/main/README-v2.md#route-scale"  target="_blank" rel="noreferrer">Route Scale</a> and <a href="https://github.com/howardjohn/gateway-api-bench/blob/main/README-v2.md#listenerset-scale"  target="_blank" rel="noreferrer">ListenerSet Scale</a> benchmarks.</span>
      </div>
    </div><hr>
<p><em>Featured image by <a href="https://unsplash.com/@sammoghadam?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Sam Moghadam</a> on <a href="https://unsplash.com/?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Unsplash</a>.</em></p>
]]></content><author><name>Ro'i Bandel</name></author><category term="istio" label="Istio" scheme="https://www.towerofkubes.com/tags/istio/"/><category term="gateway" label="Gateway" scheme="https://www.towerofkubes.com/tags/gateway/"/><category term="ingress" label="Ingress" scheme="https://www.towerofkubes.com/tags/ingress/"/><category term="homelab" label="Homelab" scheme="https://www.towerofkubes.com/tags/homelab/"/><category term="k8s" label="K8s" scheme="https://www.towerofkubes.com/tags/k8s/"/><published>2025-10-19T00:00:00Z</published></entry><entry><title>KYAML</title><link rel="alternate" type="text/html" hreflang="en" href="https://www.towerofkubes.com/articles/kyaml/"/><id>https://www.towerofkubes.com/articles/kyaml/</id><updated>2025-08-11T00:00:00Z</updated><summary type="html">Today I learned, in Kubernetes v1.34, kubectl will also support a new strict subset of YAML called KYAML.</summary><content type="html"><![CDATA[<p>Today I learned, in Kubernetes v1.34, <code>kubectl</code> will also support a new strict subset of YAML called KYAML.</p>

<h2 class="relative group">Resources
    <div id="resources" class="anchor"></div>
    
</h2>
<ul>
<li><a href="https://kubernetes.io/blog/2025/07/28/kubernetes-v1-34-sneak-peek/#support-for-kyaml-a-kubernetes-dialect-of-yaml"  target="_blank" rel="noreferrer">Support for KYAML: a Kubernetes dialect of YAML | Kubernetes v1.34 Sneak Peek | Kubernetes</a></li>
<li><a href="https://thenewstack.io/kubernetes-is-getting-a-better-yaml/"  target="_blank" rel="noreferrer">Kubernetes Will Solve YAML Headaches with KYAML - The New Stack</a></li>
<li><a href="https://medium.com/@simardeep.oberoi/kyaml-kubernetes-answer-to-yaml-s-configuration-chaos-0c0c09f51587"  target="_blank" rel="noreferrer">KYAML: Kubernetes’ Answer to YAML’s Configuration Chaos | by Simardeep Singh | Aug, 2025 | Medium</a></li>
<li><a href="https://kubernetes.io/blog/2025/08/27/kubernetes-v1-34-release/#alpha-support-for-kyaml-a-kubernetes-dialect-of-yaml"  target="_blank" rel="noreferrer">Kubernetes v1.34: Of Wind & Will (O’ WaW)</a></li>
</ul>

<h2 class="relative group">Shell Script
    <div id="shell-script" class="anchor"></div>
    
</h2>
<p>I coded a simple script to convert all Kubernetes manifests in a directory from YAML to KYAML.</p>
<p>Initially, I wanted to code my own converter, but then found out that the upstream Kubernetes project already has a new yamlfmt tool (different from <a href="https://github.com/google/yamlfmt"  target="_blank" rel="noreferrer">google/yamlfmt</a>).</p>
<div class="highlight-wrapper"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="cp">#!/bin/sh
</span></span></span><span class="line"><span class="cl"><span class="c1"># kyamlify.sh — Rename *.yaml -> *.kyaml then format to KYAML (POSIX)</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Usage: ./kyamlify.sh [ROOT_DIR]</span>
</span></span><span class="line"><span class="cl"><span class="c1"># Env: YAMLFMT_VERSION (default: master)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">set</span> -eu
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">ROOT_DIR</span><span class="o">=</span><span class="s2">"</span><span class="si">${</span><span class="nv">1</span><span class="k">:-</span><span class="nv">kubernetes</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl"><span class="nv">YAMLFMT_VERSION</span><span class="o">=</span><span class="s2">"</span><span class="si">${</span><span class="nv">YAMLFMT_VERSION</span><span class="k">:-</span><span class="nv">master</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Require Go</span>
</span></span><span class="line"><span class="cl"><span class="nb">command</span> -v go >/dev/null 2><span class="p">&</span><span class="m">1</span> <span class="o">||</span> <span class="o">{</span> <span class="nb">echo</span> <span class="s2">"error: Go not found in PATH"</span> ><span class="p">&</span>2<span class="p">;</span> <span class="nb">exit</span> 1<span class="p">;</span> <span class="o">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"→ Installing yamlfmt @ </span><span class="nv">$YAMLFMT_VERSION</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">go install <span class="s2">"sigs.k8s.io/yaml/yamlfmt@</span><span class="si">${</span><span class="nv">YAMLFMT_VERSION</span><span class="si">}</span><span class="s2">"</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">"→ Formatting all YAML files under </span><span class="si">${</span><span class="nv">ROOT_DIR</span><span class="si">}</span><span class="s2"> as KYAML"</span>
</span></span><span class="line"><span class="cl">find <span class="s2">"</span><span class="si">${</span><span class="nv">ROOT_DIR</span><span class="si">}</span><span class="s2">"</span> -type f -name <span class="s1">'*.yaml'</span> -print0 <span class="se">\
</span></span></span><span class="line"><span class="cl">  <span class="p">|</span> xargs -0 -n1 <span class="s2">"</span><span class="k">$(</span>go env GOPATH<span class="k">)</span><span class="s2">/bin/yamlfmt"</span> -o kyaml -w</span></span></code></pre></div></div>

<h2 class="relative group">KYAML Rules
    <div id="kyaml-rules" class="anchor"></div>
    
</h2>

    <div class="admonition quote">
      <div class="admonition-header"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M448 296c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72zm-256 0c0 66.3-53.7 120-120 120l-8 0c-17.7 0-32-14.3-32-32s14.3-32 32-32l8 0c30.9 0 56-25.1 56-56l0-8-64 0c-35.3 0-64-28.7-64-64l0-64c0-35.3 28.7-64 64-64l64 0c35.3 0 64 28.7 64 64l0 32 0 32 0 72z"/></svg>
        <span>Quote</span>
      </div>
      <div class="admonition-content">
        <p><a href="https://kep.k8s.io/5295"  target="_blank" rel="noreferrer">KEP-5295</a> introduces KYAML, which tries to address the most significant problems by:</p>
<ul>
<li>Always double-quoting value strings</li>
<li>Leaving keys unquoted unless they are potentially ambiguous</li>
<li>Always using <code>{}</code> for mappings (associative arrays)</li>
<li>Always using <code>[]</code> for lists</li>
</ul>
      </div>
    </div><ul>
<li><a href="https://kubernetes.io/blog/2025/07/28/kubernetes-v1-34-sneak-peek/#support-for-kyaml-a-kubernetes-dialect-of-yaml"  target="_blank" rel="noreferrer">Support for KYAML: a Kubernetes dialect of YAML | Kubernetes v1.34 Sneak Peek | Kubernetes</a></li>
</ul>
<p>These rules are similar in practice to <a href="https://json5.org/"  target="_blank" rel="noreferrer">JSON5</a>. However, while JSON5 is a <em>superset</em> of JSON (as well as a <em>subset</em> of ES5), KYAML is a <em>subset</em> of YAML.</p>
<p>In fact, I suspect that by adding <code>---</code> to the first line of a JSON5 file, it would be valid KYAML.</p>
<p>By the way, starting the file with <code>---</code> is <strong>required</strong> for KYAML (while it’s optional in YAML).</p>

<h2 class="relative group">Experimentation and Additional Observations
    <div id="experimentation-and-additional-observations" class="anchor"></div>
    
</h2>
<ul>
<li>I was initially excited about converting all my Kubernetes manifests to the “safer” KYAML format.</li>
<li>I ran my script then followed it by running <a href="https://github.com/adrienverge/yamllint"  target="_blank" rel="noreferrer"><code>yamllint</code></a>, which introduced a few warnings post-conversion.</li>
<li>After fixing all yamllint warnings, I had well-formatted KYAML files.</li>
<li>I considered whether to rename all converted manifest files to use a <code>*.kyaml</code> suffix. I decided against this since I couldn’t find any evidence of this file extension.</li>
<li>KYAML files are 100% valid YAML files, and work with existing tooling. This includes existing Kubernetes versions and tooling.</li>
<li>The main thing introduced with Kubernetes v1.34 is a <code>kubectl get -o kyaml</code> option.</li>
<li>Keeping the <code>*.yaml</code> file extension makes sense since KYAML is still valid YAML and existing tools expect <code>*.yaml</code> or <code>*.yml</code> file extensions, not <code>*.kyaml</code></li>
<li>After running the script, fixing formatting, and deciding to keep the filenames the same, I could add all modified files in <code>homelab-as-code</code> to a new <code>kyaml</code> branch and make a commit.</li>
<li>I considered opening a Pull Request, however, am still undecided.</li>
<li>My main consideration is whether the KYAML format would impact usability, making it harder for me to write and edit manifests.</li>
<li>I am not sure whether KYAML solves any real problems for me.</li>
<li>I understand YAML limitations but know how to avoid them by quoting values when needed, using linting and formatting tools (manually, with <a href="https://pre-commit.com/"  target="_blank" rel="noreferrer">pre-commit</a>and in CI).</li>
</ul>

<h2 class="relative group">My Opinion on the Format
    <div id="my-opinion-on-the-format" class="anchor"></div>
    
</h2>
<p>In a way, KYAML is itself “yet another markup language” (despite using existing YAML rules). It is far from the first solution to problems with existing markup languages.</p>
<p>One notable limitation of standarad JSON is no comments. Both <a href="https://json5.org/"  target="_blank" rel="noreferrer">JSON5</a> and Microsoft’s <a href="https://github.com/microsoft/node-jsonc-parser"  target="_blank" rel="noreferrer">JSONC</a> (JSON with comments, primarily used in VS Code’s <a href="https://code.visualstudio.com/docs/configure/settings#_settings-json-file"  target="_blank" rel="noreferrer">setttings.json</a> file) previously addressed this. KYAML has the benefit of being a <em>subset</em> of YAML and designed to work with all existing YAML tooling.</p>
<p>In theory, KYAML could be a “safer” way to write production-grade manifests. However, this was already possible to do with JSON files. Kubernetes manifests can all be written in JSON, but there is a reason that this is rarely done in practice.</p>
<p>JSON files are arguably less readable and harder to work with (for humans, not machines) than YAML. At the same time, JSON files are very much machine-parsable with a lot of existing tooling like <a href="https://jqlang.org/"  target="_blank" rel="noreferrer">jq</a> (though YAML tooling exists as well).</p>
<p>In imitating JSON but staying YAML, KYAML can feel like the worst of both, rather than the best of both world. Not as clean as JSON, and not as “human-readable” as YAML.</p>
<hr>
<p><em>Featured image by <a href="https://unsplash.com/@marvelous?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Marvin Meyer</a> on <a href="https://unsplash.com/?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Unsplash</a>.</em></p>
]]></content><author><name>Ro'i Bandel</name></author><category term="kubernetes" label="Kubernetes" scheme="https://www.towerofkubes.com/tags/kubernetes/"/><category term="k8s" label="K8s" scheme="https://www.towerofkubes.com/tags/k8s/"/><category term="yaml" label="Yaml" scheme="https://www.towerofkubes.com/tags/yaml/"/><category term="tools" label="Tools" scheme="https://www.towerofkubes.com/tags/tools/"/><category term="til" label="Til" scheme="https://www.towerofkubes.com/tags/til/"/><published>2025-08-11T00:00:00Z</published></entry><entry><title>The Ultimate Guide to Kubernetes Books: From Beginner to Certified Expert</title><link rel="alternate" type="text/html" hreflang="en" href="https://www.towerofkubes.com/articles/the-ultimate-guide-to-kubernetes-books/"/><id>https://www.towerofkubes.com/articles/the-ultimate-guide-to-kubernetes-books/</id><updated>2024-06-26T00:00:00Z</updated><summary type="html">In part one of this article series, I review several of the books and written materials that I have read while learning about Kubernetes.</summary><content type="html"><![CDATA[<p>While studying for the Certified Kubernetes Administrator certification last year, I wanted to take a deep dive into Kubernetes topics, both those covered by the certification and beyond.</p>
<p>As a develeap employee, I had access to all of <a href="https://www.develeap.com/courses/"  target="_blank" rel="noreferrer">develeap’s courses</a> which I used to learn more about Kubernetes. Alongside that, I wanted to supplement my learning with books and practice labs. After I earned the CKA certification, I decided to review the field of Kubernetes books, labs, and courses. In part one of this article series I reviewed several of the CKA courses I took in <a href="/articles/review-of-cka-courses/" >Review of CKA Courses</a>. In part two, I reviewed Kubernetes practice labs and mock exams in <a href="/articles/review-of-kubernetes-practice-labs/" >Review of Kubernetes Practice Labs</a>. In this part (part three), I will review several of the books and written materials that I have read while learning about Kubernetes.</p>

<h2 class="relative group">The Book of Kubernetes
    <div id="the-book-of-kubernetes" class="anchor"></div>
    
</h2>
<p><strong>Author:</strong> Alan Hohn</p>
<p><strong>Publisher:</strong> No Starch Press</p>
<p><strong>Publication Date:</strong> August 2022</p>
<p><strong>Link:</strong> <a href="https://nostarch.com/book-kubernetes"  target="_blank" rel="noreferrer">No Starch Press</a>  |  <a href="https://www.amazon.com/Book-Kubernetes-Comprehensive-Container-Orchestration-ebook/dp/B09WJYZKHN"  target="_blank" rel="noreferrer">Amazon</a>  |  <a href="https://www.penguinrandomhouse.com/books/710765/the-book-of-kubernetes-by-alan-hohn/"  target="_blank" rel="noreferrer">Penguin Random House</a>  |  <a href="https://www.oreilly.com/library/view/the-book-of/9781098141394/"  target="_blank" rel="noreferrer">O’Reilly</a></p>
<p>The Book of Kubernetes (not to be confused with The Kubernetes Book by <a href="https://nigelpoulton.com/books/"  target="_blank" rel="noreferrer">Nigel Poulton</a>, which I have not read) is written by Alan Hohn and published by No Starch Press. I was already a fan of No Starch Press, having read many of their previous books, and this book was brand new when I first read it, so it was naturally my first choice when wanting to read more about Kubernetes.</p>
<p>This book serves as an introduction to Kubernetes. Although it assumes some sysadmin knowledge (and gets quite technical fairly fast), you don’t need to know anything about containers, as everything is explained—especially in the first part.</p>
<p>The book is split into 20 chapters across three parts. The first part, “Making and Using Containers,” serves as a fairly comprehensive overview of what containers actually are, as well as their benefits. In fact, I would go as far as to say this book might be the best explanation I’ve read about containers; too often I see simplified explanations about containers boiled down to “containers are like virtual machines but not really”. This book actually goes through the effort of explaining the technical underpinnings of containers, and how they use the fundamental capabilities of the Linux kernel, like namespaces and cgroups, to provide containers process isolation, resource limiting and network namespaces. This is first explained using Docker, the most used container tool, but later on the chapter shows how to achieve the same results using <code>containerd</code>  as well as  <code>CRI-O</code>  and  <code>crictl</code>. Showing how the same container image can be run through different container runtimes and tools, helped me understand the universal nature of OCI containers and the way Kubernetes can interface with containers through the CRI protocol.</p>
<p>The next two parts, “Containers in Kubernetes” and “Performant Kubernetes,” focus on many important Kubernetes topics. Along the book are examples which you can deploy yourself from <a href="https://github.com/book-of-kubernetes/examples"  target="_blank" rel="noreferrer">the book’s GitHub repo</a>. These are automated exercises that can be deployed using Ansible and run on either Vagrant (virtual machines) or AWS. These examples are very useful for hands-on understanding of the topics, and having them all automated while offering different ways to deploy – makes them very useful.</p>
<p>I will note that this book isn’t specifically designed to prepare readers for the Certified Kubernetes Administrator (CKA) exam. While it covers many relevant topics, there are some key CKA subjects not included, and conversely, some topics explored here might not directly align with the CKA curriculum (for example, Custom Resource Definitions). This, however, isn’t a drawback – the book excels in its own right, just keep this in mind if your primary goal is CKA certification.</p>

<h2 class="relative group">Certified Kubernetes Administrator (CKA) Study Guide
    <div id="certified-kubernetes-administrator-cka-study-guide" class="anchor"></div>
    
</h2>
<p><strong>Author:</strong> Benjamin Muschko</p>
<p><strong>Publisher:</strong> O’Reilly Media, Inc.</p>
<p><strong>Publication Date:</strong> June 2022</p>
<p><strong>Link:</strong> <a href="https://www.oreilly.com/library/view/certified-kubernetes-administrator/9781098107215/"  target="_blank" rel="noreferrer">O’Reilly</a>  |  <a href="https://www.amazon.com/Certified-Kubernetes-Administrator-Study-Depth/dp/1098107225"  target="_blank" rel="noreferrer">Amazon</a>  |  <a href="https://www.ebooks.com/aff.asp?aid=42634&isbn=9781098107222"  target="_blank" rel="noreferrer">eBooks.com</a></p>
<p>My one “complaint” about the No Starch book was that it was not a CKA study guide (it was not really a complaint, just an observation). Well, this book is! After No Starch Press, my other favorite publisher for technical books is O’Reilly, which has maintained a high standard for decades.</p>
<p>This book has everything you’d expect from a study guide. There are detailed explanations of everything you need to know in the CKA curriculum. There are useful tips for the exam and practice questions which are at a good level. For some of the practice questions you get automated Vagrant environments from <a href="https://github.com/bmuschko/cka-study-guide"  target="_blank" rel="noreferrer">the book’s GitHub repo</a>, however for many questions you will have to set up a practice cluster yourself (or use Killercoda).</p>
<p>In some places the book mentions optionally using Kubernetes environments in Katacoda. This was a service offered by O’Reilly, unfortunately <a href="https://kubernetes.io/blog/2023/02/14/kubernetes-katacoda-tutorials-stop-from-2023-03-31/"  target="_blank" rel="noreferrer">public use of Katacoda was recently shut down</a>. This decision must have happened around the same time this book was published, but due to the unfortunate timing, Katacoda is still mentioned in this book. Fortunately this book does not really rely on using Katacoda to understand its material, it is merely offered as another option for practice. Now, <a href="https://itnext.io/katacoda-alternative-1d33599af75f"  target="_blank" rel="noreferrer">Killercoda is available as a form of replacement for Katacoda</a> (reviewed below).</p>
<p>Overall this book serves its purpose well as a written CKA study guide.</p>

<h2 class="relative group">Learning CoreDNS
    <div id="learning-coredns" class="anchor"></div>
    
</h2>
<p><strong>Author:</strong> John Belamaric, Cricket Liu</p>
<p><strong>Publisher:</strong> O’Reilly Media, Inc.</p>
<p><strong>Publication Date:</strong> September 2019</p>
<p><strong>Link:</strong> <a href="https://www.oreilly.com/library/view/learning-coredns/9781492047957/"  target="_blank" rel="noreferrer">O’Reilly</a>  |  <a href="https://www.amazon.com/Learning-CoreDNS-Configuring-Native-Environments/dp/1492047961"  target="_blank" rel="noreferrer">Amazon</a>  |  <a href="https://www.ebooks.com/aff.asp?aid=42634&isbn=9781492047964"  target="_blank" rel="noreferrer">eBooks.com</a></p>
<p>This book is, of course, about CoreDNS, the modern DNS server used for Kubernetes. Despite being about CoreDNS, it also focuses on Kubernetes networking and service discovery. It’s a good read for anyone who wants to understand Kubernetes networking on a deeper level. It’s more detailed than what is required to know for the CKA exam, but more knowledge is always good.</p>
<p>The book starts by explaining what CoreDNS is and why a new DNS for the container and micro-service was needed. It compares CoreDNS with BIND 9 (a more traditional DNS server), and explains the pros and cons of each. Spoiler: CoreDNS is not necessarily a replacement for BIND 9, they have different usages.</p>
<p>The book then dives deeper into how CoreDNS works with Kubernetes and etcd for service discovery, and delves into modern workflows and best practices (including Prometheus monitoring).</p>
<p>If you want to understand CoreDNS well, then there is probably no better book. For learning Kubernetes networking specifically for the CKA exam, this book is not the best option as it focuses on concepts that are not that important for the exam itself, while at the same time not delving too deeply into concepts which <em>are</em> important (such as Kubernetes Ingresses).</p>

<h2 class="relative group">Kubernetes Documentation
    <div id="kubernetes-documentation" class="anchor"></div>
    
</h2>
<p><strong>Link:</strong> <a href="https://kubernetes.io/docs/"  target="_blank" rel="noreferrer">https://kubernetes.io/docs/</a></p>
<p>Of course, this is not a book but a website, one that everyone working with Kubernetes must be familiar with—and especially anyone taking one of the certification exams where this resource is allowed.</p>
<p>The Kubernetes Documentation has tons of relevant information; almost everything you would need to know for the CKA and CKAD exams is included in these docs. Of course, the documentation goes beyond what you need to know for the exams. If you want to become an expert on everything you can do with “stock” Kubernetes, you could read the entire documentation. Or you can focus on reading the sections that are most relevant to you.</p>
<p>Since I used other resources to study for the CKA certification, I did not read the documentation cover-to-cover.<sup id="fnref:1"><a href="#fn:1" class="footnote-ref" role="doc-noteref">1</a></sup> I did, however, use the documentation frequently to reiterate the concepts that I learned, as well as during practice labs and mock exams. Whenever I needed to find out how to do something in Kubernetes, rather than searching Google, I searched through the Kubernetes Documentation first. For example, say I wanted to find a YAML template for deploying a PersistentVolumeClaim; I would go into the Kubernetes Docs and type “PVC” into the search bar, then click “ <a href="https://kubernetes.io/docs/tasks/configure-pod-container/configure-persistent-volume-storage/"  target="_blank" rel="noreferrer"><strong>Configure a Pod to Use a PersistentVolume for Storage</strong></a>”, which explains PVCs and other relevant concepts.</p>
<p>I found this learning method to be very effective. When preparing for the CKA/CKAD exams, you should be adept at finding relevant information from the documents quickly and efficiently.<sup id="fnref:2"><a href="#fn:2" class="footnote-ref" role="doc-noteref">2</a></sup> This is why I recommend using the documents as much as possible while studying. You don’t have to read everything in the documents, but you should be familiar with the content they include and how to find it using the built-in search.
Configure a Pod to Use a PersistentVolume for Storage,
I highly recommend exploring the Kubernetes Docs yourself and seeing what they offer. There are sections explaining common tasks, a One-page API Reference for Kubernetes v1.30, and even <a href="https://kubernetes.io/docs/tutorials/"  target="_blank" rel="noreferrer">Tutorials</a>.</p>
<hr>
<p><em>Featured image by <a href="https://unsplash.com/@itfeelslikefilm?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">🇸🇮 Janko Ferlič</a> on <a href="https://unsplash.com/photos/photo-of-library-with-turned-on-lights-sfL_QOnmy00?utm_source=hugo&utm_medium=referral"  target="_blank" rel="noreferrer">Unsplash</a>.</em></p>
<div class="footnotes" role="doc-endnotes">
<hr>
<ol>
<li id="fn:1">
<p>In fact the Kubernetes Docs <em>can’t</em> be read cover-to-cover because they are not a book and therefore lack a cover. <a href="#fnref:1" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
<li id="fn:2">
<p>The CKA exam has its own way of scoring things and is not public. You get a score sometime after completing the exam, but you won’t know which questions you answered correctly. <a href="#fnref:2" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>
</ol>
</div>
]]></content><author><name>Ro'i Bandel</name></author><category term="kubernetes" label="Kubernetes" scheme="https://www.towerofkubes.com/tags/kubernetes/"/><category term="k8s" label="K8s" scheme="https://www.towerofkubes.com/tags/k8s/"/><published>2024-06-26T00:00:00Z</published></entry><entry><title>Review of Kubernetes Practice Labs</title><link rel="alternate" type="text/html" hreflang="en" href="https://www.towerofkubes.com/articles/review-of-kubernetes-practice-labs/"/><id>https://www.towerofkubes.com/articles/review-of-kubernetes-practice-labs/</id><updated>2024-06-26T00:00:00Z</updated><summary type="html">In part two of the series, I reviewed Kubernetes practice labs and mock exams.</summary><content type="html"><![CDATA[<figure><img
    class="my-0 rounded-md"
    loading="lazy"
    decoding="async"
    fetchpriority="auto"
    alt="Review of Kubernetes Practice Labs"
    width="1200"
    height="789"
    src="/articles/review-of-kubernetes-practice-labs/Kubernetes-Book_hu_ed4744fe6c114e18.png"
    srcset="/articles/review-of-kubernetes-practice-labs/Kubernetes-Book_hu_ed4744fe6c114e18.png 800w, /articles/review-of-kubernetes-practice-labs/Kubernetes-Book.png 1280w"
    sizes="(min-width: 768px) 50vw, 65vw"
    data-zoom-src="/articles/review-of-kubernetes-practice-labs/Kubernetes-Book.png"></figure>
<p>While studying for the Certified Kubernetes Administrator certification last year, I wanted to take a deep dive into Kubernetes topics, both those covered by the certification and beyond.</p>
<p>As a develeap employee, I had access to all of <a href="https://www.develeap.com/courses/"  target="_blank" rel="noreferrer">develeap’s courses</a> which I used to learn more about Kubernetes. Alongside that, I wanted to supplement my learning with books and practice labs. After I earned the CKA certification, I decided to review the field of Kubernetes books and practice labs. In part one of this article series I reviewed several of the CKA courses I took in <a href="/articles/review-of-cka-courses/" >Review of CKA Courses</a>. In this part (part two), I reviewed Kubernetes practice labs and mock exams. In part three, I share my take on written materials in <a href="/articles/the-ultimate-guide-to-kubernetes-books/" >The Ultimate Guide to Kubernetes Books: From Beginner to Certified Expert</a>.</p>

<h2 class="relative group">Killercoda
    <div id="killercoda" class="anchor"></div>
    
</h2>
<p><strong>Link:</strong> <a href="https://killercoda.com/killer-shell-cka"  target="_blank" rel="noreferrer">Killercoda CKA Area</a></p>
<p><strong>CKAD Equivalent:</strong> <a href="https://killercoda.com/killer-shell-ckad"  target="_blank" rel="noreferrer">Killercoda CKAD Area</a></p>
<p>Killercoda offers free labs! Although Killercoda does offer <a href="https://killercoda.com/pricing"  target="_blank" rel="noreferrer">subscriptions</a>, the paid features which are currently included are not major. I’d say the main reason to consider a subscription is if you are using Killercoda frequently and want to support what they are doing. Honestly, what they are doing is  <em>excellent</em> and worth supporting.</p>
<p>With a free account you can access various different environments and scenarios. The ones offered are very good and worth doing. I especially like the CKA Playground environment, designed to be similar to the current environment used by the CKA exam. You can use the Killecoda playgrounds to freely play around with Kubernetes, without being constrained to a specific scenario. This is really useful, for example if you just want to try out some commands to see what they do.</p>
<p>In addition, the environments load <em>fast</em>. This is impressive considering this is all available on the free tier.</p>

<h2 class="relative group">Killer Shell
    <div id="killer-shell" class="anchor"></div>
    
</h2>
<p><strong>Link:</strong> <a href="https://killer.sh/"  target="_blank" rel="noreferrer">Killer Shell CKA Simulator</a></p>
<p><strong>CKAD Equivalent:</strong> <a href="https://killer.sh/ckad"  target="_blank" rel="noreferrer">Killer Shell CKAD Simulator</a></p>
<p>Killer Shell is created and maintained by the same team as Killercoda (led by <a href="https://wuestkamp.com/"  target="_blank" rel="noreferrer">Kim Wüstkamp</a>), however they have notable differences. You can  <a href="https://killercoda.com/killer-shell"  target="_blank" rel="noreferrer">read their own comparison here</a>; to summarize, while Killercoda allows you to practice exam topics, it is not an exam  <em>simulator.</em></p>
<p>Killer Shell <em>is</em> an exam simulator. In fact, it is the official exam simulator for the CKA, CKAD and CKS certifications (and soon the LFCT certification as well). Although using Killer Shell on its own is not free, you get two sessions included when signing up for any of these certifications.</p>
<p>Each session lasts 36 hours and includes an exam simulation that is designed to closely mirror the real exam environment. This means you get not only a terminal, but also a full XFCE desktop to work in. You get to work on 25 questions (plus a few extra questions) across several different Kubernetes clusters. You have a two-hour timer. However, after the two hours pass, you can continue to answer the questions at your own pace (up to the 36-hour time limit of the session).</p>
<p>To be honest, it’s very hard to answer all 25 questions within the two-hour limit… The questions in the Killer Shell exam are designed to be slightly harder than in the real exam. In addition, in the real exam, you are likely to get less than 25 questions to answer within the two-hour limit. My advice is not to focus too heavily on the time limit. However, do make sure you can answer all questions, even if it takes you longer than two hours. Nevertheless, you should be trying to find ways in which you can work fast and most efficiently; for example setting aliases and environment variables, and learning Vim shortcuts. These tricks will help you in the real exam, and the exam simulation is the best place to practice.</p>
<p>After the two-hour timer passes (which you can also end early), you get to see an automated scoring system that checks which questions you answered correctly. The exam, however, still continues in the background, and you can go back to questions and fix your answers. I noticed the automated scoring system sometimes takes a few minutes to update, which led to some confusing situations where I tried to fix an answer but had to wait a few minutes to confirm I answered correctly. Another nitpick is the automated scoring system is a bit overly strict in the way it likes its answers. For example, in one of the early questions, you have to write a shell script to do a simple task; this can be done in several ways, but in practice, the script has to be written in the <em>exact</em> way that the automated scoring system expects (you can’t even use a shebang, as a friend of mine found out while trying out Killer Shell). I don’t know if the real exam is as strict with its scoring as Killer Shell.</p>
<p>In the real CKA exam you don’t get to see which questions you answered correctly, that’s why you should practice checking your own answers. After answering questions, you should verify that you did things correctly using different commands. Again this is something which of course can be practiced within the Killer Shell environment.</p>
<p>As I mentioned, you get two Killer Shell sessions after signing up for a certification. It’s worth noting that both sessions will have the same questions. In my case I found that one session was sufficient for preparing for the real exam. However if you didn’t do well in the first session, then that’s a good sign you should go back to practice and learn the concepts that you struggled with. Once you are able to get a good score at Killer Shell, you will know you are ready for the exam.</p>
<p>As for when to take the Killer Shell exam, it is often recommended to take it relatively close to the real exam (say within one week), after you have thoroughly learned using other resources. If you are already experienced in using Kubernetes and wondering if you need to spend time on courses, you could test yourself by doing a Killer Shell simulation session first and see how well you do.</p>
]]></content><author><name>Ro'i Bandel</name></author><category term="kubernetes" label="Kubernetes" scheme="https://www.towerofkubes.com/tags/kubernetes/"/><category term="k8s" label="K8s" scheme="https://www.towerofkubes.com/tags/k8s/"/><published>2024-06-26T00:00:00Z</published></entry></feed>