<?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: Ajit Singh</title>
    <description>The latest articles on DEV Community by Ajit Singh (@code_cursor).</description>
    <link>https://dev.to/code_cursor</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%2F3746081%2Fe56390a0-88e7-44ad-a7dd-d7eb38986962.jpg</url>
      <title>DEV Community: Ajit Singh</title>
      <link>https://dev.to/code_cursor</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/code_cursor"/>
    <language>en</language>
    <item>
      <title>3 Data Structures Every Backend Engineer Should Know (That Aren't Trees or Hash Maps)</title>
      <dc:creator>Ajit Singh</dc:creator>
      <pubDate>Fri, 06 Feb 2026 11:48:54 +0000</pubDate>
      <link>https://dev.to/code_cursor/3-data-structures-every-backend-engineer-should-know-that-arent-trees-or-hash-maps-37ap</link>
      <guid>https://dev.to/code_cursor/3-data-structures-every-backend-engineer-should-know-that-arent-trees-or-hash-maps-37ap</guid>
      <description>&lt;p&gt;Most engineers know arrays, hash maps, and trees. But behind the scenes, systems like &lt;strong&gt;Redis, Cassandra, BigQuery, and Google Chrome&lt;/strong&gt; rely on a different breed of data structures - ones that trade perfect accuracy for massive memory savings.&lt;/p&gt;

&lt;p&gt;These are &lt;strong&gt;probabilistic data structures&lt;/strong&gt;. They give you approximate answers using a fraction of the memory that exact approaches would need.&lt;/p&gt;

&lt;p&gt;In this post, I'll walk through the three most useful ones:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data Structure&lt;/th&gt;
&lt;th&gt;Question It Answers&lt;/th&gt;
&lt;th&gt;Used By&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bloom Filter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"Is this item in the set?"&lt;/td&gt;
&lt;td&gt;Cassandra, Chrome, Akamai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Count-Min Sketch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"How many times has this appeared?"&lt;/td&gt;
&lt;td&gt;Redis, PostgreSQL, network monitors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;HyperLogLog&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"How many unique items are there?"&lt;/td&gt;
&lt;td&gt;Redis, BigQuery, Spark&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Let's break each one down.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Bloom Filter - Membership Testing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; You have 1 billion usernames. You want to check if a username is taken. Storing them all in a hash set needs 20+ GB of RAM.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; A Bloom filter does it in ~1.2 GB with 1% false positive rate.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;A Bloom filter uses a &lt;strong&gt;bit array&lt;/strong&gt; and &lt;strong&gt;multiple hash functions&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To add&lt;/strong&gt; an item: hash it with each function, set those bit positions to 1&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To check&lt;/strong&gt; an item: hash it, check if ALL positions are 1

&lt;ul&gt;
&lt;li&gt;If any bit is 0 → &lt;strong&gt;definitely not in the set&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;If all bits are 1 → &lt;strong&gt;probably in the set&lt;/strong&gt; (false positive possible)
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add "hello" (hashes to positions 2, 5, 9):

Index:  0  1  2  3  4  5  6  7  8  9  10 11
Bits:   0  0  1  0  0  1  0  0  0  1  0  0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The key guarantee: &lt;strong&gt;no false negatives&lt;/strong&gt;. If the filter says "no," the item was never added. Period.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it matters
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cassandra&lt;/strong&gt; uses Bloom filters to skip disk reads for keys that don't exist - saving 90%+ of unnecessary I/O&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome&lt;/strong&gt; checks URLs against a Bloom filter of known malicious sites before hitting Google's servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Akamai CDN&lt;/strong&gt; avoids caching one-hit wonders by requiring items to appear in the Bloom filter before caching&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick implementation (Python)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BloomFilter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;__init__&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;hash_count&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hash_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hash_count&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bit_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;size&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hash_count&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bit_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;

    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;might_contain&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bit_array&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nf"&gt;hash&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hash_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;📖 &lt;strong&gt;Deep dive:&lt;/strong&gt; I wrote a comprehensive guide covering the math, optimal parameter selection, Counting Bloom Filters, Cuckoo Filters, and production implementation details - &lt;a href="https://singhajit.com/data-structures/bloom-filter/" rel="noopener noreferrer"&gt;How Bloom Filters Work&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. Count-Min Sketch - Frequency Estimation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; You're processing a stream of 1 billion events. You want to know which events are most frequent. Storing a counter per unique event would need gigabytes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; Count-Min Sketch tracks frequencies in a few hundred KB of fixed memory.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Count-Min Sketch uses a &lt;strong&gt;2D array&lt;/strong&gt; (d rows × w columns). Each row has its own hash function.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To add&lt;/strong&gt; an item: hash with each function, increment the counter at each (row, column)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To query&lt;/strong&gt; an item: hash with each function, return the &lt;strong&gt;minimum&lt;/strong&gt; of all counters
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add "apple" (hashes to columns 2, 5, 1):
Row 1: [0, 0, 1, 0, 0, 0, 0, 0]
Row 2: [0, 0, 0, 0, 0, 1, 0, 0]
Row 3: [0, 1, 0, 0, 0, 0, 0, 0]

Query "apple": min(1, 1, 1) = 1 ✓
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why the minimum?&lt;/strong&gt; Collisions can only &lt;em&gt;increase&lt;/em&gt; counters. The minimum across all rows is the least-inflated estimate. This means Count-Min Sketch &lt;strong&gt;never underestimates&lt;/strong&gt; - it might say 1,005 when the true count is 1,000, but never 995.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it's used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Network monitoring:&lt;/strong&gt; Track bytes per IP to detect DDoS attacks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis:&lt;/strong&gt; Has built-in Count-Min Sketch support (&lt;code&gt;CMS.INCRBY&lt;/code&gt;, &lt;code&gt;CMS.QUERY&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL:&lt;/strong&gt; Uses sketch-based statistics internally for query planning&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Finding heavy hitters:&lt;/strong&gt; Identify the top-K most frequent items in a stream&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The killer feature: mergeability
&lt;/h3&gt;

&lt;p&gt;Count-Min Sketches merge by &lt;strong&gt;adding&lt;/strong&gt; corresponding counters. Each server tracks local event frequencies, then you merge periodically for global counts. Perfect for distributed architectures.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Merge two sketches
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;depth&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;cms1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;cms2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;table&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;📖 &lt;strong&gt;Deep dive:&lt;/strong&gt; Full walkthrough with heavy hitter detection algorithms, parameter tuning, and production Redis examples - &lt;a href="https://singhajit.com/data-structures/count-min-sketch/" rel="noopener noreferrer"&gt;How Count-Min Sketch Works&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. HyperLogLog - Cardinality Estimation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; You need to show "unique visitors today" for a site with 100 million page views. Storing every visitor ID to count uniques would cost gigabytes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The solution:&lt;/strong&gt; HyperLogLog gives you the unique count using only &lt;strong&gt;12 KB of memory&lt;/strong&gt; - with ~1% error.&lt;/p&gt;

&lt;h3&gt;
  
  
  The core insight
&lt;/h3&gt;

&lt;p&gt;When you hash items uniformly, about half start with &lt;code&gt;0&lt;/code&gt;, a quarter start with &lt;code&gt;00&lt;/code&gt;, an eighth start with &lt;code&gt;000&lt;/code&gt;, and so on.&lt;/p&gt;

&lt;p&gt;If you've seen a hash with 20 leading zeros, you've probably seen around 2²⁰ ≈ 1 million unique items. That pattern is rare enough that it only appears after processing many items.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Hash each item to a 64-bit value&lt;/li&gt;
&lt;li&gt;Use first 14 bits to pick one of 16,384 &lt;strong&gt;registers&lt;/strong&gt; (buckets)&lt;/li&gt;
&lt;li&gt;Count leading zeros in the remaining bits&lt;/li&gt;
&lt;li&gt;Store the &lt;strong&gt;maximum&lt;/strong&gt; leading zero count per register&lt;/li&gt;
&lt;li&gt;Estimate cardinality using a &lt;strong&gt;harmonic mean&lt;/strong&gt; across all registers
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add "user_123":
  Hash → 64 bits
  First 14 bits → Register 5,782
  Remaining bits → 7 leading zeros
  registers[5782] = max(old_value, 7+1) = 8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Duplicates don't change anything - same item always hashes the same way. That's how it counts &lt;em&gt;unique&lt;/em&gt; items without storing them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory vs. accuracy
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Registers&lt;/th&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;th&gt;Standard Error&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1,024&lt;/td&gt;
&lt;td&gt;5 KB&lt;/td&gt;
&lt;td&gt;3.25%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;16,384&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12 KB&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.81%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65,536&lt;/td&gt;
&lt;td&gt;48 KB&lt;/td&gt;
&lt;td&gt;0.41%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Redis defaults to 16,384 registers. If the true count is 1,000,000, it'll report between ~991,900 and ~1,008,100.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it's used
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redis:&lt;/strong&gt; &lt;code&gt;PFADD&lt;/code&gt; / &lt;code&gt;PFCOUNT&lt;/code&gt; - 12 KB per key, any number of elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google BigQuery:&lt;/strong&gt; &lt;code&gt;APPROX_COUNT_DISTINCT()&lt;/code&gt; - orders of magnitude faster than exact count&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Apache Spark:&lt;/strong&gt; &lt;code&gt;approx_count_distinct()&lt;/code&gt; for distributed datasets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Presto/Trino, Druid, Elasticsearch:&lt;/strong&gt; All use HyperLogLog internally&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Merging for distributed counting
&lt;/h3&gt;

&lt;p&gt;HyperLogLog sketches merge by taking the &lt;strong&gt;max&lt;/strong&gt; per register:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;num_registers&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;merged&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;hll1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;hll2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;registers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each shard counts locally, merge at the end. No raw data transfer needed.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;📖 &lt;strong&gt;Deep dive:&lt;/strong&gt; Full algorithm walkthrough with bias correction, small/large range corrections, and implementation - &lt;a href="https://singhajit.com/data-structures/hyperloglog/" rel="noopener noreferrer"&gt;How HyperLogLog Works&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Comparison: Which One Do You Need?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Bloom Filter&lt;/th&gt;
&lt;th&gt;Count-Min Sketch&lt;/th&gt;
&lt;th&gt;HyperLogLog&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Answers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;"Is X in the set?"&lt;/td&gt;
&lt;td&gt;"How often did X appear?"&lt;/td&gt;
&lt;td&gt;"How many unique items?"&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Error type&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;False positives only&lt;/td&gt;
&lt;td&gt;Overestimates only&lt;/td&gt;
&lt;td&gt;± percentage error&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Memory&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;~1.2 MB per 1M items&lt;/td&gt;
&lt;td&gt;~100 KB (fixed)&lt;/td&gt;
&lt;td&gt;~12 KB (fixed)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Mergeable?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OR bit arrays&lt;/td&gt;
&lt;td&gt;Add counters&lt;/td&gt;
&lt;td&gt;Max per register&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deletable?&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No (standard)&lt;/td&gt;
&lt;td&gt;No (standard)&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Used by&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cassandra, Chrome&lt;/td&gt;
&lt;td&gt;Redis, PostgreSQL&lt;/td&gt;
&lt;td&gt;Redis, BigQuery, Spark&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Decision flowchart
&lt;/h3&gt;

&lt;p&gt;Ask yourself what question you need answered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Is this item in the set?"&lt;/strong&gt; → Bloom Filter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"How many times has this item appeared?"&lt;/strong&gt; → Count-Min Sketch&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"How many unique items are there?"&lt;/strong&gt; → HyperLogLog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"I need exact answers"&lt;/strong&gt; → Use a hash map/set (and accept the memory cost)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Common Thread
&lt;/h2&gt;

&lt;p&gt;All three structures share the same philosophy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Trade accuracy for memory&lt;/strong&gt; - accept small, bounded errors to achieve orders-of-magnitude memory savings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use hash functions&lt;/strong&gt; - map inputs uniformly to extract statistical properties&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support merging&lt;/strong&gt; - combine results from distributed nodes without raw data transfer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Never store the actual items&lt;/strong&gt; - they answer questions &lt;em&gt;about&lt;/em&gt; data without remembering the data itself&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is why they appear in virtually every large-scale system. When you're processing billions of items, exact answers often aren't worth the memory cost.&lt;/p&gt;




&lt;h2&gt;
  
  
  What to Read Next
&lt;/h2&gt;

&lt;p&gt;If you found this useful, I've written detailed guides on each structure with full implementations, mathematical proofs, and production patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔍 &lt;a href="https://singhajit.com/data-structures/bloom-filter/" rel="noopener noreferrer"&gt;How Bloom Filters Work&lt;/a&gt; - includes Counting Bloom Filters, Cuckoo Filters, and optimal parameter selection&lt;/li&gt;
&lt;li&gt;📊 &lt;a href="https://singhajit.com/data-structures/count-min-sketch/" rel="noopener noreferrer"&gt;How Count-Min Sketch Works&lt;/a&gt; - heavy hitter detection, Redis integration, and distributed merging&lt;/li&gt;
&lt;li&gt;📈 &lt;a href="https://singhajit.com/data-structures/hyperloglog/" rel="noopener noreferrer"&gt;How HyperLogLog Works&lt;/a&gt; - the full algorithm with bias correction and Redis PFADD/PFCOUNT examples&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For more on data structures and system design, check out &lt;a href="https://singhajit.com" rel="noopener noreferrer"&gt;singhajit.com&lt;/a&gt; - I publish weekly deep dives on the engineering behind real-world systems.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What probabilistic data structure have you used in production? Drop a comment below - I'd love to hear about your use case.&lt;/em&gt; 👇&lt;/p&gt;

</description>
      <category>datastructures</category>
      <category>programming</category>
      <category>backend</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Kubernetes Cheat Sheet: Essential kubectl Commands for Developers</title>
      <dc:creator>Ajit Singh</dc:creator>
      <pubDate>Mon, 02 Feb 2026 00:18:02 +0000</pubDate>
      <link>https://dev.to/code_cursor/kubernetes-cheat-sheet-essential-kubectl-commands-for-developers-43mn</link>
      <guid>https://dev.to/code_cursor/kubernetes-cheat-sheet-essential-kubectl-commands-for-developers-43mn</guid>
      <description>&lt;p&gt;This cheat sheet is everything I wish I had when I started with Kubernetes. It covers the commands you will actually use, organized by what you are trying to do. No theory dumps. Just practical commands that work.&lt;/p&gt;

&lt;p&gt;Bookmark this. You'll be back.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of Contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Getting Started&lt;/li&gt;
&lt;li&gt;Cluster and Context Management&lt;/li&gt;
&lt;li&gt;Pods&lt;/li&gt;
&lt;li&gt;Deployments&lt;/li&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Namespaces&lt;/li&gt;
&lt;li&gt;ConfigMaps and Secrets&lt;/li&gt;
&lt;li&gt;Logs and Debugging&lt;/li&gt;
&lt;li&gt;Resource Management&lt;/li&gt;
&lt;li&gt;Other Workload Types&lt;/li&gt;
&lt;li&gt;Common Debugging Workflows&lt;/li&gt;
&lt;li&gt;Productivity Tips&lt;/li&gt;
&lt;li&gt;Quick Reference Tables&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Before running commands, you need kubectl installed and configured.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install kubectl
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;macOS (Homebrew):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Linux (curl):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Download the latest release&lt;/span&gt;
curl &lt;span class="nt"&gt;-LO&lt;/span&gt; &lt;span class="s2"&gt;"https://dl.k8s.io/release/&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; https://dl.k8s.io/release/stable.txt&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;/bin/linux/amd64/kubectl"&lt;/span&gt;

&lt;span class="c"&gt;# Install kubectl&lt;/span&gt;
&lt;span class="nb"&gt;sudo install&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; root &lt;span class="nt"&gt;-g&lt;/span&gt; root &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 kubectl /usr/local/bin/kubectl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows (Chocolatey):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;choco&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;kubernetes-cli&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Windows (winget):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;winget&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;-e&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;Kubernetes.kubectl&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After installation, verify it works:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl version &lt;span class="nt"&gt;--client&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see output showing the client version. If you get "command not found", ensure kubectl is in your PATH.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check Your Setup
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check kubectl version&lt;/span&gt;
kubectl version &lt;span class="nt"&gt;--client&lt;/span&gt;

&lt;span class="c"&gt;# Check cluster connection&lt;/span&gt;
kubectl cluster-info

&lt;span class="c"&gt;# Check current context (which cluster you are talking to)&lt;/span&gt;
kubectl config current-context

&lt;span class="c"&gt;# List all nodes in cluster&lt;/span&gt;
kubectl get nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Understanding Kubernetes Objects
&lt;/h3&gt;

&lt;p&gt;Everything in Kubernetes is an object. Here is how they relate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TB
    subgraph Control["Control Plane"]
        API[API Server]
    end

    subgraph Objects["Core Objects"]
        D[Deployment]
        RS[ReplicaSet]
        P[Pod]
        S[Service]
        CM[ConfigMap]
        SEC[Secret]
    end

    D --&amp;gt; RS
    RS --&amp;gt; P
    S --&amp;gt; P
    CM --&amp;gt; P
    SEC --&amp;gt; P

    API --&amp;gt; D
    API --&amp;gt; S
    API --&amp;gt; CM
    API --&amp;gt; SEC
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Object&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pod&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Smallest deployable unit. Runs one or more containers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Deployment&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Manages pods. Handles scaling, updates, rollbacks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stable network endpoint. Load balances to pods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ConfigMap&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stores configuration data. Mounted into pods&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Secret&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stores sensitive data. Base64 encoded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Namespace&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Logical isolation. Groups related resources&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Cluster and Context Management
&lt;/h2&gt;

&lt;p&gt;When you work with multiple clusters (dev, staging, prod), context management becomes essential.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Contexts
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List all contexts&lt;/span&gt;
kubectl config get-contexts

&lt;span class="c"&gt;# Show current context&lt;/span&gt;
kubectl config current-context

&lt;span class="c"&gt;# Show full config&lt;/span&gt;
kubectl config view
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Switching Contexts
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Switch to a different cluster&lt;/span&gt;
kubectl config use-context production-cluster

&lt;span class="c"&gt;# Set default namespace for current context&lt;/span&gt;
kubectl config set-context &lt;span class="nt"&gt;--current&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-namespace

&lt;span class="c"&gt;# Create a new context&lt;/span&gt;
kubectl config set-context dev-context &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--cluster&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dev-cluster &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;dev-user &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;development
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Quick Tip: kubectx and kubens
&lt;/h3&gt;

&lt;p&gt;If you switch contexts frequently, install &lt;a href="https://github.com/ahmetb/kubectx" rel="noopener noreferrer"&gt;kubectx&lt;/a&gt;. It provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;kubectx&lt;/code&gt; to switch clusters quickly&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;kubens&lt;/code&gt; to switch namespaces quickly
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Instead of: kubectl config use-context production&lt;/span&gt;
kubectx production

&lt;span class="c"&gt;# Instead of: kubectl config set-context --current --namespace=my-app&lt;/span&gt;
kubens my-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Pods
&lt;/h2&gt;

&lt;p&gt;Pods are the atomic unit of Kubernetes. A pod runs one or more containers that share network and storage.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Pods
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List pods in current namespace&lt;/span&gt;
kubectl get pods

&lt;span class="c"&gt;# List pods in all namespaces&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-A&lt;/span&gt;

&lt;span class="c"&gt;# List pods with more details&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; wide

&lt;span class="c"&gt;# List pods with labels&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;--show-labels&lt;/span&gt;

&lt;span class="c"&gt;# Watch pods in real time&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-w&lt;/span&gt;

&lt;span class="c"&gt;# Get pod details&lt;/span&gt;
kubectl describe pod my-pod

&lt;span class="c"&gt;# Get pod YAML&lt;/span&gt;
kubectl get pod my-pod &lt;span class="nt"&gt;-o&lt;/span&gt; yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Creating Pods
&lt;/h3&gt;

&lt;p&gt;For production, always use Deployments instead of creating pods directly. Direct pods are not recreated when they die.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run a quick test pod&lt;/span&gt;
kubectl run nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx

&lt;span class="c"&gt;# Run and expose a port&lt;/span&gt;
kubectl run nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80

&lt;span class="c"&gt;# Run with environment variables&lt;/span&gt;
kubectl run myapp &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp:v1 &lt;span class="nt"&gt;--env&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"DB_HOST=localhost"&lt;/span&gt;

&lt;span class="c"&gt;# Generate YAML without creating (dry run)&lt;/span&gt;
kubectl run nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx &lt;span class="nt"&gt;--dry-run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;client &lt;span class="nt"&gt;-o&lt;/span&gt; yaml &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; pod.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deleting Pods
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Delete a pod&lt;/span&gt;
kubectl delete pod my-pod

&lt;span class="c"&gt;# Delete pod immediately (no grace period)&lt;/span&gt;
kubectl delete pod my-pod &lt;span class="nt"&gt;--grace-period&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0 &lt;span class="nt"&gt;--force&lt;/span&gt;

&lt;span class="c"&gt;# Delete all pods in namespace&lt;/span&gt;
kubectl delete pods &lt;span class="nt"&gt;--all&lt;/span&gt;

&lt;span class="c"&gt;# Delete pods by label&lt;/span&gt;
kubectl delete pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Interacting with Pods
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Execute command in pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec &lt;/span&gt;my-pod &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;ls&lt;/span&gt; /app

&lt;span class="c"&gt;# Get interactive shell&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my-pod &lt;span class="nt"&gt;--&lt;/span&gt; /bin/bash

&lt;span class="c"&gt;# For pods without bash&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my-pod &lt;span class="nt"&gt;--&lt;/span&gt; /bin/sh

&lt;span class="c"&gt;# Execute in specific container (multi-container pod)&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my-pod &lt;span class="nt"&gt;-c&lt;/span&gt; sidecar &lt;span class="nt"&gt;--&lt;/span&gt; /bin/bash

&lt;span class="c"&gt;# Copy file to pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;cp &lt;/span&gt;local-file.txt my-pod:/path/in/pod/

&lt;span class="c"&gt;# Copy file from pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;cp &lt;/span&gt;my-pod:/path/in/pod/file.txt ./local-copy.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Deployments
&lt;/h2&gt;

&lt;p&gt;Deployments manage pods and provide rolling updates, rollbacks, and scaling.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Deployments
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List deployments&lt;/span&gt;
kubectl get deployments

&lt;span class="c"&gt;# List with details&lt;/span&gt;
kubectl get deployments &lt;span class="nt"&gt;-o&lt;/span&gt; wide

&lt;span class="c"&gt;# Describe deployment&lt;/span&gt;
kubectl describe deployment my-deployment

&lt;span class="c"&gt;# Get deployment YAML&lt;/span&gt;
kubectl get deployment my-deployment &lt;span class="nt"&gt;-o&lt;/span&gt; yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Creating Deployments
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create deployment from image&lt;/span&gt;
kubectl create deployment nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx

&lt;span class="c"&gt;# Create with replicas&lt;/span&gt;
kubectl create deployment nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3

&lt;span class="c"&gt;# Generate YAML without creating&lt;/span&gt;
kubectl create deployment nginx &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx &lt;span class="nt"&gt;--dry-run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;client &lt;span class="nt"&gt;-o&lt;/span&gt; yaml &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; deployment.yaml

&lt;span class="c"&gt;# Apply from YAML file (preferred method)&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is a basic deployment YAML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:1.21&lt;/span&gt;
        &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;containerPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
        &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;100m&lt;/span&gt;
            &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;128Mi&lt;/span&gt;
          &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;500m&lt;/span&gt;
            &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;512Mi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For understanding CPU and memory units like &lt;code&gt;100m&lt;/code&gt; and &lt;code&gt;128Mi&lt;/code&gt;, see &lt;a href="https://singhajit.com/explainer/kubernetes-resource-units/" rel="noopener noreferrer"&gt;Kubernetes Resource Units Explained&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scaling Deployments
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Scale to 5 replicas&lt;/span&gt;
kubectl scale deployment my-deployment &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5

&lt;span class="c"&gt;# Autoscale based on CPU&lt;/span&gt;
kubectl autoscale deployment my-deployment &lt;span class="nt"&gt;--min&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2 &lt;span class="nt"&gt;--max&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10 &lt;span class="nt"&gt;--cpu-percent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80

&lt;span class="c"&gt;# View autoscaler&lt;/span&gt;
kubectl get hpa
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart LR
    D[Deployment: 3 replicas] --&amp;gt; RS[ReplicaSet]
    RS --&amp;gt; P1[Pod 1]
    RS --&amp;gt; P2[Pod 2]
    RS --&amp;gt; P3[Pod 3]

    HPA[HorizontalPodAutoscaler] --&amp;gt; D
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Updating Deployments
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Update image (triggers rolling update)&lt;/span&gt;
kubectl &lt;span class="nb"&gt;set &lt;/span&gt;image deployment/my-deployment &lt;span class="nv"&gt;web&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nginx:1.22

&lt;span class="c"&gt;# Edit deployment directly&lt;/span&gt;
kubectl edit deployment my-deployment

&lt;span class="c"&gt;# Apply updated YAML&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml

&lt;span class="c"&gt;# Restart all pods (rolling restart)&lt;/span&gt;
kubectl rollout restart deployment my-deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Rollouts and Rollbacks
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Check rollout status&lt;/span&gt;
kubectl rollout status deployment my-deployment

&lt;span class="c"&gt;# View rollout history&lt;/span&gt;
kubectl rollout &lt;span class="nb"&gt;history &lt;/span&gt;deployment my-deployment

&lt;span class="c"&gt;# Rollback to previous version&lt;/span&gt;
kubectl rollout undo deployment my-deployment

&lt;span class="c"&gt;# Rollback to specific revision&lt;/span&gt;
kubectl rollout undo deployment my-deployment &lt;span class="nt"&gt;--to-revision&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2

&lt;span class="c"&gt;# Pause rollout&lt;/span&gt;
kubectl rollout pause deployment my-deployment

&lt;span class="c"&gt;# Resume rollout&lt;/span&gt;
kubectl rollout resume deployment my-deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deleting Deployments
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Delete deployment (also deletes pods)&lt;/span&gt;
kubectl delete deployment my-deployment

&lt;span class="c"&gt;# Delete from YAML file&lt;/span&gt;
kubectl delete &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Services
&lt;/h2&gt;

&lt;p&gt;Services provide stable network endpoints for accessing pods. Since pods are ephemeral and get new IPs when recreated, Services give you a consistent way to reach them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Service Types
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ClusterIP&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Internal IP only. Default type&lt;/td&gt;
&lt;td&gt;Internal communication between services&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NodePort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Exposes on each node's IP at a static port&lt;/td&gt;
&lt;td&gt;Development, testing&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LoadBalancer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Creates cloud load balancer&lt;/td&gt;
&lt;td&gt;Production external access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ExternalName&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Maps to external DNS name&lt;/td&gt;
&lt;td&gt;Accessing external services&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TB
    subgraph External["External Traffic"]
        User[Internet Users]
    end

    subgraph Cluster["Kubernetes Cluster"]
        LB[LoadBalancer Service]
        NP[NodePort Service]
        CIP[ClusterIP Service]

        subgraph Pods["Backend Pods"]
            P1[Pod 1]
            P2[Pod 2]
            P3[Pod 3]
        end
    end

    User --&amp;gt; LB
    LB --&amp;gt; Pods
    NP --&amp;gt; Pods
    CIP --&amp;gt; Pods
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Viewing Services
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List services&lt;/span&gt;
kubectl get services

&lt;span class="c"&gt;# List with shorthand&lt;/span&gt;
kubectl get svc

&lt;span class="c"&gt;# Describe service&lt;/span&gt;
kubectl describe service my-service

&lt;span class="c"&gt;# Get service YAML&lt;/span&gt;
kubectl get service my-service &lt;span class="nt"&gt;-o&lt;/span&gt; yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Creating Services
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Expose deployment as ClusterIP (internal only)&lt;/span&gt;
kubectl expose deployment my-deployment &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80

&lt;span class="c"&gt;# Expose as NodePort (accessible on node IP)&lt;/span&gt;
kubectl expose deployment my-deployment &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80 &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;NodePort

&lt;span class="c"&gt;# Expose as LoadBalancer (cloud only)&lt;/span&gt;
kubectl expose deployment my-deployment &lt;span class="nt"&gt;--port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;80 &lt;span class="nt"&gt;--type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;LoadBalancer

&lt;span class="c"&gt;# Create from YAML&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; service.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Service YAML example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Service&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-service&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;web-app&lt;/span&gt;    &lt;span class="c1"&gt;# Finds pods with this label&lt;/span&gt;
  &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;        &lt;span class="c1"&gt;# Service port&lt;/span&gt;
    &lt;span class="na"&gt;targetPort&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;  &lt;span class="c1"&gt;# Pod port&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterIP&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: The &lt;code&gt;selector&lt;/code&gt; must match labels on your pods. If they do not match, the service will not route traffic to your pods. This is the most common service configuration mistake.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing Services
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Port forward to access locally&lt;/span&gt;
kubectl port-forward service/my-service 8080:80

&lt;span class="c"&gt;# Access at http://localhost:8080&lt;/span&gt;

&lt;span class="c"&gt;# Get service endpoints (which pods it routes to)&lt;/span&gt;
kubectl get endpoints my-service

&lt;span class="c"&gt;# Test from within cluster&lt;/span&gt;
kubectl run &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; my-service:80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deleting Services
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Delete service&lt;/span&gt;
kubectl delete service my-service

&lt;span class="c"&gt;# Delete by label&lt;/span&gt;
kubectl delete service &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Namespaces
&lt;/h2&gt;

&lt;p&gt;Namespaces provide logical isolation within a cluster. Use them to separate environments, teams, or applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Namespaces
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List namespaces&lt;/span&gt;
kubectl get namespaces

&lt;span class="c"&gt;# Short form&lt;/span&gt;
kubectl get ns

&lt;span class="c"&gt;# Describe namespace&lt;/span&gt;
kubectl describe namespace my-namespace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Working with Namespaces
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create namespace&lt;/span&gt;
kubectl create namespace my-namespace

&lt;span class="c"&gt;# Run commands in specific namespace&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-n&lt;/span&gt; my-namespace

&lt;span class="c"&gt;# Run commands in all namespaces&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-A&lt;/span&gt;

&lt;span class="c"&gt;# Set default namespace for current context&lt;/span&gt;
kubectl config set-context &lt;span class="nt"&gt;--current&lt;/span&gt; &lt;span class="nt"&gt;--namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-namespace

&lt;span class="c"&gt;# Delete namespace (deletes ALL resources inside)&lt;/span&gt;
kubectl delete namespace my-namespace
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Default Namespaces
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Namespace&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;default&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Where resources go if you don't specify&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;kube-system&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;System components (DNS, scheduler)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;kube-public&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Publicly accessible resources&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;kube-node-lease&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Node heartbeats&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  ConfigMaps and Secrets
&lt;/h2&gt;

&lt;h3&gt;
  
  
  ConfigMaps
&lt;/h3&gt;

&lt;p&gt;ConfigMaps store non-sensitive configuration data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create from literal values&lt;/span&gt;
kubectl create configmap my-config &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;DATABASE_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;db.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;LOG_LEVEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;info

&lt;span class="c"&gt;# Create from file&lt;/span&gt;
kubectl create configmap app-config &lt;span class="nt"&gt;--from-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;config.properties

&lt;span class="c"&gt;# Create from directory&lt;/span&gt;
kubectl create configmap app-config &lt;span class="nt"&gt;--from-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;./config-files/

&lt;span class="c"&gt;# View configmap&lt;/span&gt;
kubectl get configmap my-config &lt;span class="nt"&gt;-o&lt;/span&gt; yaml

&lt;span class="c"&gt;# Delete configmap&lt;/span&gt;
kubectl delete configmap my-config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using ConfigMap in a pod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
    &lt;span class="na"&gt;envFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;configMapRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-config&lt;/span&gt;
    &lt;span class="c1"&gt;# Or mount as volume&lt;/span&gt;
    &lt;span class="na"&gt;volumeMounts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;config-volume&lt;/span&gt;
      &lt;span class="na"&gt;mountPath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/etc/config&lt;/span&gt;
  &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;config-volume&lt;/span&gt;
    &lt;span class="na"&gt;configMap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-config&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Secrets
&lt;/h3&gt;

&lt;p&gt;Secrets store sensitive data like passwords, tokens, and keys. Values are base64 encoded (not encrypted by default).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create from literal values&lt;/span&gt;
kubectl create secret generic db-secret &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;admin &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-literal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;s3cret

&lt;span class="c"&gt;# Create from file&lt;/span&gt;
kubectl create secret generic tls-secret &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tls.crt&lt;span class="o"&gt;=&lt;/span&gt;path/to/cert &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--from-file&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;tls.key&lt;span class="o"&gt;=&lt;/span&gt;path/to/key

&lt;span class="c"&gt;# Create Docker registry secret&lt;/span&gt;
kubectl create secret docker-registry regcred &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--docker-server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;registry.example.com &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--docker-username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;user &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--docker-password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;pass

&lt;span class="c"&gt;# View secret (base64 encoded)&lt;/span&gt;
kubectl get secret my-secret &lt;span class="nt"&gt;-o&lt;/span&gt; yaml

&lt;span class="c"&gt;# Decode secret value&lt;/span&gt;
kubectl get secret my-secret &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.data.password}'&lt;/span&gt; | &lt;span class="nb"&gt;base64&lt;/span&gt; &lt;span class="nt"&gt;--decode&lt;/span&gt;

