[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-kubernetes-turns-clusters-into-declared-state-en":3,"article-related-kubernetes-turns-clusters-into-declared-state-en":35,"series-tools-ea288b1e-ddae-44ff-be40-c1056ab5a9d9":85},{"id":4,"title":5,"content":6,"summary":7,"source":8,"source_url":9,"author":10,"image_url":11,"keywords":12,"language":18,"translated_content":10,"views":19,"is_premium":20,"created_at":21,"updated_at":21,"cover_image":11,"published_at":22,"rewrite_status":23,"rewrite_error":10,"rewritten_from_id":24,"slug":25,"category":26,"related_article_id":27,"status":28,"google_indexed_at":10,"x_posted_at":10,"tweet_text":10,"title_rewritten_at":10,"title_original":10,"key_takeaways":29,"topic_cluster_id":33,"embedding":34,"is_canonical_seed":20},"ea288b1e-ddae-44ff-be40-c1056ab5a9d9","Kubernetes turns clusters into declared state","\u003Cp data-speakable=\"summary\">I break down Kubernetes into the control loop, core objects, and a copy-ready cluster template you can actually use.\u003C\u002Fp>\u003Cp>I've been using Kubernetes long enough to stop being impressed by the logo and start getting annoyed by the behavior. The first time I wired a real app onto it, I thought the problem was my manifests. Then I thought it was the ingress. Then I thought it was the network policy. It was none of those. The real issue was that Kubernetes kept doing exactly what I told it to do, not what I meant. I’d ask for “three copies,” and it would give me three copies. I’d break a node, and it would reschedule. I’d forget a resource limit, and it would happily let me crash the box. That’s the thing nobody tells you when you’re new: Kubernetes is not a magic deployment button. It’s a control system with a lot of sharp edges, and if you don’t understand the loop, you end up fighting the machine you just installed.\u003C\u002Fp>\u003Cp>What finally made it click for me was reading the Wikipedia page for \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKubernetes\">Kubernetes\u003C\u002Fa> like a design doc instead of an encyclopedia entry. The page is dense, but it gives you the right anchors: \u003Ca href=\"\u002Ftag\u002Fgoogle\">Google\u003C\u002Fa> announced it on June 6, 2014; it was created by Joe Beda, Brendan Burns, and Craig McLuckie; and it’s now maintained by a wider community under the \u003Ca href=\"https:\u002F\u002Fwww.cncf.io\u002F\">Cloud Native Computing Foundation\u003C\u002Fa>. That history matters because it explains the bias baked into the system: declarative state, reconciliation, and a cluster that keeps trying to get back to what you asked for.\u003C\u002Fp>\u003Ch2>Kubernetes is not a deployment tool, it is a correction loop\u003C\u002Fh2>\u003Cblockquote>Kubernetes defines a set of building blocks (“primitives”) that collectively provide mechanisms that deploy, maintain, and scale applications based on CPU, memory or custom metrics.\u003C\u002Fblockquote>\u003Cp>What this actually means is that Kubernetes is less “run my app” and more “keep correcting reality until it matches the spec.” That sounds subtle until you’ve spent a week debugging a service that keeps coming back after you kill it. The platform is built around desired state. You declare what should exist, then controllers, the scheduler, and the \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> server keep pushing the cluster toward that state.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779197680974-7cc1.png\" alt=\"Kubernetes turns clusters into declared state\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>I used to think of orchestration as a fancy wrapper around containers. That framing is wrong and it causes bad habits. If you treat Kubernetes like a wrapper, you start expecting it to infer intent from your app. It won’t. It reads objects, compares them to observed state, and acts. That’s why the system feels so strict. It’s not trying to be helpful in a human sense. It’s trying to be consistent.\u003C\u002Fp>\u003Cp>The Wikipedia page calls out the primary\u002Freplica architecture and the split between control plane and nodes. That split is the first thing I’d teach anyone before they touch a cluster. The control plane decides; the nodes execute. If your app is misbehaving, don’t immediately blame the node. If the cluster is constantly recreating pods, don’t immediately blame the app. Follow the control loop.\u003C\u002Fp>\u003Cp>How to apply it: stop writing manifests as if they are startup scripts. Write them as declarations of state. Ask three questions before you ship anything: what should exist, how many copies should exist, and what should happen when reality drifts. If you can answer those three, you’re starting to think in Kubernetes terms.\u003C\u002Fp>\u003Ch2>The control plane is the part that lies to your feelings and tells the truth to the cluster\u003C\u002Fh2>\u003Cp>The control plane is where Kubernetes stops being “a thing you installed” and becomes “a system that watches itself.” The Wikipedia page breaks it into etcd, the API server, the scheduler, and controllers. That’s the right mental model. I’ve seen too many teams talk about “the cluster” as one blob, then panic when a pod won’t start. The control plane is the brain, but not a single brain. It’s a set of processes with very specific jobs.\u003C\u002Fp>\u003Cp>\u003Cstrong>etcd\u003C\u002Fstrong> is the source of truth. It stores cluster state. The page notes that etcd favors consistency over availability during partitions, which is exactly the tradeoff you want if you care about correctness. If your state store starts making up answers, everything else becomes theater. I’ve watched teams treat etcd like a boring implementation detail until their cluster drifted into weirdness. Then they suddenly cared a lot.\u003C\u002Fp>\u003Cp>\u003Cstrong>API server\u003C\u002Fstrong> is the front door. It serves the Kubernetes API using JSON over HTTP, validates requests, and updates state in etcd. This is the piece you talk to with \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Ftasks\u002Ftools\u002F\">kubectl\u003C\u002Fa> and client libraries. If you want to know why Kubernetes feels programmable, this is why. Everything goes through the API. No side channel. No secret backdoor for “just this one service.”\u003C\u002Fp>\u003Cp>\u003Cstrong>Scheduler\u003C\u002Fstrong> is the matcher. It decides where unscheduled pods should run based on resource availability and constraints. It is not picking “the best machine” in some mystical sense. It is fitting supply to demand. That matters when you’re trying to understand why a pod sits Pending. It isn’t always broken. Sometimes there just isn’t a node that satisfies the rules you gave it.\u003C\u002Fp>\u003Cp>\u003Cstrong>Controllers\u003C\u002Fstrong> are the correction engines. They reconcile desired state with actual state. The ReplicaSet controller, for example, keeps the requested number of pods alive. If one dies, it creates another. That’s not a feature you turn on later. That’s the core of the system.\u003C\u002Fp>\u003Cp>How to apply it: when debugging, classify the failure before you poke randomly. Is it state storage, request handling, placement, or reconciliation? That one habit saves hours. I keep a simple checklist: if the API object exists but the pod doesn’t, look at scheduling. If the pod exists but doesn’t stay healthy, look at the controller and the app. If nothing persists, look at etcd or the object definition itself.\u003C\u002Fp>\u003Cul>\u003Cli>etcd stores state.\u003C\u002Fli>\u003Cli>API server accepts and validates changes.\u003C\u002Fli>\u003Cli>Scheduler places pods.\u003C\u002Fli>\u003Cli>Controllers repair drift.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Pods are the unit you actually ship, not containers\u003C\u002Fh2>\u003Cp>Kubernetes loves the word “pod” because it forces you to stop thinking in single containers. A pod is the basic unit of workload scheduling. That means the scheduler places pods, controllers manage pods, and services usually target pods. If you’re still thinking “container per app” at this point, you’re going to keep stumbling into weird networking and lifecycle bugs.\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779197680336-f2ul.png\" alt=\"Kubernetes turns clusters into declared state\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>I ran into this the hard way when I tried to jam a sidecar and an app container into the same mental bucket as a \u003Ca href=\"\u002Ftag\u002Fdocker\">Docker\u003C\u002Fa> Compose service. It sort of worked until I needed them to die and restart together. Kubernetes made the relationship explicit. Same pod, shared fate. That’s useful, but only if you accept the model instead of arguing with it.\u003C\u002Fp>\u003Cp>The Wikipedia page also calls out namespaces, labels, and selectors. These are not decorative. Namespaces give you a scope boundary. Labels and selectors let controllers and services find the right pods without hard-coding names. That sounds small until you’ve got dozens of workloads and you need to roll one of them without touching the others.\u003C\u002Fp>\u003Cp>What this actually means is that Kubernetes prefers identity by description, not by name. A pod can come and go. The label selector is what keeps the system attached to the right workload. That’s why a Deployment can replace a pod and your service doesn’t care. It was never supposed to care about the individual pod. It cares about the set.\u003C\u002Fp>\u003Cp>How to apply it: use labels like you mean it. I usually separate them into three buckets: app identity, environment, and ownership. For example, \u003Ccode>app=payments\u003C\u002Fcode>, \u003Ccode>env=prod\u003C\u002Fcode>, \u003Ccode>team=platform\u003C\u002Fcode>. Then I build selectors from those labels instead of from names. It makes rollouts and debugging less stupid.\u003C\u002Fp>\u003Cul>\u003Cli>Use pods for shared lifecycle.\u003C\u002Fli>\u003Cli>Use labels for grouping.\u003C\u002Fli>\u003Cli>Use selectors for stable targeting.\u003C\u002Fli>\u003Cli>Use namespaces for scope and cleanup.\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>Deployments work because reconciliation is boring and relentless\u003C\u002Fh2>\u003Cp>The Wikipedia page mentions ReplicaSets, ReplicationControllers, and Deployments. Here’s the practical takeaway: Deployments are how you describe rollout behavior, while ReplicaSets are part of the machinery that keeps a certain number of pods alive. The point is not “create a pod.” The point is “maintain this workload across change.”\u003C\u002Fp>\u003Cp>I’ve seen teams hand-edit pods in production and then act surprised when the edits disappear. Of course they disappear. Pods are ephemeral. If you want a lasting change, you change the controller or the Deployment spec. That’s the only version Kubernetes respects for the long run.\u003C\u002Fp>\u003Cp>What this actually means is that Kubernetes is happiest when you treat every instance as disposable. That’s a hard mindset shift if you came from pets, not cattle, or if you’ve spent years SSHing into machines and fixing them in place. Kubernetes punishes that behavior. It wants repeatability, not heroics.\u003C\u002Fp>\u003Cp>How to apply it: build your rollout story before your service gets big. Decide what happens on update, what happens on failure, and what happens when you need to scale down. If you don’t set that up early, you’ll end up with a pile of YAML and a lot of “we’ll just patch it live” nonsense. I’ve done that. It’s always more expensive later.\u003C\u002Fp>\u003Cp>For day-to-day work, I keep the rule simple: if the thing should survive restarts and scale changes, put it in a controller. If the thing is a one-off job, don’t pretend it’s a long-lived service. Kubernetes has different objects for a reason. Use them.\u003C\u002Fp>\u003Ch2>Services, volumes, and config are where apps stop being toy demos\u003C\u002Fh2>\u003Cp>The Wikipedia article covers Services, Volumes, ConfigMaps, and Secrets because that’s where the orchestration story becomes an application story. Pods alone are not enough. Real apps need stable access, persistent storage, and configuration that changes without rebuilding images every time someone edits a password or endpoint.\u003C\u002Fp>\u003Cp>\u003Cstrong>Services\u003C\u002Fstrong> give you a stable network identity over changing pods. That’s the fix for the “my pod restarted and the IP changed” problem. You point clients at the service, not the pod. This is one of those ideas that feels abstract until you lose an afternoon debugging hard-coded pod addresses.\u003C\u002Fp>\u003Cp>\u003Cstrong>Volumes\u003C\u002Fstrong> handle storage that should outlive a pod. That matters for databases, caches with persistence, and any workload where state cannot vanish on restart. If you ignore this, you end up with data loss and a very awkward retro.\u003C\u002Fp>\u003Cp>\u003Cstrong>ConfigMaps\u003C\u002Fstrong> and \u003Cstrong>Secrets\u003C\u002Fstrong> split configuration from images. This is the part that saves you from rebuilding the same container for every environment. Put non-sensitive config in ConfigMaps. Put sensitive values in Secrets. Then mount or inject them where the app needs them.\u003C\u002Fp>\u003Cp>How to apply it: stop baking environment-specific values into images. I’ve seen people do it because it feels easy, and then they spend months untangling the mess. Instead, keep the image dumb and the runtime smart. The image should contain the app. The cluster should contain the environment-specific stuff.\u003C\u002Fp>\u003Cp>Useful references if you want to go deeper: the official Kubernetes docs at \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Fhome\u002F\">kubernetes.io\u002Fdocs\u003C\u002Fa>, the \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Fconcepts\u002Fservices-networking\u002Fservice\u002F\">Service\u003C\u002Fa> concept page, and the \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Fconcepts\u002Fconfiguration\u002Fsecret\u002F\">Secrets\u003C\u002Fa> page. I’m not saying memorize them. I am saying don’t guess.\u003C\u002Fp>\u003Ch2>The API is the real product, and everything else hangs off it\u003C\u002Fh2>\u003Cp>The Wikipedia page says Kubernetes is extensible and that internal components and extensions rely on the Kubernetes API. That is the whole trick. Once you accept that the API is the center, the rest of the ecosystem makes sense. Tools like \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fkubernetes\u002Fkubectl\">kubectl\u003C\u002Fa>, \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002Fdocs\u002Freference\u002Fkubernetes-api\u002F\">API objects\u003C\u002Fa>, custom resources, controllers, and operators all exist because the API is the stable contract.\u003C\u002Fp>\u003Cp>I used to think operators were some advanced trick for platform teams with too much time. They’re not. They’re just controllers built around custom resources. If you can define desired state for your own domain, you can teach Kubernetes how to reconcile it. That’s powerful, but it also means you are now responsible for the behavior you encode. Kubernetes will faithfully do the wrong thing if your controller is wrong.\u003C\u002Fp>\u003Cp>What this actually means is that the platform is less about containers and more about building your own automation language on top of a common control plane. That’s why so many tools around Kubernetes feel similar. They’re all speaking the same API-shaped grammar.\u003C\u002Fp>\u003Cp>How to apply it: if you’re building internal platform tooling, prefer custom resources and controllers over scripts that shell out to kubectl in a loop. Scripts are fine for one-off admin tasks. They’re terrible as a control strategy. If the behavior needs to be continuous, make it a controller. If the behavior needs to be declarative, make it a resource.\u003C\u002Fp>\u003Cp>I’d also keep an eye on \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fkubernetes-sigs\u002Fcluster-api\">Cluster API\u003C\u002Fa> if you manage clusters themselves. It’s the same idea one layer up: manage clusters with the same declarative style you use for workloads.\u003C\u002Fp>\u003Ch2>The part everyone skips: distribution choice changes the whole experience\u003C\u002Fh2>\u003Cp>The Wikipedia page points out that there are open-source distributions, commercial distributions, and managed distributions. That’s not a footnote. It’s the difference between “I operate Kubernetes” and “Kubernetes operates me.” Google’s \u003Ca href=\"https:\u002F\u002Fcloud.google.com\u002Fkubernetes-engine\">GKE\u003C\u002Fa>, Amazon’s \u003Ca href=\"https:\u002F\u002Faws.amazon.com\u002Feks\u002F\">EKS\u003C\u002Fa>, and \u003Ca href=\"\u002Ftag\u002Fmicrosoft\">Microsoft\u003C\u002Fa>’s \u003Ca href=\"https:\u002F\u002Fazure.microsoft.com\u002Fen-us\u002Fproducts\u002Fkubernetes-service\">AKS\u003C\u002Fa> all wrap the same core ideas with different opinions and different operational burdens.\u003C\u002Fp>\u003Cp>I’ve worked in teams that assumed “Kubernetes” meant one fixed thing. Then they moved from a DIY cluster to a managed service and discovered that their assumptions about upgrades, networking, and access control were all slightly wrong. That’s normal. The core objects stay familiar, but the operational edges move around.\u003C\u002Fp>\u003Cp>How to apply it: decide early how much cluster ownership you actually want. If your team doesn’t want to babysit control plane upgrades, use a managed distribution. If you need tight customization and you have the staff to support it, run more yourself. Just don’t pretend those choices are equivalent. They’re not.\u003C\u002Fp>\u003Cp>The other thing I’d do is define a support policy before the cluster is on fire. The Wikipedia page notes the shift from N-2 to N-3 support in Kubernetes 1.19. That kind of policy matters because upgrades are part of the job. If you don’t plan them, they plan you.\u003C\u002Fp>\u003Ch2>The template you can copy\u003C\u002Fh2>\u003Cpre>\u003Ccode># Kubernetes operating template\n\n## 1) What I am declaring\n- App name:\n- Namespace:\n- Environment:\n- Owner\u002Fteam:\n\n## 2) Desired state\n- Replicas:\n- Container image:\n- Resource requests:\n- Resource limits:\n- Health checks:\n- Rollout strategy:\n\n## 3) Stable identity\n- Labels:\n  - app:\n  - env:\n  - team:\n- Service name:\n- Selector:\n\n## 4) Configuration\n- ConfigMaps:\n  - non-sensitive env values\n  - feature flags\n  - endpoints\n- Secrets:\n  - passwords\n  - tokens\n  - certificates\n\n## 5) Storage\n- Volume needed? yes\u002Fno\n- PersistentVolumeClaim name:\n- Mount path:\n- Retention policy:\n\n## 6) Scheduling rules\n- Node affinity:\n- Tolerations:\n- Anti-affinity:\n- Priority class:\n\n## 7) Failure behavior\n- What should restart automatically?\n- What should scale horizontally?\n- What should be recreated if a node dies?\n- What should never be auto-replaced?\n\n## 8) Controller choice\n- Deployment for long-running stateless app\n- StatefulSet for stable identity and storage\n- DaemonSet for one pod per node\n- Job for run-to-completion work\n\n## 9) Day-2 checks\n- kubectl get pods -n \u003Cnamespace>\n- kubectl describe pod \u003Cpod>\n- kubectl get events -n \u003Cnamespace>\n- kubectl get svc -n \u003Cnamespace>\n- kubectl get deploy -n \u003Cnamespace>\n\n## 10) Copy-ready starter manifest\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: example-app\n  namespace: example\n  labels:\n    app: example-app\n    env: prod\n    team: platform\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: example-app\n  template:\n    metadata:\n      labels:\n        app: example-app\n        env: prod\n        team: platform\n    spec:\n      containers:\n        - name: app\n          image: ghcr.io\u002Fyour-org\u002Fexample-app:1.0.0\n          ports:\n            - containerPort: 8080\n          envFrom:\n            - configMapRef:\n                name: example-app-config\n            - secretRef:\n                name: example-app-secrets\n          resources:\n            requests:\n              cpu: \"100m\"\n              memory: \"128Mi\"\n            limits:\n              cpu: \"500m\"\n              memory: \"256Mi\"\n          readinessProbe:\n            httpGet:\n              path: \u002Fhealthz\n              port: 8080\n            initialDelaySeconds: 5\n            periodSeconds: 10\n          livenessProbe:\n            httpGet:\n              path: \u002Flivez\n              port: 8080\n            initialDelaySeconds: 15\n            periodSeconds: 20\n---\napiVersion: v1\nkind: Service\nmetadata:\n  name: example-app\n  namespace: example\nspec:\n  selector:\n    app: example-app\n  ports:\n    - port: 80\n      targetPort: 8080\n  type: ClusterIP\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>This template is intentionally boring, because boring is what you want from cluster state. It gives you the minimum structure I’d start with in a real team: declared identity, stable selectors, explicit config, real resource limits, health checks, and a service that points at labels instead of pod names.\u003C\u002Fp>\u003Cp>If I were dropping this into a new repo, I’d make three edits first: replace the image, replace the namespace, and tighten the resource requests to what the app actually needs. Then I’d add storage only if the workload truly needs persistence. I’d rather ship a simple Deployment than a fake StatefulSet with no state.\u003C\u002Fp>\u003Cp>Source attribution: the breakdown above is my own interpretation of the \u003Ca href=\"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKubernetes\">Wikipedia Kubernetes page\u003C\u002Fa>, with a few practical opinions layered on top. The template is original and derived from the concepts in that source, the official \u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002F\">Kubernetes documentation\u003C\u002Fa>, and the public ecosystem around Kubernetes.\u003C\u002Fp>","I break down Kubernetes into the control loop, core objects, and a copy-ready cluster template you can actually use.","en.wikipedia.org","https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FKubernetes",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779197680974-7cc1.png",[13,14,15,16,17],"kubernetes","control plane","etcd","controllers","deployments","en",0,false,"2026-05-19T13:24:27.216519+00:00","2026-05-19T13:24:27.149+00:00","done","3f00d12b-c823-4ea5-88b4-cff12d620e17","kubernetes-turns-clusters-into-declared-state-en","tools","749d323d-fc9b-4492-946d-48f95ee0037d","published",[30,31,32],"Kubernetes is a reconciliation system, not a deployment script.","The control plane matters more than the containers when debugging.","Labels, selectors, and controllers are the real unit of work.","a7343b93-37cc-4634-a2bc-707f6275bdb6","[-0.02670183,-0.0061717466,0.026862303,-0.080437556,0.0063375263,-0.0020556161,0.012512456,-0.015597061,0.012166182,0.041689396,0.0029341683,-0.017341804,-0.013432739,0.03161736,0.15638265,-0.007950763,-0.00829093,0.0009950676,-0.0066606156,0.03421184,-0.006004498,-0.0097563425,-0.026295375,-0.0011001993,0.003354679,0.0012572561,0.017370043,0.019653175,0.044416223,0.0057049743,0.007601144,0.027876234,-0.022605885,0.016653774,0.026423167,0.0019104832,-0.010061466,-0.04053206,-0.012072274,0.016729677,-0.0031750703,0.006080731,0.020691955,-0.0041438765,-0.002681002,-0.012714909,-0.023557628,0.018675061,0.00478529,0.0034823897,-0.013933175,0.0021728403,0.0074327155,-0.16620624,-0.0037726518,-0.0032000933,0.015118564,-0.03467972,-0.0011927498,0.023116218,-0.02743942,0.0020984435,-0.008163216,0.0057127746,-0.01596186,-0.0077241436,0.034655865,-0.015054055,0.007204756,-0.0026069954,0.012618221,-0.007101199,-0.003146216,0.024822554,0.004301071,-0.04096195,0.02103706,0.008652747,0.0045521143,0.02477315,-0.0015805771,-0.035951346,-0.029912544,-0.0098375855,0.027768586,0.0016822746,-0.032947555,-0.016518014,0.008174181,-0.023673525,0.030875828,-0.021263015,0.0030241231,-0.006674386,0.027038146,-0.026465982,-0.01271762,-0.02050166,-0.025758564,0.00417239,-0.010916199,0.0045848396,0.01185186,0.010814181,-0.006016609,0.019085497,0.0003968543,-0.03716504,-0.025186827,0.0208452,0.014393771,-0.037445225,-0.014429369,-0.00050994835,-0.017279452,-0.12669484,0.01062657,-0.0053172,-0.0014097175,0.016147597,-0.028900858,-0.01817093,0.009230403,0.0060763843,-0.019232916,-0.007489202,-0.012773415,0.009338924,-0.0002582189,0.010479843,0.0076664356,-0.013213512,0.014661508,0.025302272,0.0012262873,-0.029371744,0.0015416072,-0.006376392,-0.026166117,-0.033212222,-0.002743262,0.025896251,-0.013629252,0.030574176,-0.01918064,-0.003078632,-0.033010416,0.012615658,-0.04084312,-0.027911162,-0.0041615264,-0.015514591,-0.0028358698,-0.015416805,0.028604962,-0.017469198,0.0015331976,-0.0029655497,-0.01329577,-0.014644875,0.004299611,0.013881843,0.008987359,0.033524778,0.024153236,0.047830593,-0.020939497,0.0176392,0.025335569,-0.001053531,-0.0045043244,0.0147655895,-0.025515206,-0.0012870155,0.0018633584,-0.010167014,0.011217113,-0.009463041,0.03541014,-0.027051471,0.011167867,-0.019052137,0.012689741,0.0006688116,0.0007820426,0.016741475,-0.012368816,-0.000604587,0.008427077,-0.021081313,0.02796998,-0.014676302,-0.0060345843,-0.0075688795,0.018655974,-0.029552212,-0.015516314,-0.019007357,-0.0031709753,0.030122312,-0.00017052876,0.00037727624,0.024418864,-0.024773285,0.011202185,-0.0049777054,0.0074742776,-0.014170923,-0.015351392,-0.012522543,-0.046322875,-0.021439256,0.0053127557,0.008547879,-0.002331767,0.006942658,-0.008051419,-0.0009313204,0.0060983035,-0.013760117,0.038934972,0.020099666,0.0087070465,0.016177705,-0.010065723,-0.019129945,-0.0015456441,-0.01116229,-0.0038065042,0.01918721,0.009912646,0.008094417,0.0068035736,0.0012283858,0.026391571,0.047002427,0.024846997,0.01542698,-0.01894402,0.03309346,-0.033854757,-0.004519487,-0.015247396,0.033012677,0.009420912,0.025612082,0.025221556,0.0030672215,-0.001971946,0.001371837,-0.025872229,0.020369744,-0.014137652,0.0076337075,0.0035139276,-0.012648422,-0.0036600954,-0.02932716,0.013127684,-0.029840704,-0.006884098,0.0015896992,0.018541314,0.0069309077,7.58146e-05,-0.004329335,0.005798204,-0.008050661,-0.026514297,-0.01372545,-0.010569166,-0.0061132275,-0.0076100337,-0.00079400686,-0.001516601,0.02179241,-0.041747168,0.039160382,0.02061472,-0.021270884,0.009535738,-0.019025275,0.0012092536,0.009353856,-0.009578865,0.023917353,-0.013493995,0.014225676,-0.013441527,-0.0032299128,0.016790805,0.00015607697,-0.016860863,-0.023944728,0.013251698,-0.010590251,-0.020082956,0.025956606,-0.02165169,0.008389727,0.0442216,-0.04167046,0.0065978365,0.029610097,0.008868948,0.0025403695,0.021173852,0.012783428,-0.0047276705,-0.00021929156,0.0014144569,-0.008077551,0.005506753,0.00026597054,-0.043530807,-0.00032986337,0.009453031,-0.0029447475,0.0027463601,0.0002797469,0.00018702992,-0.0005731252,-0.014817572,-0.00908814,0.01789406,-0.009240554,0.035733048,-0.009924601,0.003135695,-0.0124980025,0.018571902,-0.006348811,0.0062552225,-0.01188155,0.015904652,0.0023222184,-0.0049012993,0.006516809,-0.016860696,-0.013863104,0.008365627,-0.011895009,-0.022994988,-0.006656112,-0.04028244,-0.010200856,-0.009952004,-0.015388,0.03482783,-0.003329337,0.017568536,0.019778268,-0.0008147642,-0.0075598788,-0.037789058,0.008780413,-0.011410978,0.0025320163,0.0047910656,-0.0071907206,0.013107308,0.012386049,-0.010968518,0.0005827707,0.003880357,-0.019462155,0.015585258,-0.007908134,-0.013822295,0.031551544,-0.016447414,-0.001366889,-0.0052218176,-0.009090431,-0.026476584,0.01826298,-0.012221904,-0.03490776,-0.010330498,0.022015134,0.006183043,0.030301401,-0.027019423,-0.025172291,3.2018106e-05,-0.008310355,0.017159505,-0.016755221,0.005924825,0.01937288,0.005165084,0.027023943,-0.019566402,0.00037723285,-0.0059233527,0.00229532,-0.014253959,0.02135583,0.014495144,-0.04272249,-0.0112236105,-0.01597411,-0.011316455,0.007769067,-0.0051865866,-0.0061337324,-0.007351481,-0.023592498,0.00034745902,0.008509485,0.0044602384,0.0081335185,0.0067322366,0.005624186,0.013506167,-0.0020499334,-0.0072630006,0.018594483,-0.0057993503,-0.0066719498,0.0071738907,-0.00053632504,-0.01617941,-0.011776283,0.0055564987,-0.0076320446,-0.0101467725,-0.025524827,-0.02969179,-0.020245926,0.011491765,-0.0053386143,-0.027875338,-0.033579063,0.0016787209,-0.018708464,-0.007141073,0.01644432,-0.0014824038,-0.0048619737,0.0026089961,-0.009788613,-0.009779954,0.008580307,0.016743455,-0.0107577285,-0.010290384,-0.006108333,-0.005032386,-0.011176629,0.022478173,0.0025032447,0.016156241,-0.0064165317,-0.0020579102,-0.008267101,0.0017498455,0.033484552,-0.011494351,0.007089385,-0.0004631439,-0.017829766,-0.008658594,-0.0060213557,-0.017524196,-0.010390298,-0.024532245,-0.024875922,-0.024747236,-0.014936227,-0.0017651555,0.0050229435,0.026041022,-0.013162422,0.0035757152,0.015420073,-0.004254105,0.018592436,0.016001526,-0.01384849,0.03091665,0.021642491,-0.007155499,0.0055154706,0.0019901763,0.0336713,-0.02334015,-0.01049008,0.009064162,0.016555088,0.015984587,0.0015225839,-0.037807416,0.004351809,-0.04129039,-0.014094709,-0.00883319,-0.0017261112,0.007248682,0.00020488945,-0.024363551,-0.009567478,0.008432713,0.018490614,0.00572485,0.008479244,-0.00074160815,-0.025665535,0.0038087913,0.010639924,-0.018986486,-0.006103063,0.014713229,0.019532444,-0.025324136,0.01785666,0.020138798,0.010786485,-0.0070406953,0.016982289,0.0036724755,-0.021799752,-0.013437877,0.027238974,-0.024725877,-0.047693003,0.020427685,0.002532499,0.032344434,-0.020464307,0.013096923,-0.028919008,0.0019792242,-0.0005996671,-0.0009848408,-0.0012453409,0.001693602,-0.012202024,-0.013882162,0.012150763,0.026157914,-0.023177361,-0.020441378,-0.016921269,-0.0068002064,-0.0997291,0.018544199,0.009216355,0.005147991,0.0096410625,-0.011032882,0.00980717,0.034654427,-0.015358709,-0.00037373186,-0.014251464,0.013649598,0.017787943,0.006729699,0.004100644,-0.002631747,0.006316109,-0.0036978698,0.020505827,-0.015010196,0.01677653,0.004810695,0.015512085,-0.0024339915,-0.035647914,-0.022017622,0.030055821,-0.007561359,0.008278864,-0.027647419,0.011149008,0.011363591,0.016113264,-0.0024363252,-0.0024016057,-0.016711697,0.012089489,-0.014867637,0.0061451113,0.03024573,0.020398194,0.0076673566,0.010705996,0.019270238,-6.206096e-05,0.018626966,0.029009761,0.009440511,-0.009647399,0.0011172082,-0.01975295,0.003447203,-0.01610747,-0.039163012,0.0005782,0.01273839,-0.0026515205,0.007008283,-0.002366911,-0.0035234122,-0.02113549,0.028216805,0.0056701107,0.017057633,-0.013075376,0.021471897,-0.0022194635,-0.019573772,0.015784064,-0.008106531,0.016559687,-0.0045807427,0.016638573,0.014450017,0.0107716145,0.0020665461,-0.05966167,0.01588197,-0.0088248225,-0.013848705,-0.021798646,-0.00472762,-0.07898143,-0.030567063,0.0032134498,-0.004480775,0.015665729,-0.015103198,-0.024392784,-0.0058432985,-0.02667186,-0.0065386896,0.0050611706,-0.006414994,-0.00759041,0.005451748,-0.030005453,0.00832181,0.024139892,-0.0027834498,-0.023815274,-0.013723804,-0.0074863858,-0.011685704,0.013857522,-0.019005798,0.019774059,0.014077348,0.007452157,-0.0065228273,0.0063211024,-0.0011820308,-0.00035801224,-0.114926845,-0.033332296,-0.020270001,-0.0060562827,-0.0067804866,-0.0057309945,-0.0095116105,-0.038029417,0.03941278,-0.022878882,-0.018503768,-0.01665044,-0.045801226,-0.026568819,0.013946759,0.10698027,-0.020298656,0.018690392,0.013013276,0.0026121968,0.0029414804,-0.03193481,-0.029299531,0.0003030235,-0.02232091,-0.008060106,0.014449768,-0.0055524665,-0.0012415504,-0.023184516,-0.007050097,-0.015368808,-0.0022989442,0.022039777,0.02220552,-0.014816474,0.010294376,-0.0038744397,-0.011436813,-0.008435169,-3.0192767e-05,-0.0045899935,-0.004168817,0.022291318,0.010932084,0.0068602706,-0.028571289,-0.004067869,0.006878136,-0.0076956525,-0.0148470085,-0.0741695,0.01639176,-0.00959525,0.020602621,-0.010402046,-0.02833479,0.029711122,0.0028532878,-0.0068303817,0.014154413,-0.022015207,0.023419248,0.024434865,-0.027313361,0.013520222,0.05066306,0.032312814,0.0027978758,-0.013828714,-0.010232907,0.029223645,0.017323086,-0.0137402555,0.0016223533,-6.0135393e-05,0.009872217,-0.005608924,0.033037018,0.014329001,-8.244524e-05,-0.001229836,-0.018293908,-0.012978908,-0.0031131848,-0.009794235,0.022533586,0.0017501938,-0.002454317,-0.01640457,0.02204766,0.033267193,0.0049179005,0.025664145,-0.0005330083,0.031486407,-0.004305494,0.015690591,0.022193657,-0.016892133,0.0007720028,-0.022285728,0.011186428,-0.011420561,-0.019534094,-0.02935492,0.014549984,0.019222215,0.032937586,0.020696398]",{"tags":36,"relatedLang":44,"relatedPosts":48},[37,38,39,41,43],{"name":17,"slug":17},{"name":16,"slug":16},{"name":40,"slug":13},"Kubernetes",{"name":14,"slug":42},"control-plane",{"name":15,"slug":15},{"id":27,"slug":45,"title":46,"language":47},"kubernetes-turns-clusters-into-declared-state-zh","Kubernetes 把叢集變成宣告狀態","zh",[49,55,61,67,73,79],{"id":50,"slug":51,"title":52,"cover_image":53,"image_url":53,"created_at":54,"category":26},"809bc2ad-21ca-4c70-90ce-a45705469d11","gemini-live-on-pixel-talk-not-type-en","Gemini Live on Pixel lets you talk, not type","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779210269154-mqwh.png","2026-05-19T17:04:05.084549+00:00",{"id":56,"slug":57,"title":58,"cover_image":59,"image_url":59,"created_at":60,"category":26},"e0ec5f99-c3c7-4032-8351-b640927f2601","sim-visual-agent-workflow-canvas-en","Sim turns agent workflows into a visual canvas","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779201896017-bgff.png","2026-05-19T14:44:17.589672+00:00",{"id":62,"slug":63,"title":64,"cover_image":65,"image_url":65,"created_at":66,"category":26},"83470c71-ea65-4bf5-b4a6-f85b361909bd","low-latency-layer-reflex-anti-lag-linux-gpus-en","low_latency_layer brings Reflex to Linux GPUs","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779201239076-aasd.png","2026-05-19T14:33:32.463919+00:00",{"id":68,"slug":69,"title":70,"cover_image":71,"image_url":71,"created_at":72,"category":26},"39106212-3aab-4cbb-8f59-90ff3bafd605","dbt-sl-turns-semantic-layer-setup-into-a-loop-en","dbt sl turns Semantic Layer setup into a loop","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779200668575-svfx.png","2026-05-19T14:23:58.905277+00:00",{"id":74,"slug":75,"title":76,"cover_image":77,"image_url":77,"created_at":78,"category":26},"141fbbe7-cd23-45f5-aaca-9a558bd934c8","kubernetes-v136-release-notes-playbook-en","Kubernetes v1.36 turns release notes into a playbook","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779197685693-yz7q.png","2026-05-19T13:34:16.628071+00:00",{"id":80,"slug":81,"title":82,"cover_image":83,"image_url":83,"created_at":84,"category":26},"c68c66d5-fd1a-42c3-be06-29843ec3f7fb","ibm-vibe-coding-guide-turns-prompts-into-code-en","IBM’s vibe coding guide turns prompts into code","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1779183883878-35no.png","2026-05-19T09:44:03.056322+00:00",[86,91,96,101,106,111,116,121,126,131],{"id":87,"slug":88,"title":89,"created_at":90},"8008f1a9-7a00-4bad-88c9-3eedc9c6b4b1","surepath-ai-mcp-policy-controls-en","SurePath AI's New MCP Policy Controls Enhance AI Security","2026-03-26T01:26:52.222015+00:00",{"id":92,"slug":93,"title":94,"created_at":95},"27e39a8f-b65d-4f7b-a875-859e2b210156","mcp-standard-ai-tools-2026-en","MCP Standard in 2026: Integrating AI Tools","2026-03-26T01:27:43.127519+00:00",{"id":97,"slug":98,"title":99,"created_at":100},"165f9a19-c92d-46ba-b3f0-7125f662921d","rag-2026-transforming-enterprise-ai-en","How RAG in 2026 is Transforming Enterprise AI","2026-03-26T01:28:11.485236+00:00",{"id":102,"slug":103,"title":104,"created_at":105},"6a2a8e6e-b956-49d8-be12-cc47bdc132b2","mastering-ai-prompts-2026-guide-en","Mastering AI Prompts: A 2026 Guide for Developers","2026-03-26T01:29:07.835148+00:00",{"id":107,"slug":108,"title":109,"created_at":110},"d6653030-ee6d-4043-898d-d2de0388545b","evolving-world-prompt-engineering-en","The Evolving World of Prompt Engineering","2026-03-26T01:29:42.061205+00:00",{"id":112,"slug":113,"title":114,"created_at":115},"3ab2c67e-4664-4c67-a013-687a2f605814","garry-tan-open-sources-claude-code-toolkit-en","Garry Tan Open-Sources a Claude Code Toolkit","2026-03-26T08:26:20.245934+00:00",{"id":117,"slug":118,"title":119,"created_at":120},"66a7cbf8-7e76-41d4-9bbf-eaca9761bf69","github-ai-projects-to-watch-in-2026-en","20 GitHub AI Projects to Watch in 2026","2026-03-26T08:28:09.752027+00:00",{"id":122,"slug":123,"title":124,"created_at":125},"231306b3-1594-45b2-af81-bb80e41182f2","claude-code-vs-cursor-2026-en","Claude Code vs Cursor in 2026","2026-03-26T13:27:14.177468+00:00",{"id":127,"slug":128,"title":129,"created_at":130},"9f332fda-eace-448a-a292-2283951eee71","practical-github-guide-learning-ml-2026-en","A Practical GitHub Guide to Learning ML in 2026","2026-03-27T01:16:50.125678+00:00",{"id":132,"slug":133,"title":134,"created_at":135},"1b1f637d-0f4d-42bd-974b-07b53829144d","aiml-2026-student-ai-ml-lab-repo-review-en","AIML-2026 Is a Bare-Bones Student Lab Repo","2026-03-27T01:21:51.661231+00:00"]