[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-kubernetes-turns-container-chaos-into-operations-zh":3,"article-related-kubernetes-turns-container-chaos-into-operations-zh":30,"series-tools-a1e6c4e5-e265-4cdd-ad53-da0204132f44":82},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"a1e6c4e5-e265-4cdd-ad53-da0204132f44","kubernetes-turns-container-chaos-into-operations-zh","Kubernetes 把容器混亂變成營運","\u003Cp data-speakable=\"summary\">Kubernetes 不是把容器變簡單，而是把部署、擴縮、故障恢復和服務發現這些營運麻煩收進同一套流程。\u003C\u002Fp>\u003Cp>我用容器平台一陣子了，老實說，\u003Ca href=\"\u002Ftag\u002Fdocker\">Docker\u003C\u002Fa> 當年把打包這件事做得很順，但一碰到真實流量，整個系統就開始露餡。節點掛了要人盯，流量一衝上來要人調，服務彼此找不到對方又要補 DNS、load balancer、重啟腳本，最後像在把 2009 年的補丁一層疊一層。\u003C\u002Fp>\u003Cp>最煩的是，很多團隊把 orchestration 當成「之後再說」的東西。我也看過這種心態：先把 container 跑起來，營運問題等上線後再處理。結果「之後」真的來了，整個系統就開始像沒人收拾的工具箱。Kubernetes 會贏，不是因為它把 distributed system 變得不複雜，而是它老老實實去打那些最煩、最貴、最容易出事的地方。\u003C\u002Fp>\u003Cp>這篇把我重新拉回現實的是 \u003Ca href=\"https:\u002F\u002Fwww.lpi.org\u002Fblog\u002F2026\u002F06\u002F05\u002Fhow-kubernetes-came-to-dominate-large-scale-computing-part-2\u002F\">Linux Professional Institute 的文章\u003C\u002Fa>，作者是 \u003Ca href=\"https:\u002F\u002Fwww.lpi.org\u002Fblog\u002Fauthor\u002Fandrew-oram\u002F\">Andrew Oram\u003C\u002Fa>。文裡沒有提供瀏覽數或書籤數，所以我不亂猜。它真正有價值的地方，是把 \u003Ca href=\"\u002Ftag\u002Fgoogle\">Google\u003C\u002Fa> 的內部 container 工作、Docker 的時間點、還有 CNCF 的角色串起來，讓我看懂 Kubernetes 為什麼會坐到中心位。\u003C\u002Fp>\u003Ch2>Kubernetes 贏在只先處理最髒的那一半\u003C\u002Fh2>\u003Cblockquote>“The developers of Kubernetes didn’t solve all the problems—they weren’t about to invent another CORBA, DCE, or OpenStack. But they set the stage for solutions that were quick to come.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：Kubernetes 沒有裝作自己要當萬能平台。它先把控制平面的麻煩處理掉，像是排程、重啟、服務發現、更新、擴縮。這聽起來很克制，但我反而覺得這才是它厲害的地方。很多工具死在「什麼都想做」，最後每件事都做得半吊子。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781285605986-bdz1.png\" alt=\"Kubernetes 把容器混亂變成營運\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我看過不少團隊想自己做內部平台，理由都很像：我們要一個更簡單的抽象層。結果半年後回頭看，等於自己重造一個比較醜、文件比較少、沒人維護的 Kubernetes。Kubernetes 會站住，不是因為它漂亮，而是因為它夠窄，窄到能解決問題；又夠寬，寬到可以\u003Ca href=\"\u002Fnews\u002Faws-kubernetes-managed-clusters-path-zh\">變成\u003C\u002Fa>預設協調層。\u003C\u002Fp>\u003Cp>實操上，我會先問三件事：\u003C\u002Fp>\u003Cul>\u003Cli>這個工具到底把哪個人工作業從手動變自動？\u003C\u002Fli>\u003Cli>節點消失時，它保得住什麼狀態？\u003C\u002Fli>\u003Cli>有什麼事能在 1 分鐘內自動完成，不用人來點？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果答不清楚，我就會很懷疑。因為真正有用的 orchestration，不是看起來很完整，而是能把 pager 上最常見的事消掉。\u003C\u002Fp>\u003Cp>我之前遇過一個平台案子，大家一開始都很愛講「統一入口」「一致體驗」。聽起來很美，實際上就是把複雜度往後拖。Kubernetes 的做法比較粗暴：先把底層操作收斂，讓團隊至少不用每次都自己處理同樣的爛事。這種務實，我買單。\u003C\u002Fp>\u003Ch2>自動擴縮只有在流量開始耍脾氣時才有感\u003C\u002Fh2>\u003Cblockquote>“Automatic scaling… add new nodes in the cloud as needed, and quickly release them when no longer needed.”\u003C\u002Fblockquote>\u003Cp>也就是說，系統不能等人看到圖表才反應。流量不是照你排班表走的，尖峰常常來得很沒禮貌。今天一個活動、明天一則社群爆文、後天一個 \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa> 被別人誤用，容量規劃就直接翻車。\u003C\u002Fp>\u003Cp>我以前也看過很多「已經容器化」的服務，但營運邏輯還是很土。App 是跑在 container 沒錯，可是 replica 數要手動改、load balancer 要等、pod ready 了沒人知道，最後還是工程師坐在那邊盯。這不叫 automation，這只是把手動流程包了一層比較好看的皮。\u003C\u002Fp>\u003Cp>Kubernetes 讓 autoscaling 變成預設行為，而不是一個要額外寫很多腳本才有的功能。更重要的是，它把 desired state 明講出來。你想要 12 個 replicas，現在只有 9 個，那平台就該自己去補，不要等人來救火。\u003C\u002Fp>\u003Cp>實作時，我會建議你先選對 scaling 指標：\u003C\u002Fp>\u003Cul>\u003Cli>CPU 常見，但不一定是最準的\u003C\u002Fli>\u003Cli>queue depth 常常比 CPU 更接近真實壓力\u003C\u002Fli>\u003Cli>request latency、concurrent sessions 也很常比 CPU 好用\u003C\u002Fli>\u003C\u002Ful>\u003Cp>然後把 scale-up \u002F scale-down 的條件寫清楚。很多團隊以為自己有 autoscaling，結果只是「看起來有」。如果擴容後還要人手動重接流量，那你只是把麻煩延後，沒有解決。\u003C\u002Fp>\u003Cp>我也想提醒一句：autoscaling 不是叫你不要做 capacity planning。它是用來吸收波動，不是用來假裝你不需要知道 baseline load。這兩件事混在一起，最後通常就是 cloud bill 很醜，incident review 更醜。\u003C\u002Fp>\u003Ch2>故障自動重啟不是加分題，是基本盤\u003C\u002Fh2>\u003Cblockquote>“Automatic restart and maintaining state… replace one when it fails.”\u003C\u002Fblockquote>\u003Cp>翻成白話就是：Kubernetes 把 failure 當常態，不是例外。這件事聽起來很理所當然，但很多系統設計還是活在「故障很少發生」的幻想裡。事實是，node 會死、process 會 crash、network 會抖、image 會壞，而且通常都挑你最忙的時候來。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781285600292-pbj5.png\" alt=\"Kubernetes 把容器混亂變成營運\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>文章裡有一句我很認同：cluster 應該先恢復 desired state，然後人再去查 root cause。這才是正確順序。不要反過來，等你完全搞懂才恢復服務。真實營運不是考試，不需要先交出完整答案才能開始救人。\u003C\u002Fp>\u003Cp>我看過太多團隊卡在這裡。大家都有 monitoring，也知道 node 掛了，可是 replacement 要手動做、順序要對、設定要對、還要等某個老 script 的 owner 點頭。這就是 ops tax，而且很貴。Kubernetes 的價值之一，就是把這筆稅盡量打掉。\u003C\u002Fp>\u003Cp>實操上，我會這樣做：\u003C\u002Fp>\u003Cul>\u003Cli>每個 workload 都要有明確 desired state\u003C\u002Fli>\u003Cli>health checks 不要只寫好看，要真的測過\u003C\u002Fli>\u003Cli>restart policy 要跟你的故障模型對齊\u003C\u002Fli>\u003Cli>在 staging 故意 kill pod、drain node、斷 dependency\u003C\u002Fli>\u003C\u002Ful>\u003Cp>順便提醒，restart 不等於 recovery。把壞 process 重啟，不代表它依賴的外部狀態也能跟著恢復。這就把我帶到下一個常被忽略、但其實很要命的部分：storage。\u003C\u002Fp>\u003Ch2>Persistent volume 讓容器不再像一次性紙杯\u003C\u002Fh2>\u003Cblockquote>“Persistent Volumes fill that need fairly elegantly, and are tightly bound into Kubernetes.”\u003C\u002Fblockquote>\u003Cp>意思很直接：Kubernetes 承認一件很煩但很真實的事，container 可以是短命的，application 常常不是。你的 app 可以重啟，客戶資料不行；session state 不行，uploads 不行，index 不行，queue 也不行。很多早期 container 思維最愛假裝所有東西都可以 stateless，結果最後還是偷偷用 bind mount、sidecar、外部腳本補洞。\u003C\u002Fp>\u003Cp>我以前幫忙拆過一個系統，團隊把 reschedule 當成純實作細節。結果 node 一掛，app 是起來了，資料不是不見，就是半套。這種狀況最煩，因為表面上看起來服務還活著，實際上資料鏈已經歪掉。Persistent volume 的好處，就是把資料路徑說清楚，讓你知道 state 到底在哪裡。\u003C\u002Fp>\u003Cp>實作上，我會這樣切：\u003C\u002Fp>\u003Cul>\u003Cli>如果 service 需要 state，先寫出 state 的落點\u003C\u002Fli>\u003Cli>資料要嘛放 PV，要嘛放外部 DB，要嘛放明確可恢復的 managed storage\u003C\u002Fli>\u003Cli>每次版本升級都要講清楚 migration 怎麼保資料\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果你真的能把 service 做成 stateless，那就做。因為 stateless 比較好搬、比較好換、比較好擴。但不要為了追求 stateless 而假裝沒有資料。那不是架構，那是自欺欺人。\u003C\u002Fp>\u003Cp>我自己的檢查法很土，但很有效：\u003C\u002Fp>\u003Cul>\u003Cli>pod 消失時，哪些資料一定要還在？\u003C\u002Fli>\u003Cli>node 消失時，哪些 mount 要自動回來？\u003C\u002Fli>\u003Cli>版本更新時，怎麼保證 migration 不把資料搞爛？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>這三題答不清楚，storage 設計通常還在手寫階段。\u003C\u002Fp>\u003Ch2>Google 的壓力其實比熱血故事更能解釋 Kubernetes\u003C\u002Fh2>\u003Cblockquote>“Google based Kubernetes on internal projects, investing so much in it that management resisted making it open source.”\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：Kubernetes 不是從社群玩具長出來的，它是從超大規模的真實壓力裡長出來的。文裡提到一\u003Ca href=\"\u002Fnews\u002Fturbovec-cuts-vector-ram-to-4gb-zh\">個重點\u003C\u002Fa>，我覺得很關鍵：客戶付了很多 CPU 的錢，卻因為跑在 VM 上而用得很差。這種經濟痛點，會逼工程團隊很快做出答案。\u003C\u002Fp>\u003Cp>我不太喜歡把這段歷史講成溫馨的 open source 故事，因為那樣太扁平。Google 釋出 Kubernetes，不是單純因為大方，而是因為一個可信的 orchestration layer，能把更多 workload 拉進它的 cloud 生態。這不是陰謀論，這就是商業策略。\u003C\u002Fp>\u003Cp>實務上我會建議你看工具時先問：它是被什麼壓力逼出來的？是成本？是 scale？是維運？還是只是 demo 好看？真正被現實磨過的工具，通常 defaults 比較像樣，邊角也比較少幻想。\u003C\u002Fp>\u003Cp>這也解釋了為什麼 Kubernetes 很快就能被 cloud vendor、platform vendor 接住。它不是又一個抽象層而已，它是大家都能站上去的共同協調層，不用把整個 stack 交給單一廠商。\u003C\u002Fp>\u003Ch2>CNCF 的價值不是漂亮，是讓人敢押注\u003C\u002Fh2>\u003Cblockquote>“Within a year—in July 2015—Google partnered with another leviathan of open source computing, the Linux Foundation, to start the vendor-neutral Cloud Native Computing Foundation (CNCF).”\u003C\u002Fblockquote>\u003Cp>意思是，Kubernetes 需要的不只是 code，還需要信任。很多團隊不會把基礎設施押在一個看起來像單一公司私產的專案上。CNCF 的\u003Ca href=\"\u002Fnews\u002Fkubernetes-in-5-parts-what-it-does-zh\">作用\u003C\u002Fa>，就是把這件事變得比較像公共基礎，而不是某家廠商的私人玩具。\u003C\u002Fp>\u003Cp>我在企業導入時很常看到這種信任問題。工程師喜歡是一回事，採購和平台負責人會問另一回事：如果原廠改方向怎麼辦？如果 roadmap 跑掉怎麼辦？如果 support 只剩一半怎麼辦？CNCF 讓 Kubernetes 的答案比較站得住腳，因為它看起來不再只是 Google 的東西。\u003C\u002Fp>\u003Cp>實操上，我會這樣評估平台：\u003C\u002Fp>\u003Cul>\u003Cli>誰在治理它？\u003C\u002Fli>\u003Cli>誰在持續貢獻？\u003C\u002Fli>\u003Cli>如果要換掉它，退出成本有多高？\u003C\u002Fli>\u003C\u002Ful>\u003Cp>治理不是附錄，它會直接影響 roadmap、support、和組織願不願意長期押注。這也是為什麼 Kubernetes 周邊會長出一整串 ecosystem。當一個平台變成大家都假設它存在，其他工具自然會圍著它長。\u003C\u002Fp>\u003Ch2>你覺得 Kubernetes 很吵，是因為它真的進到真實世界了\u003C\u002Fh2>\u003Cblockquote>“And even without Red Hat and CNCF pouring resources into Kubernetes, the community would create all the tools that ease the pain of Kubernetes’s notoriously complex management.”\u003C\u002Fblockquote>\u003Cp>白話就是：Kubernetes 會長出一堆工具，不是因為它失敗，而是因為它太中心了。當一個平台真的被大量採用，複雜度就會浮上來，接著大家開始補 dashboard、operator、policy engine、ingress controller、各種 helper。名字還常常都愛用 K，這點我真的看得很膩。\u003C\u002Fp>\u003Cp>我也不想替 Kubernetes 洗白。它確實不簡單。但我更討厭那種把它說成「可以消滅 ops」的說法。沒有這種事。Kubernetes 只是把工作上移到 policy、platform design、cluster discipline。你還是要管，只是不用每次都手動搬石頭。\u003C\u002Fp>\u003Cp>實操建議很簡單：別期待它變簡單，期待它變成中心。然後你要做的是加 guardrails：\u003C\u002Fp>\u003Cul>\u003Cli>統一 deployment 標準\u003C\u002Fli>\u003Cli>資源 requests \u002F limits 先定好\u003C\u002Fli>\u003Cli>observability 從第一天就要有\u003C\u002Fli>\u003Cli>add-ons 不要讓每隊自己亂裝\u003C\u002Fli>\u003C\u002Ful>\u003Cp>如果放任太自由，cluster 很快就會變成垃圾抽屜。這不是 Kubernetes 的錯，是人性。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># Kubernetes adoption checklist for a real service in production\n\n## 1) Decide what state belongs outside the pod\n- Stateless app containers: yes \u002F no\n- Persistent data location: database \u002F PV \u002F object storage \u002F managed service\n- Session state location: cookie \u002F cache \u002F shared store\n\n## 2) Write the desired state clearly\n- Replicas: __\n- CPU request \u002F limit: __ \u002F __\n- Memory request \u002F limit: __ \u002F __\n- Pod disruption tolerance: __\n\n## 3) Add health and recovery rules\n- Liveness probe: __\n- Readiness probe: __\n- Startup probe: __\n- Restart policy: Always \u002F OnFailure \u002F Never\n\n## 4) Make scaling explicit\n- Scale metric: CPU \u002F memory \u002F queue depth \u002F latency \u002F custom metric\n- Scale-up threshold: __\n- Scale-down threshold: __\n- Minimum replicas: __\n- Maximum replicas: __\n\n## 5) Preserve data correctly\n- PersistentVolumeClaim name: __\n- Storage class: __\n- Backup method: __\n- Restore test frequency: __\n\n## 6) Keep service discovery boring\n- Service name: __\n- Port mapping: __\n- Internal DNS name: __\n- External ingress or load balancer: __\n\n## 7) Roll out changes safely\n- Deployment strategy: RollingUpdate \u002F BlueGreen \u002F Canary\n- Max unavailable: __\n- Max surge: __\n- Rollback trigger: __\n\n## 8) Add observability before traffic\n- Logs: __\n- Metrics: __\n- Alerts: __\n- Dashboard owner: __\n\n## 9) Enforce platform rules\n- Namespace policy: __\n- Resource quotas: __\n- Image source policy: __\n- Secret handling: __\n\n## 10) Test failure on purpose\n- Kill a pod: yes \u002F no\n- Drain a node: yes \u002F no\n- Break a dependency: yes \u002F no\n- Verify recovery time: __\n\n## Minimal deployment skeleton\napiVersion: apps\u002Fv1\nkind: Deployment\nmetadata:\n  name: app\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: app\n  template:\n    metadata:\n      labels:\n        app: app\n    spec:\n      containers:\n        - name: app\n          image: your-registry\u002Fyour-image:tag\n          ports:\n            - containerPort: 8080\n          resources:\n            requests:\n              cpu: \"250m\"\n              memory: \"256Mi\"\n            limits:\n              cpu: \"500m\"\n              memory: \"512Mi\"\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\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這段我就是照著實務需求整理出來的版本：先把 state、scale、recovery、storage、rollout、observability、policy 寫死，別再用「我們之後再補」這種話騙自己。你可以直接拿去改成你家的 manifest review checklist。\u003C\u002Fp>\u003Cp>原始拆解來源是 \u003Ca href=\"https:\u002F\u002Fwww.lpi.org\u002Fblog\u002F2026\u002F06\u002F05\u002Fhow-kubernetes-came-to-dominate-large-scale-computing-part-2\u002F\">Andrew Oram 在 LPI 的文章\u003C\u002Fa>，我上面寫的 operational 解讀與模板是我自己整理的衍生版本。若你要追原始脈絡，可以再往 \u003Ca href=\"https:\u002F\u002Fwww.cncf.io\u002F\">CNCF\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fkubernetes.io\u002F\">Kubernetes 官方文件\u003C\u002Fa> 和 Google 的歷史背景往下挖。\u003C\u002Fp>","我拆 Kubernetes 為何贏在解決真實營運痛點，並附可直接複製的編排模板。","www.lpi.org","https:\u002F\u002Fwww.lpi.org\u002Fblog\u002F2026\u002F06\u002F05\u002Fhow-kubernetes-came-to-dominate-large-scale-computing-part-2\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781285605986-bdz1.png","tools","zh","0abd6ddf-cb83-497b-a70b-9b559356970f",[17,18,19,20,21],"Kubernetes","container orchestration","autoscaling","CNCF","platform engineering",[23,24,25],"Kubernetes 會贏，是因為它先解決營運痛點，不是先講故事。","真正該抄的是 desired state、故障恢復、storage 與 rollout 的做法。","別把 Kubernetes 當成免維運工具；它只是把維運從手工搬石頭變成制度化。",1,"2026-06-12T17:32:53.10569+00:00","2026-06-12T17:32:53.076+00:00","1e447294-c64f-42ba-8348-422d168e3d13",{"tags":31,"relatedLang":41,"relatedPosts":45},[32,33,35,37,39],{"name":19,"slug":19},{"name":21,"slug":34},"platform-engineering",{"name":18,"slug":36},"container-orchestration",{"name":17,"slug":38},"kubernetes",{"name":20,"slug":40},"cncf",{"id":15,"slug":42,"title":43,"language":44},"kubernetes-turns-container-chaos-into-operations-en","Kubernetes turns container chaos into operations","en",[46,52,58,64,70,76],{"id":47,"slug":48,"title":49,"cover_image":50,"image_url":50,"created_at":51,"category":13},"1f8c57f4-698a-42a5-80e8-85cf7cb915d6","mimo-v25-pro-turns-agent-work-into-one-api-call-zh","MiMo-V2.5-Pro 把 agent 工作變成一個 API","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781320694317-up12.png","2026-06-13T03:17:48.351417+00:00",{"id":53,"slug":54,"title":55,"cover_image":56,"image_url":56,"created_at":57,"category":13},"bcf84ab5-c420-448a-968b-d6777d846d68","8-cursor-alternatives-that-fit-how-you-work-zh","8 款 Cursor 替代品怎麼選","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781312602751-6ay6.png","2026-06-13T01:02:56.132136+00:00",{"id":59,"slug":60,"title":61,"cover_image":62,"image_url":62,"created_at":63,"category":13},"4cd74291-8fb5-4203-ba64-b9e5cc5dec68","ollama-default-local-ai-layer-zh","Ollama 正在成為預設的本地 AI 層","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781310769394-h8f5.png","2026-06-13T00:32:16.314447+00:00",{"id":65,"slug":66,"title":67,"cover_image":68,"image_url":68,"created_at":69,"category":13},"d151c5d3-b298-499a-9524-f06d42a8b26b","songscription-turns-piano-audio-into-editable-sheet-music-zh","Songscription 讓鋼琴音檔變可編輯樂譜","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781288303307-ll88.png","2026-06-12T18:17:55.667582+00:00",{"id":71,"slug":72,"title":73,"cover_image":74,"image_url":74,"created_at":75,"category":13},"d1ee04c1-484e-4b7e-804d-414053db6ce0","ios-27-turns-apple-music-into-smarter-player-zh","iOS 27 讓 Apple Music 變更會聽","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781287411723-ze4w.png","2026-06-12T18:02:58.114644+00:00",{"id":77,"slug":78,"title":79,"cover_image":80,"image_url":80,"created_at":81,"category":13},"f43f7321-9439-4700-a26f-27f3ab2f2b61","aws-kubernetes-managed-clusters-path-zh","AWS Kubernetes 讓集群變成可管路徑","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1781283806970-wp6p.png","2026-06-12T17:02:58.687247+00:00",[83,88,93,98,103,108,113,118,123,128],{"id":84,"slug":85,"title":86,"created_at":87},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":89,"slug":90,"title":91,"created_at":92},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":94,"slug":95,"title":96,"created_at":97},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":99,"slug":100,"title":101,"created_at":102},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":104,"slug":105,"title":106,"created_at":107},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":109,"slug":110,"title":111,"created_at":112},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":114,"slug":115,"title":116,"created_at":117},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":119,"slug":120,"title":121,"created_at":122},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":124,"slug":125,"title":126,"created_at":127},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":129,"slug":130,"title":131,"created_at":132},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]