&lt;span class="c"&gt;# Delete secret&lt;/span&gt;
kubectl delete secret my-secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using Secret in a pod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;myapp&lt;/span&gt;
    &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;DB_PASSWORD&lt;/span&gt;
      &lt;span class="na"&gt;valueFrom&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;secretKeyRef&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;db-secret&lt;/span&gt;
          &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Security Note&lt;/strong&gt;: Base64 is encoding, not encryption. Anyone with cluster access can decode secrets. For production, consider using a secrets management tool like HashiCorp Vault or AWS Secrets Manager.&lt;/p&gt;




&lt;h2&gt;
  
  
  Logs and Debugging
&lt;/h2&gt;

&lt;p&gt;This is where you spend most of your time when things go wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Logs
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# View pod logs&lt;/span&gt;
kubectl logs my-pod

&lt;span class="c"&gt;# Follow logs in real time&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;-f&lt;/span&gt; my-pod

&lt;span class="c"&gt;# View last 100 lines&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;--tail&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;100 my-pod

&lt;span class="c"&gt;# View logs from last hour&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;--since&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1h my-pod

&lt;span class="c"&gt;# View logs from specific container&lt;/span&gt;
kubectl logs my-pod &lt;span class="nt"&gt;-c&lt;/span&gt; sidecar

