[{"data":1,"prerenderedAt":1028},["ShallowReactive",2],{"navigation":3,"\u002Fen\u002Fblog\u002Fwhat-is-kubernetes":4,"\u002Fen\u002Fblog\u002Fwhat-is-kubernetes-surround":1017},[],{"id":5,"title":6,"authors":7,"badge":13,"body":14,"date":1006,"description":1007,"extension":1008,"image":1009,"lastUpdated":1011,"meta":1012,"navigation":432,"path":1013,"published":432,"seo":1014,"stem":1015,"tags":13,"__hash__":1016},"posts\u002Fen\u002F3.blog\u002F6.what-is-kubernetes.md","What Is Kubernetes? A Practical Guide to Container Orchestration",[8],{"name":9,"to":10,"avatar":11},"Fabian Sander","\u002Fabout\u002Ffabiansander",{"src":12},"\u002Fimages\u002Fblog\u002Fauthors\u002Ffabian.png",null,{"type":15,"value":16,"toc":981},"minimark",[17,26,31,42,49,53,65,121,128,132,139,144,151,177,181,187,207,211,218,221,225,228,232,239,246,250,261,281,285,291,310,314,317,321,332,336,342,352,356,363,392,395,399,405,476,488,674,681,685,692,697,714,719,737,740,744,754,759,778,783,805,810,827,830,834,837,842,845,850,853,858,861,866,879,884,887,891,901,912,915,941,949,952,956,961,974,977],[18,19,20,21,25],"p",{},"Containers have fundamentally changed how we build and ship software. But once you go from a handful of containers to dozens or hundreds, managing them by hand quickly becomes unsustainable. That's where ",[22,23,24],"strong",{},"Kubernetes"," comes in — a platform that automates the management of containerized applications at scale. So what exactly is Kubernetes, how does it work, and when does it actually make sense to use it?",[27,28,30],"h2",{"id":29},"the-origins-of-kubernetes","The Origins of Kubernetes",[18,32,33,34,37,38,41],{},"Kubernetes was originally developed at Google, drawing on more than 15 years of experience running internal systems like ",[22,35,36],{},"Borg"," and ",[22,39,40],{},"Omega",", which orchestrate millions of containers across Google's data centers. It was open-sourced in 2014 and donated to the Cloud Native Computing Foundation (CNCF) in 2015. Today, Kubernetes has become the de facto standard for container orchestration and is actively maintained by a large community of developers, companies, and cloud providers.",[18,43,44,45,48],{},"The name \"Kubernetes\" comes from Greek and means \"helmsman\" or \"pilot\" — a fitting metaphor for a platform that steers containers through complex infrastructure. The project is commonly abbreviated as ",[22,46,47],{},"K8s"," (K, followed by eight letters, followed by s).",[27,50,52],{"id":51},"the-problem-kubernetes-solves","The Problem Kubernetes Solves",[18,54,55,56,64],{},"Before container orchestration became widespread, deploying applications was often tedious and error-prone. Docker made containers popular, but ",[22,57,58,63],{},[59,60,62],"a",{"href":61},"\u002Fen\u002Fblog\u002Fhow-docker-works","Docker"," alone"," falls short once applications need to run across multiple servers. Development and DevOps teams then face challenges such as:",[66,67,68,75,81,87,93,99,105],"ul",{},[69,70,71,74],"li",{},[22,72,73],{},"Distributing containers"," across multiple servers (nodes)",[69,76,77,80],{},[22,78,79],{},"Load balancing"," between container instances",[69,82,83,86],{},[22,84,85],{},"Automatically restarting"," failed containers",[69,88,89,92],{},[22,90,91],{},"Scaling"," under increased load",[69,94,95,98],{},[22,96,97],{},"Rolling updates"," with zero downtime",[69,100,101,104],{},[22,102,103],{},"Service discovery"," and network configuration",[69,106,107,110,111,115,116,120],{},[22,108,109],{},"Storage management"," for persistent data (e.g., ",[59,112,114],{"href":113},"\u002Fen\u002Fblog\u002Fpostgresql-helm-chart-kubernetes","deploying PostgreSQL with Helm charts"," or ",[59,117,119],{"href":118},"\u002Fen\u002Fblog\u002Fminio-alternatives","self-hosted object storage like SeaweedFS and Garage",")",[18,122,123,124,127],{},"Handling all of this manually is not only time-consuming but also error-prone. Kubernetes automates these processes through a ",[22,125,126],{},"declarative API"," that lets developers describe the desired state of their application while Kubernetes takes care of the rest.",[27,129,131],{"id":130},"how-does-kubernetes-work-the-core-architecture","How Does Kubernetes Work? The Core Architecture",[18,133,134,135,138],{},"Kubernetes organizes resources into ",[22,136,137],{},"clusters"," made up of multiple servers, either physical or virtual. A cluster consists of two main components:",[140,141,143],"h3",{"id":142},"control-plane-the-brain-of-the-cluster","Control Plane: The Brain of the Cluster",[18,145,146,147,150],{},"The ",[22,148,149],{},"Control Plane"," is the management layer of Kubernetes and makes all scheduling and orchestration decisions for the cluster. It includes several components:",[66,152,153,159,165,171],{},[69,154,155,158],{},[22,156,157],{},"API Server",": The central communication hub through which all requests are routed",[69,160,161,164],{},[22,162,163],{},"Scheduler",": Decides which node a new Pod should be placed on",[69,166,167,170],{},[22,168,169],{},"Controller Manager",": Monitors the cluster state and reconciles it with the desired state",[69,172,173,176],{},[22,174,175],{},"etcd",": A distributed key-value store that holds the entire cluster state",[140,178,180],{"id":179},"worker-nodes-where-the-work-happens","Worker Nodes: Where the Work Happens",[18,182,183,186],{},[22,184,185],{},"Worker Nodes"," are the servers that actually run your containers. Each node runs the following components:",[66,188,189,195,201],{},[69,190,191,194],{},[22,192,193],{},"Kubelet",": An agent that communicates with the Control Plane and manages containers on the node",[69,196,197,200],{},[22,198,199],{},"Container Runtime",": The software that runs containers (e.g., containerd or CRI-O)",[69,202,203,206],{},[22,204,205],{},"Kube-proxy",": Manages network rules and enables communication between Pods",[140,208,210],{"id":209},"the-desired-state-model","The Desired State Model",[18,212,213,214,217],{},"At the heart of Kubernetes is the ",[22,215,216],{},"desired state model",". Rather than issuing imperative commands (\"start three containers on server A\"), you describe the state you want (\"I want three instances of my application running\"). Kubernetes continuously monitors the actual state and automatically reconciles it with the desired state.",[18,219,220],{},"For example, if a container crashes, Kubernetes detects the discrepancy and automatically starts a new container to restore the desired state — without any manual intervention.",[27,222,224],{"id":223},"key-kubernetes-concepts","Key Kubernetes Concepts",[18,226,227],{},"To work with Kubernetes effectively, you need to understand a few core concepts:",[140,229,231],{"id":230},"pods-the-smallest-unit","Pods — The Smallest Unit",[18,233,234,235,238],{},"A ",[22,236,237],{},"Pod"," is the smallest deployable unit in Kubernetes. A Pod contains one or more containers that share networking and storage. In most cases, a Pod runs a single container, but there are scenarios (e.g., the sidecar pattern) where multiple containers need to work closely together.",[18,240,241,242,245],{},"Pods are ",[22,243,244],{},"ephemeral",", meaning they can be deleted and recreated at any time. Kubernetes does not guarantee that a Pod will be rescheduled on the same node or retain the same IP address.",[140,247,249],{"id":248},"services-stable-network-endpoints","Services — Stable Network Endpoints",[18,251,252,253,256,257,260],{},"Since Pods are short-lived, you need a stable way to reach them. ",[22,254,255],{},"Services"," provide a consistent IP address and DNS name, automatically routing traffic to the appropriate Pods. Services act as ",[22,258,259],{},"load balancers"," and come in several types:",[66,262,263,269,275],{},[69,264,265,268],{},[22,266,267],{},"ClusterIP",": Internal access within the cluster",[69,270,271,274],{},[22,272,273],{},"NodePort",": External access via a port on each node",[69,276,277,280],{},[22,278,279],{},"LoadBalancer",": Integration with cloud load balancers",[140,282,284],{"id":283},"deployments-declarative-management","Deployments — Declarative Management",[18,286,234,287,290],{},[22,288,289],{},"Deployment"," defines how many replicas of an application should run and which container image to use. Deployments enable:",[66,292,293,299,304],{},[69,294,295,298],{},[22,296,297],{},"Declarative updates",": Changing the desired state in a YAML file",[69,300,301,303],{},[22,302,97],{},": Gradually replacing old Pods with new ones",[69,305,306,309],{},[22,307,308],{},"Rollbacks",": Reverting to a previous version if something goes wrong",[27,311,313],{"id":312},"what-can-kubernetes-do-core-features","What Can Kubernetes Do? Core Features",[18,315,316],{},"Kubernetes provides a wide range of features that simplify the management of containerized applications:",[140,318,320],{"id":319},"self-healing-and-high-availability","Self-Healing and High Availability",[18,322,323,324,327,328,331],{},"Kubernetes continuously monitors the health of all Pods. If a Pod fails, a new one is automatically started. If a Pod stops responding to ",[22,325,326],{},"health checks"," (liveness and readiness probes), it is either restarted or removed from load balancing. This ensures high ",[22,329,330],{},"availability"," without manual intervention.",[140,333,335],{"id":334},"automatic-scaling","Automatic Scaling",[18,337,146,338,341],{},[22,339,340],{},"Horizontal Pod Autoscaler"," allows Kubernetes to automatically adjust the number of Pod replicas based on CPU usage, memory consumption, or custom metrics. As load increases, new Pods are added; as it decreases, they are removed.",[18,343,146,344,347,348,351],{},[22,345,346],{},"Vertical Pod Autoscaler"," adjusts the resource requests of individual Pods, while the ",[22,349,350],{},"Cluster Autoscaler"," adds new nodes to the cluster when needed.",[140,353,355],{"id":354},"rolling-updates-and-rollbacks","Rolling Updates and Rollbacks",[18,357,358,359,362],{},"Deployments support ",[22,360,361],{},"rolling updates",", where new versions are gradually rolled out while old versions continue to serve traffic. If issues arise, changes can be reverted with a single command:",[364,365,370],"pre",{"className":366,"code":367,"language":368,"meta":369,"style":369},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","kubectl rollout undo deployment\u002Fmy-app\n","bash","",[371,372,373],"code",{"__ignoreMap":369},[374,375,378,382,386,389],"span",{"class":376,"line":377},"line",1,[374,379,381],{"class":380},"sBMFI","kubectl",[374,383,385],{"class":384},"sfazB"," rollout",[374,387,388],{"class":384}," undo",[374,390,391],{"class":384}," deployment\u002Fmy-app\n",[18,393,394],{},"This strategy minimizes downtime and reduces the risk of faulty deployments.",[27,396,398],{"id":397},"kubectl-and-yaml-kubernetes-in-practice","kubectl and YAML: Kubernetes in Practice",[18,400,401,402,404],{},"Interaction with Kubernetes primarily happens through ",[22,403,381],{},", the command-line tool for Kubernetes. It lets developers create, inspect, modify, and delete resources:",[364,406,408],{"className":366,"code":407,"language":368,"meta":369,"style":369},"# List Pods\nkubectl get pods\n\n# View Pod logs\nkubectl logs my-pod\n\n# Port-forward for local debugging\nkubectl port-forward my-pod 8080:80\n",[371,409,410,416,427,434,440,451,456,462],{"__ignoreMap":369},[374,411,412],{"class":376,"line":377},[374,413,415],{"class":414},"sHwdD","# List Pods\n",[374,417,419,421,424],{"class":376,"line":418},2,[374,420,381],{"class":380},[374,422,423],{"class":384}," get",[374,425,426],{"class":384}," pods\n",[374,428,430],{"class":376,"line":429},3,[374,431,433],{"emptyLinePlaceholder":432},true,"\n",[374,435,437],{"class":376,"line":436},4,[374,438,439],{"class":414},"# View Pod logs\n",[374,441,443,445,448],{"class":376,"line":442},5,[374,444,381],{"class":380},[374,446,447],{"class":384}," logs",[374,449,450],{"class":384}," my-pod\n",[374,452,454],{"class":376,"line":453},6,[374,455,433],{"emptyLinePlaceholder":432},[374,457,459],{"class":376,"line":458},7,[374,460,461],{"class":414},"# Port-forward for local debugging\n",[374,463,465,467,470,473],{"class":376,"line":464},8,[374,466,381],{"class":380},[374,468,469],{"class":384}," port-forward",[374,471,472],{"class":384}," my-pod",[374,474,475],{"class":384}," 8080:80\n",[18,477,478,479,482,483,487],{},"Kubernetes resources are typically defined in ",[22,480,481],{},"YAML files"," that describe the desired state — though as complexity grows, tools like Helm, Kustomize, and CRDs can ",[59,484,486],{"href":485},"\u002Fen\u002Fblog\u002Fsimplify-kubernetes-configuration","simplify Kubernetes configuration"," significantly. Here's a simple example of a Deployment:",[364,489,493],{"className":490,"code":491,"language":492,"meta":369,"style":369},"language-yaml shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: my-app\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: my-app\n  template:\n    metadata:\n      labels:\n        app: my-app\n    spec:\n      containers:\n        - name: my-app\n          image: my-app:1.0\n          ports:\n            - containerPort: 8080\n","yaml",[371,494,495,508,518,526,536,543,554,561,568,578,586,594,602,612,620,628,641,652,660],{"__ignoreMap":369},[374,496,497,501,505],{"class":376,"line":377},[374,498,500],{"class":499},"swJcz","apiVersion",[374,502,504],{"class":503},"sMK4o",":",[374,506,507],{"class":384}," apps\u002Fv1\n",[374,509,510,513,515],{"class":376,"line":418},[374,511,512],{"class":499},"kind",[374,514,504],{"class":503},[374,516,517],{"class":384}," Deployment\n",[374,519,520,523],{"class":376,"line":429},[374,521,522],{"class":499},"metadata",[374,524,525],{"class":503},":\n",[374,527,528,531,533],{"class":376,"line":436},[374,529,530],{"class":499},"  name",[374,532,504],{"class":503},[374,534,535],{"class":384}," my-app\n",[374,537,538,541],{"class":376,"line":442},[374,539,540],{"class":499},"spec",[374,542,525],{"class":503},[374,544,545,548,550],{"class":376,"line":453},[374,546,547],{"class":499},"  replicas",[374,549,504],{"class":503},[374,551,553],{"class":552},"sbssI"," 3\n",[374,555,556,559],{"class":376,"line":458},[374,557,558],{"class":499},"  selector",[374,560,525],{"class":503},[374,562,563,566],{"class":376,"line":464},[374,564,565],{"class":499},"    matchLabels",[374,567,525],{"class":503},[374,569,571,574,576],{"class":376,"line":570},9,[374,572,573],{"class":499},"      app",[374,575,504],{"class":503},[374,577,535],{"class":384},[374,579,581,584],{"class":376,"line":580},10,[374,582,583],{"class":499},"  template",[374,585,525],{"class":503},[374,587,589,592],{"class":376,"line":588},11,[374,590,591],{"class":499},"    metadata",[374,593,525],{"class":503},[374,595,597,600],{"class":376,"line":596},12,[374,598,599],{"class":499},"      labels",[374,601,525],{"class":503},[374,603,605,608,610],{"class":376,"line":604},13,[374,606,607],{"class":499},"        app",[374,609,504],{"class":503},[374,611,535],{"class":384},[374,613,615,618],{"class":376,"line":614},14,[374,616,617],{"class":499},"    spec",[374,619,525],{"class":503},[374,621,623,626],{"class":376,"line":622},15,[374,624,625],{"class":499},"      containers",[374,627,525],{"class":503},[374,629,631,634,637,639],{"class":376,"line":630},16,[374,632,633],{"class":503},"        -",[374,635,636],{"class":499}," name",[374,638,504],{"class":503},[374,640,535],{"class":384},[374,642,644,647,649],{"class":376,"line":643},17,[374,645,646],{"class":499},"          image",[374,648,504],{"class":503},[374,650,651],{"class":384}," my-app:1.0\n",[374,653,655,658],{"class":376,"line":654},18,[374,656,657],{"class":499},"          ports",[374,659,525],{"class":503},[374,661,663,666,669,671],{"class":376,"line":662},19,[374,664,665],{"class":503},"            -",[374,667,668],{"class":499}," containerPort",[374,670,504],{"class":503},[374,672,673],{"class":552}," 8080\n",[18,675,676,677,680],{},"Running ",[371,678,679],{},"kubectl apply -f deployment.yaml"," applies this configuration to the cluster.",[27,682,684],{"id":683},"when-is-kubernetes-worth-it","When Is Kubernetes Worth It?",[18,686,687,688,691],{},"Despite its benefits, Kubernetes isn't the right choice for every project. The platform comes with significant ",[22,689,690],{},"complexity"," and requires both a learning investment and operational expertise.",[18,693,694],{},[22,695,696],{},"Kubernetes is a good fit when:",[66,698,699,702,705,708,711],{},[69,700,701],{},"You need to orchestrate multiple container-based services",[69,703,704],{},"High availability and automatic scaling are important",[69,706,707],{},"You're pursuing a multi-cloud or hybrid cloud strategy",[69,709,710],{},"Your team already has container experience",[69,712,713],{},"You need a standardized platform for diverse workloads",[18,715,716],{},[22,717,718],{},"Kubernetes is overkill when:",[66,720,721,724,727,734],{},[69,722,723],{},"You're running a single, simple application",[69,725,726],{},"Your team lacks the resources to build Kubernetes expertise",[69,728,729,733],{},[59,730,732],{"href":731},"\u002Fen\u002Fblog\u002Fkubernetes-vs-docker-swarm","Docker Compose or simpler orchestration"," tools are sufficient",[69,735,736],{},"You prefer a serverless architecture",[18,738,739],{},"An honest assessment of your requirements and resources is essential. Not every project needs the full feature set of Kubernetes.",[27,741,743],{"id":742},"kubernetes-distributions-and-managed-services","Kubernetes Distributions and Managed Services",[18,745,746,747,37,750,753],{},"Kubernetes is an open-source project, but there are numerous ",[22,748,749],{},"distributions",[22,751,752],{},"managed services"," that simplify getting started and day-to-day operations:",[18,755,756],{},[22,757,758],{},"For local development:",[66,760,761,767,772],{},[69,762,763,766],{},[22,764,765],{},"Minikube",": Lightweight Kubernetes for developers",[69,768,769,771],{},[22,770,512],{}," (Kubernetes in Docker): Fast local clusters",[69,773,774,777],{},[22,775,776],{},"K3s",": Lightweight distribution for edge, IoT, and resource-constrained clusters",[18,779,780],{},[22,781,782],{},"Managed Kubernetes in the cloud:",[66,784,785,790,795,800],{},[69,786,787],{},[22,788,789],{},"Google Kubernetes Engine (GKE)",[69,791,792],{},[22,793,794],{},"Amazon Elastic Kubernetes Service (EKS)",[69,796,797],{},[22,798,799],{},"Azure Kubernetes Service (AKS)",[69,801,802],{},[22,803,804],{},"DigitalOcean Kubernetes",[18,806,807],{},[22,808,809],{},"Enterprise distributions:",[66,811,812,817,822],{},[69,813,814],{},[22,815,816],{},"Red Hat OpenShift",[69,818,819],{},[22,820,821],{},"Rancher",[69,823,824],{},[22,825,826],{},"VMware Tanzu",[18,828,829],{},"Managed services handle Control Plane management and significantly reduce operational overhead, allowing teams to focus on their applications rather than maintaining clusters.",[27,831,833],{"id":832},"getting-started-with-your-first-kubernetes-cluster","Getting Started with Your First Kubernetes Cluster",[18,835,836],{},"Getting into Kubernetes doesn't have to be overwhelming. A pragmatic approach might look like this:",[18,838,839],{},[22,840,841],{},"Step 1: Experiment locally",[18,843,844],{},"Install Minikube or kind and try out simple Deployments. Get familiar with Pods, Services, and Deployments in a safe local environment.",[18,846,847],{},[22,848,849],{},"Step 2: Work through tutorials",[18,851,852],{},"The official Kubernetes documentation offers excellent tutorials. Work through them and build simple applications to reinforce your understanding.",[18,854,855],{},[22,856,857],{},"Step 3: Use a managed service",[18,859,860],{},"For production workloads, a managed Kubernetes service is recommended. The setup complexity is much lower, letting you focus on deploying your applications.",[18,862,863],{},[22,864,865],{},"Step 4: Set up monitoring and logging",[18,867,868,869,873,874,878],{},"Implement ",[59,870,872],{"href":871},"\u002Fen\u002Fblog\u002Fkubernetes-monitoring-logs-metrics","monitoring with Prometheus and Grafana"," and centralized logging (e.g., Loki stack or EFK with Fluent Bit) from the start. Observability is critical in distributed systems — and especially so when ",[59,875,877],{"href":876},"\u002Fen\u002Fblog\u002Fai-agent-infrastructure","running AI agent workloads on Kubernetes",", where the Reason-Act loop and tool calls add new tracing requirements.",[18,880,881],{},[22,882,883],{},"Step 5: Adopt GitOps and CI\u002FCD",[18,885,886],{},"Automate deployments with GitOps tools like ArgoCD or Flux, and integrate Kubernetes into your CI\u002FCD pipeline.",[27,888,890],{"id":889},"kubernetes-as-a-foundation-for-paas-platforms","Kubernetes as a Foundation for PaaS Platforms",[18,892,893,894,900],{},"Kubernetes is capable but complex. Many organizations want the benefits of container orchestration without having to deal with the operational overhead of running Kubernetes themselves. This is exactly where modern ",[22,895,896],{},[59,897,899],{"href":898},"\u002Fen\u002Fblog\u002Fpaas-vs-daas","Platform-as-a-Service (PaaS)"," solutions come in.",[18,902,903,904,907,908,911],{},"These platforms build on top of Kubernetes and provide an abstraction layer that gives developers a ",[22,905,906],{},"Heroku-like deployment experience"," — push your code with ",[371,909,910],{},"git push"," and it's live in production — while leveraging Kubernetes' reliability and scalability under the hood. Teams get self-service access to resources without needing to write YAML files or understand cluster internals.",[18,913,914],{},"Kubernetes-based PaaS solutions combine the best of both worlds:",[66,916,917,923,929,935],{},[69,918,146,919,922],{},[22,920,921],{},"standardization and portability"," of Kubernetes",[69,924,146,925,928],{},[22,926,927],{},"developer experience"," of a streamlined deployment platform",[69,930,931,934],{},[22,932,933],{},"Sovereignty"," through operation on your own infrastructure",[69,936,937,940],{},[22,938,939],{},"Cost efficiency"," through multi-tenancy and optimized resource utilization",[18,942,943,944,948],{},"For teams that want Kubernetes benefits without Kubernetes complexity, a PaaS platform is often the most pragmatic path. For teams that want to skip YAML entirely, ",[59,945,947],{"href":946},"\u002Fen\u002Fblog\u002Fzero-config-kubernetes","zero-config Kubernetes platforms"," offer sensible defaults out of the box. You get automatic scaling, self-healing, and declarative management — without needing to build a dedicated Kubernetes operations team.",[950,951],"hr",{},[27,953,955],{"id":954},"conclusion","Conclusion",[18,957,958,960],{},[22,959,24],{}," has shaped how modern cloud-native applications are operated and has become an industry standard. The platform offers a comprehensive set of features for orchestration, scaling, and self-healing. At the same time, its complexity should not be underestimated — Kubernetes is a sophisticated tool that requires careful planning and expertise.",[18,962,963,964,968,969,973],{},"For teams running complex, distributed applications with the resources to support it, Kubernetes is an excellent choice. Our ",[59,965,967],{"href":966},"\u002Fen\u002Fblog\u002Fkubernetes-migration-guide","step-by-step Kubernetes migration guide"," provides a structured approach for teams ready to make the transition. For smaller projects or teams without dedicated DevOps capacity, simpler alternatives or abstracted ",[59,970,972],{"href":971},"\u002Fen\u002Fblog\u002Fwhat-is-paas","PaaS platforms"," may be the better option.",[18,975,976],{},"The question isn't \"Do I need Kubernetes?\" but rather \"Do I need the benefits of container orchestration, and if so, at what level of abstraction?\" The answer determines whether you work with Kubernetes directly or use a platform that pairs Kubernetes capabilities with developer-friendly workflows.",[978,979,980],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":369,"searchDepth":418,"depth":418,"links":982},[983,984,985,990,995,1000,1001,1002,1003,1004,1005],{"id":29,"depth":418,"text":30},{"id":51,"depth":418,"text":52},{"id":130,"depth":418,"text":131,"children":986},[987,988,989],{"id":142,"depth":429,"text":143},{"id":179,"depth":429,"text":180},{"id":209,"depth":429,"text":210},{"id":223,"depth":418,"text":224,"children":991},[992,993,994],{"id":230,"depth":429,"text":231},{"id":248,"depth":429,"text":249},{"id":283,"depth":429,"text":284},{"id":312,"depth":418,"text":313,"children":996},[997,998,999],{"id":319,"depth":429,"text":320},{"id":334,"depth":429,"text":335},{"id":354,"depth":429,"text":355},{"id":397,"depth":418,"text":398},{"id":683,"depth":418,"text":684},{"id":742,"depth":418,"text":743},{"id":832,"depth":418,"text":833},{"id":889,"depth":418,"text":890},{"id":954,"depth":418,"text":955},"2026-02-23","What is Kubernetes and how does container orchestration work? Learn about K8s architecture, Pods, Services, auto-scaling, and when Kubernetes is the right fit for your project.","md",{"src":1010},"\u002Fimages\u002Fblog\u002Fwhat_is_kubernetes.jpeg","2026-04-10",{},"\u002Fen\u002Fblog\u002Fwhat-is-kubernetes",{"title":6,"description":1007},"en\u002F3.blog\u002F6.what-is-kubernetes","imLLQzT3wbW3a1CNp_k0hYxBHdq1nekZDMm8O7kEjqU",[1018,1023],{"title":1019,"path":1020,"stem":1021,"description":1022,"children":-1},"What Is Kustomize? Managing Kubernetes Configs Cleanly","\u002Fen\u002Fblog\u002Fwhat-is-kustomize","en\u002F3.blog\u002F59.what-is-kustomize","Kustomize manages Kubernetes configurations through bases and overlays — no templates. YAML stays readable, valid, and flexibly adaptable across environments.",{"title":1024,"path":1025,"stem":1026,"description":1027,"children":-1},"The Best Heroku Alternatives in 2026","\u002Fen\u002Fblog\u002Fheroku-alternatives","en\u002F3.blog\u002F60.heroku-alternatives","Heroku is in maintenance mode. We compare Render, Railway, Fly.io, Porter and lowcloud as serious alternatives for teams planning a migration.",1776469309250]