&lt;span class="c"&gt;# View logs from previous container (after crash)&lt;/span&gt;
kubectl logs my-pod &lt;span class="nt"&gt;--previous&lt;/span&gt;

&lt;span class="c"&gt;# View logs from all pods with label&lt;/span&gt;
kubectl logs &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp

&lt;span class="c"&gt;# View logs from all containers in pod&lt;/span&gt;
kubectl logs my-pod &lt;span class="nt"&gt;--all-containers&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Debugging Pods
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get detailed pod info&lt;/span&gt;
kubectl describe pod my-pod

&lt;span class="c"&gt;# Check events in namespace&lt;/span&gt;
kubectl get events &lt;span class="nt"&gt;--sort-by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'.lastTimestamp'&lt;/span&gt;

&lt;span class="c"&gt;# Check events for specific pod&lt;/span&gt;
kubectl get events &lt;span class="nt"&gt;--field-selector&lt;/span&gt; involvedObject.name&lt;span class="o"&gt;=&lt;/span&gt;my-pod

&lt;span class="c"&gt;# Get shell in running pod&lt;/span&gt;
kubectl &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; my-pod &lt;span class="nt"&gt;--&lt;/span&gt; /bin/bash

&lt;span class="c"&gt;# Run debug container (for distroless images)&lt;/span&gt;
kubectl debug my-pod &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox

&lt;span class="c"&gt;# Check pod resource usage&lt;/span&gt;
kubectl top pods

&lt;span class="c"&gt;# Check node resource usage&lt;/span&gt;
kubectl top nodes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Debugging Workflow
&lt;/h3&gt;

&lt;p&gt;When a pod is not working, follow this sequence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart TB
    A[Pod Issue] --&amp;gt; B{kubectl get pods}
    B --&amp;gt;|CrashLoopBackOff| C[kubectl logs pod --previous]
    B --&amp;gt;|Pending| D[kubectl describe pod]
    B --&amp;gt;|Running but broken| E[kubectl logs pod]

    C --&amp;gt; F{Check application error}
    D --&amp;gt; G{Check Events section}
    E --&amp;gt; H{Check for errors}

    F --&amp;gt; I[Fix code or config]
    G --&amp;gt; J[Fix scheduling or resources]
    H --&amp;gt; K[Fix application logic]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Common Pod States
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;State&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;th&gt;What to Check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pending&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Not scheduled yet&lt;/td&gt;
&lt;td&gt;Events, node resources, taints&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Running&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;At least one container running&lt;/td&gt;
&lt;td&gt;Logs if misbehaving&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Succeeded&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All containers completed&lt;/td&gt;
&lt;td&gt;Expected for Jobs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Failed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;All containers stopped, at least one failed&lt;/td&gt;
&lt;td&gt;Logs, previous logs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CrashLoopBackOff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Container keeps crashing&lt;/td&gt;
&lt;td&gt;Previous logs, resource limits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;ImagePullBackOff&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cannot pull image&lt;/td&gt;
&lt;td&gt;Image name, registry auth&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Resource Management
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Setting Resource Limits
&lt;/h3&gt;

&lt;p&gt;Always set resource requests and limits. Without them, a single pod can consume all node resources.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;requests&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;100m&lt;/span&gt;      &lt;span class="c1"&gt;# Guaranteed CPU&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;128Mi&lt;/span&gt;  &lt;span class="c1"&gt;# Guaranteed memory&lt;/span&gt;
  &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;500m&lt;/span&gt;      &lt;span class="c1"&gt;# Maximum CPU&lt;/span&gt;
    &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;512Mi&lt;/span&gt;  &lt;span class="c1"&gt;# Maximum memory (OOMKill if exceeded)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;100m&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;100 millicores = 0.1 CPU core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 full CPU core&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;128Mi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;128 mebibytes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;1Gi&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;1 gibibyte&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;See &lt;a href="https://singhajit.com/explainer/kubernetes-resource-units/" rel="noopener noreferrer"&gt;Kubernetes Resource Units&lt;/a&gt; for detailed explanations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Checking Resource Usage
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Pod resource usage (requires metrics-server)&lt;/span&gt;
kubectl top pods

&lt;span class="c"&gt;# Node resource usage&lt;/span&gt;
kubectl top nodes

&lt;span class="c"&gt;# Pod resource usage sorted by memory&lt;/span&gt;
kubectl top pods &lt;span class="nt"&gt;--sort-by&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;memory

&lt;span class="c"&gt;# Describe node to see allocatable resources&lt;/span&gt;
kubectl describe node my-node | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 5 &lt;span class="s2"&gt;"Allocatable"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Resource Quotas
&lt;/h3&gt;

&lt;p&gt;Limit resources per namespace:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# View resource quotas&lt;/span&gt;
kubectl get resourcequota

&lt;span class="c"&gt;# Describe quota&lt;/span&gt;
kubectl describe resourcequota my-quota
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ResourceQuota&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;compute-quota&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hard&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;requests.cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;4"&lt;/span&gt;
    &lt;span class="na"&gt;requests.memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;8Gi&lt;/span&gt;
    &lt;span class="na"&gt;limits.cpu&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;8"&lt;/span&gt;
    &lt;span class="na"&gt;limits.memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;16Gi&lt;/span&gt;
    &lt;span class="na"&gt;pods&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;20"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Other Workload Types
&lt;/h2&gt;

&lt;p&gt;Beyond Deployments, Kubernetes has specialized controllers for different workload patterns.&lt;/p&gt;

&lt;h3&gt;
  
  
  StatefulSets
&lt;/h3&gt;

&lt;p&gt;For stateful applications that need stable network identity and persistent storage.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List statefulsets&lt;/span&gt;
kubectl get statefulsets

&lt;span class="c"&gt;# Scale statefulset&lt;/span&gt;
kubectl scale statefulset my-statefulset &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5

&lt;span class="c"&gt;# Delete pod (will be recreated with same identity)&lt;/span&gt;
kubectl delete pod my-statefulset-0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use for: databases, message queues, anything needing stable storage and network identity.&lt;/p&gt;

&lt;h3&gt;
  
  
  DaemonSets
&lt;/h3&gt;

&lt;p&gt;Run one pod per node. Great for node agents.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List daemonsets&lt;/span&gt;
kubectl get daemonsets

&lt;span class="c"&gt;# Describe daemonset&lt;/span&gt;
kubectl describe daemonset my-daemonset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use for: log collectors, monitoring agents, network plugins.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jobs and CronJobs
&lt;/h3&gt;

&lt;p&gt;Run tasks to completion or on a schedule.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Create job&lt;/span&gt;
kubectl create job my-job &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hello"&lt;/span&gt;

&lt;span class="c"&gt;# List jobs&lt;/span&gt;
kubectl get &lt;span class="nb"&gt;jobs&lt;/span&gt;

&lt;span class="c"&gt;# Create cronjob&lt;/span&gt;
kubectl create cronjob my-cronjob &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;--schedule&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"0 * * * *"&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Hourly"&lt;/span&gt;

&lt;span class="c"&gt;# List cronjobs&lt;/span&gt;
kubectl get cronjobs

&lt;span class="c"&gt;# View job logs&lt;/span&gt;
kubectl logs job/my-job
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For cron expression syntax, see &lt;a href="https://singhajit.com/explainer/cron-jobs-explained/" rel="noopener noreferrer"&gt;Cron Jobs Explained&lt;/a&gt; or use the &lt;a href="https://singhajit.com/tools/cron-expression/" rel="noopener noreferrer"&gt;Cron Expression Tool&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Common Debugging Workflows
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Workflow 1: Pod Keeps Crashing
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Check pod status&lt;/span&gt;
kubectl get pods

&lt;span class="c"&gt;# 2. Check events&lt;/span&gt;
kubectl describe pod my-pod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 20 Events

&lt;span class="c"&gt;# 3. Check previous logs (from crashed container)&lt;/span&gt;
kubectl logs my-pod &lt;span class="nt"&gt;--previous&lt;/span&gt;

&lt;span class="c"&gt;# 4. Check current logs&lt;/span&gt;
kubectl logs my-pod

&lt;span class="c"&gt;# 5. Check resource limits&lt;/span&gt;
kubectl describe pod my-pod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 10 Limits
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application error (check logs)&lt;/li&gt;
&lt;li&gt;OOMKilled (increase memory limit)&lt;/li&gt;
&lt;li&gt;Liveness probe failing (check probe config)&lt;/li&gt;
&lt;li&gt;Missing dependencies (check ConfigMaps, Secrets, Services)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workflow 2: Service Not Reachable
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Check service exists&lt;/span&gt;
kubectl get service my-service

&lt;span class="c"&gt;# 2. Check endpoints (pods the service routes to)&lt;/span&gt;
kubectl get endpoints my-service

&lt;span class="c"&gt;# 3. If no endpoints, check selector matches pod labels&lt;/span&gt;
kubectl describe service my-service
kubectl get pods &lt;span class="nt"&gt;--show-labels&lt;/span&gt;

&lt;span class="c"&gt;# 4. Test from within cluster&lt;/span&gt;
kubectl run &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="nt"&gt;--image&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;busybox &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;-it&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; wget &lt;span class="nt"&gt;-qO-&lt;/span&gt; my-service:80

&lt;span class="c"&gt;# 5. Check pod is ready&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nv"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selector does not match pod labels&lt;/li&gt;
&lt;li&gt;Pod is not ready (readiness probe failing)&lt;/li&gt;
&lt;li&gt;Wrong port in service definition&lt;/li&gt;
&lt;li&gt;Pod crashed&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Workflow 3: Pod Stuck in Pending
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Check pod events&lt;/span&gt;
kubectl describe pod my-pod | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 10 Events

&lt;span class="c"&gt;# 2. Check node resources&lt;/span&gt;
kubectl describe nodes | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 5 &lt;span class="s2"&gt;"Allocated resources"&lt;/span&gt;

&lt;span class="c"&gt;# 3. Check for taints&lt;/span&gt;
kubectl describe nodes | &lt;span class="nb"&gt;grep &lt;/span&gt;Taints

&lt;span class="c"&gt;# 4. Check pod resource requests&lt;/span&gt;
kubectl get pod my-pod &lt;span class="nt"&gt;-o&lt;/span&gt; yaml | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-A&lt;/span&gt; 10 resources
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Common causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Insufficient CPU or memory on nodes&lt;/li&gt;
&lt;li&gt;Node selector or affinity not matching any nodes&lt;/li&gt;
&lt;li&gt;Taints without matching tolerations&lt;/li&gt;
&lt;li&gt;Volume cannot be mounted&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Productivity Tips
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Essential Aliases
&lt;/h3&gt;

&lt;p&gt;Add these to your shell profile (&lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Basic alias&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;kubectl

&lt;span class="c"&gt;# Get commands&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kg&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl get'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kgp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl get pods'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kgd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl get deployments'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kgs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl get services'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kgn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl get nodes'&lt;/span&gt;

&lt;span class="c"&gt;# Describe and logs&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl describe'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kl&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl logs'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;klf&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl logs -f'&lt;/span&gt;

&lt;span class="c"&gt;# Apply and delete&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;ka&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl apply -f'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kdel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl delete'&lt;/span&gt;

&lt;span class="c"&gt;# Context&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kctx&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl config use-context'&lt;/span&gt;
&lt;span class="nb"&gt;alias &lt;/span&gt;&lt;span class="nv"&gt;kns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'kubectl config set-context --current --namespace'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Shell Completion
&lt;/h3&gt;

&lt;p&gt;Enable tab completion for kubectl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Bash&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'source &amp;lt;(kubectl completion bash)'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.bashrc

&lt;span class="c"&gt;# Zsh&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'source &amp;lt;(kubectl completion zsh)'&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; ~/.zshrc

&lt;span class="c"&gt;# Make alias work with completion&lt;/span&gt;
&lt;span class="nb"&gt;complete&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; __start_kubectl k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Output Formats
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Wide output (more columns)&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; wide

&lt;span class="c"&gt;# YAML output&lt;/span&gt;
kubectl get pod my-pod &lt;span class="nt"&gt;-o&lt;/span&gt; yaml

&lt;span class="c"&gt;# JSON output&lt;/span&gt;
kubectl get pod my-pod &lt;span class="nt"&gt;-o&lt;/span&gt; json

&lt;span class="c"&gt;# Custom columns&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; custom-columns&lt;span class="o"&gt;=&lt;/span&gt;NAME:.metadata.name,STATUS:.status.phase

&lt;span class="c"&gt;# JSONPath (extract specific fields)&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; &lt;span class="nv"&gt;jsonpath&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'{.items[*].metadata.name}'&lt;/span&gt;

&lt;span class="c"&gt;# Get just names&lt;/span&gt;
kubectl get pods &lt;span class="nt"&gt;-o&lt;/span&gt; name
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Dry Run and Diff
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Preview what would be created&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml &lt;span class="nt"&gt;--dry-run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;client

&lt;span class="c"&gt;# Server-side dry run (validates against API)&lt;/span&gt;
kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml &lt;span class="nt"&gt;--dry-run&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;server

&lt;span class="c"&gt;# Show diff before applying&lt;/span&gt;
kubectl diff &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Quick Reference Tables
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Most Used Commands
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Task&lt;/th&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;List pods&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl get pods&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pod details&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl describe pod NAME&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pod logs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl logs NAME&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Follow logs&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl logs -f NAME&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell into pod&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl exec -it NAME -- /bin/bash&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apply YAML&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl apply -f FILE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Delete resource&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl delete -f FILE&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scale deployment&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl scale deployment NAME --replicas=N&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rollback&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl rollout undo deployment NAME&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Port forward&lt;/td&gt;
&lt;td&gt;&lt;code&gt;kubectl port-forward pod/NAME LOCAL:POD&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Flags You Should Know
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Flag&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-n NAMESPACE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Target specific namespace&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-A&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All namespaces&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-o wide&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;More output columns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-o yaml&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Output as YAML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-w&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Watch for changes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-l KEY=VALUE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Filter by label&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;--dry-run=client&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Preview without creating&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-f FILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Use file as input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Common Object Shortnames
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Full Name&lt;/th&gt;
&lt;th&gt;Short Name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;pods&lt;/td&gt;
&lt;td&gt;po&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deployments&lt;/td&gt;
&lt;td&gt;deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;services&lt;/td&gt;
&lt;td&gt;svc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;namespaces&lt;/td&gt;
&lt;td&gt;ns&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;configmaps&lt;/td&gt;
&lt;td&gt;cm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;persistentvolumeclaims&lt;/td&gt;
&lt;td&gt;pvc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;statefulsets&lt;/td&gt;
&lt;td&gt;sts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;daemonsets&lt;/td&gt;
&lt;td&gt;ds&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;replicasets&lt;/td&gt;
&lt;td&gt;rs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;horizontalpodautoscalers&lt;/td&gt;
&lt;td&gt;hpa&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  External Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/" rel="noopener noreferrer"&gt;Official kubectl Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://kubernetes.io/docs/" rel="noopener noreferrer"&gt;Kubernetes Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ahmetb/kubectx" rel="noopener noreferrer"&gt;kubectx + kubens&lt;/a&gt; for fast context switching&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://k9scli.io/" rel="noopener noreferrer"&gt;k9s&lt;/a&gt; terminal UI for Kubernetes&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://k8slens.dev/" rel="noopener noreferrer"&gt;Lens&lt;/a&gt; desktop Kubernetes IDE&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;The best way to learn kubectl is to use it. Start with &lt;code&gt;kubectl get&lt;/code&gt; and &lt;code&gt;kubectl describe&lt;/code&gt;. When something breaks, follow the debugging workflow. The commands will become muscle memory faster than you expect.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://singhajit.com/kubernetes-cheat-sheet/" rel="noopener noreferrer"&gt;my blog&lt;/a&gt;. Follow me for more system design and DevOps content.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;More cheat sheets:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://singhajit.com/system-design-cheat-sheet/" rel="noopener noreferrer"&gt;System Design Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://singhajit.com/linux-commands-cheat-sheet/" rel="noopener noreferrer"&gt;Linux Commands Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://singhajit.com/git-cheat-sheet/" rel="noopener noreferrer"&gt;Git Cheat Sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>docker</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
