{"id":7573,"date":"2026-08-02T01:19:49","date_gmt":"2026-08-01T17:19:49","guid":{"rendered":"https:\/\/i007.cc\/wordpress\/?p=7573"},"modified":"2026-08-02T01:20:11","modified_gmt":"2026-08-01T17:20:11","slug":"docker-kubernetes-%e6%b7%b1%e5%ba%a6%e8%a7%a3%e6%9e%90","status":"publish","type":"post","link":"https:\/\/i007.cc\/wordpress\/archives\/7573","title":{"rendered":"Docker &#038; Kubernetes \u6df1\u5ea6\u89e3\u6790"},"content":{"rendered":"<div data-rs-index=\"52\" data-index=\"52\">\n<div tabindex=\"0\" role=\"article\" aria-setsize=\"54\" aria-posinset=\"53\" aria-label=\"Message 53 of 54\">\n<div data-test-render-count=\"2\">\n<div class=\"mb-1 mt-[var(--msg-gap,1.5rem)] group group\/message-row\">\n<div class=\"flex flex-col items-end gap-1\">\n<div class=\"group relative inline-flex gap-2 bg-bg-300 dark:[[data-darker-default]_&amp;]:bg-bg-000 rounded-xl pl-2.5 py-[var(--msg-bubble-py,0.625rem)] break-words text-text-100 transition-all max-w-[75ch] flex-col !px-[var(--msg-bubble-px,1rem)] max-w-[85%]\" data-user-message-bubble=\"true\">\n<div class=\"flex flex-row gap-2 relative\">\n<div class=\"flex-1\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div data-rs-index=\"53\" data-index=\"53\" data-last-message=\"true\">\n<div tabindex=\"-1\" role=\"article\" aria-setsize=\"54\" aria-posinset=\"54\" aria-label=\"Message 54 of 54\">\n<div data-test-render-count=\"1\">\n<div class=\"group group\/message-row\">\n<div class=\"group relative relative pb-[var(--msg-assistant-pb,0.75rem)]\" data-is-streaming=\"false\">\n<div class=\"font-claude-response relative leading-[1.65rem] [&amp;_pre&gt;div]:bg-bg-000\/50 [&amp;_pre&gt;div]:border-0.5 [&amp;_pre&gt;div]:border-border-400 [&amp;_.ignore-pre-bg&gt;div]:bg-transparent [&amp;_.standard-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;_.standard-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8 [&amp;_.progressive-markdown_:is(p,blockquote,h1,h2,h3,h4,h5,h6)]:pl-2 [&amp;_.progressive-markdown_:is(p,blockquote,ul,ol,h1,h2,h3,h4,h5,h6)]:pr-8\">\n<div class=\"grid grid-rows-[auto_auto] min-w-0\">\n<div class=\"row-start-2 col-start-1 relative grid grid-rows-[auto_auto] isolate min-w-0\">\n<div class=\"row-start-1 col-start-1 relative z-[2] min-w-0\">\n<div class=\"standard-markdown grid-cols-1 grid [&amp;_&gt;_*]:min-w-0 gap-3 [&amp;_&gt;_*:last-child]:mb-0 print:block print:[&amp;_&gt;_*_+_*]:mt-3 standard-markdown\">\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\" dir=\"ltr\"><\/h3>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\" dir=\"ltr\">\u4e00\u3001Docker\uff1a\u5bb9\u5668\u5316\u57fa\u7840<\/h3>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u6838\u5fc3\u6982\u5ff5<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"Code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u955c\u50cf\uff08Image\uff09= \u53ea\u8bfb\u6a21\u677f\uff0c\u5305\u542b\u4ee3\u7801 + \u8fd0\u884c\u65f6 + \u4f9d\u8d56 + \u914d\u7f6e\r\n\u5bb9\u5668\uff08Container\uff09= \u955c\u50cf\u7684\u8fd0\u884c\u5b9e\u4f8b\uff0c\u9694\u79bb\u7684\u8fdb\u7a0b<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Docker vs \u865a\u62df\u673a<\/strong><\/p>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"Code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u865a\u62df\u673a\uff1a\r\n  \u786c\u4ef6 \u2192 Hypervisor \u2192 [Guest OS \u2192 App]  [Guest OS \u2192 App]\r\n  \u6bcf\u4e2a VM \u6709\u5b8c\u6574\u64cd\u4f5c\u7cfb\u7edf\uff0c\u51e0GB\uff0c\u542f\u52a8\u5206\u949f\u7ea7\r\n\r\nDocker\uff1a\r\n  \u786c\u4ef6 \u2192 Host OS \u2192 Docker Engine \u2192 [Container][Container]\r\n  \u5171\u4eab\u5bbf\u4e3b\u5185\u6838\uff0c\u51e0MB\uff0c\u542f\u52a8\u79d2\u7ea7<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">Dockerfile \u5173\u952e\u6307\u4ee4<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"dockerfile code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">dockerfile<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">FROM ubuntu:22.04          # \u57fa\u7840\u955c\u50cf\r\n\r\nWORKDIR \/app               # \u5de5\u4f5c\u76ee\u5f55\r\n\r\n# \u5148\u590d\u5236\u4f9d\u8d56\u6587\u4ef6\uff0c\u5229\u7528\u5c42\u7f13\u5b58\r\nCOPY CMakeLists.txt .\r\nRUN apt-get install -y cmake g++ &amp;&amp; cmake . &amp;&amp; make\r\n\r\nCOPY . .                   # \u518d\u590d\u5236\u6e90\u7801\uff08\u6e90\u7801\u53d8\u52a8\u4e0d\u4f1a\u8ba9\u4f9d\u8d56\u91cd\u65b0\u6784\u5efa\uff09\r\n\r\nEXPOSE 8080                # \u58f0\u660e\u7aef\u53e3\uff08\u4ec5\u6587\u6863\u7528\uff0c\u4e0d\u81ea\u52a8\u6620\u5c04\uff09\r\n\r\nCMD [\".\/game_server\"]      # \u5bb9\u5668\u542f\u52a8\u547d\u4ee4<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>\u5c42\u7f13\u5b58\uff08Layer Cache\uff09<\/strong>\u00a0\u662f Dockerfile \u4f18\u5316\u7684\u6838\u5fc3\uff1a<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1\" dir=\"ltr\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6bcf\u6761\u6307\u4ee4\u4ea7\u751f\u4e00\u4e2a\u53ea\u8bfb\u5c42<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u67d0\u5c42\u53d8\u5316 \u2192 \u8be5\u5c42\u53ca\u4e4b\u540e\u6240\u6709\u5c42\u91cd\u5efa<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6240\u4ee5\u8981\u628a<strong>\u53d8\u5316\u9891\u7e41\u7684\u6307\u4ee4\u653e\u540e\u9762<\/strong>\uff08\u6e90\u7801 &gt; \u4f9d\u8d56 &gt; \u57fa\u7840\u955c\u50cf\uff09<\/li>\n<\/ul>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u591a\u9636\u6bb5\u6784\u5efa\uff08\u6e38\u620f\u540e\u7aef\u5e38\u7528\uff09<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"dockerfile code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">dockerfile<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># \u9636\u6bb51\uff1a\u7f16\u8bd1\r\nFROM gcc:12 AS builder\r\nWORKDIR \/src\r\nCOPY . .\r\nRUN cmake -DCMAKE_BUILD_TYPE=Release . &amp;&amp; make -j$(nproc)\r\n\r\n# \u9636\u6bb52\uff1a\u53ea\u6253\u5305\u53ef\u6267\u884c\u6587\u4ef6\uff0c\u4e0d\u5e26\u7f16\u8bd1\u5de5\u5177\u94fe\r\nFROM ubuntu:22.04\r\nRUN apt-get install -y libstdc++6    # \u53ea\u88c5\u8fd0\u884c\u65f6\u4f9d\u8d56\r\nCOPY --from=builder \/src\/game_server \/app\/game_server\r\nCMD [\"\/app\/game_server\"]<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">\u7f16\u8bd1\u955c\u50cf 2GB \u2192 \u8fd0\u884c\u955c\u50cf\u53ef\u80fd\u53ea\u6709 100MB\uff0c<strong>\u5b89\u5168 + \u7701\u7a7a\u95f4<\/strong>\u3002<\/p>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\" dir=\"ltr\">\u4e8c\u3001Kubernetes\uff1a\u5bb9\u5668\u7f16\u6392<\/h3>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u4e3a\u4ec0\u4e48\u9700\u8981 K8s<\/h4>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">\u5355\u673a Docker \u591f\u4e86\uff0c\u4f46\u751f\u4ea7\u73af\u5883\u9700\u8981\uff1a<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1\" dir=\"ltr\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u8de8\u591a\u53f0\u673a\u5668\u90e8\u7f72\u5bb9\u5668<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u67d0\u4e2a\u5bb9\u5668\u6302\u4e86\u81ea\u52a8\u91cd\u542f<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6d41\u91cf\u9ad8\u5cf0\u81ea\u52a8\u6269\u5bb9<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6eda\u52a8\u53d1\u5e03\u4e0d\u4e2d\u65ad\u670d\u52a1<\/li>\n<\/ul>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">K8s \u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002<\/p>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u6838\u5fc3\u67b6\u6784<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"Code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 Kubernetes Cluster \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502                                                           \u2502\r\n\u2502  Control Plane\uff08Master\u8282\u70b9\uff09                              \u2502\r\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502\r\n\u2502  \u2502 API     \u2502  \u2502  Scheduler   \u2502  \u2502  etcd  \u2502  \u2502 Ctrl   \u2502  \u2502\r\n\u2502  \u2502 Server  \u2502  \u2502\uff08\u51b3\u5b9a\u653e\u54ea\u91cc\uff09 \u2502  \u2502\uff08\u72b6\u6001\uff09 \u2502  \u2502 Manager\u2502  \u2502\r\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502\r\n\u2502                                                           \u2502\r\n\u2502  Worker Node 1              Worker Node 2                 \u2502\r\n\u2502  \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510       \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510         \u2502\r\n\u2502  \u2502 kubelet          \u2502       \u2502 kubelet          \u2502         \u2502\r\n\u2502  \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502       \u2502 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510  \u2502         \u2502\r\n\u2502  \u2502 \u2502 Pod         \u2502  \u2502       \u2502 \u2502 Pod         \u2502  \u2502         \u2502\r\n\u2502  \u2502 \u2502 [Container] \u2502  \u2502       \u2502 \u2502 [Container] \u2502  \u2502         \u2502\r\n\u2502  \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502       \u2502 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518  \u2502         \u2502\r\n\u2502  \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518       \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518         \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>\u6838\u5fc3\u7ec4\u4ef6\u804c\u8d23<\/strong>\uff1a<\/p>\n<div class=\"overflow-x-auto w-full px-2 mb-6 print:overflow-x-visible\" dir=\"ltr\">\n<table class=\"min-w-full border-collapse text-sm leading-[1.7] whitespace-normal\">\n<thead class=\"text-left\">\n<tr>\n<th class=\"text-text-100 border-b-0.5 border-[hsl(var(--border-300)\/0.6)] py-2 pr-4 align-top font-bold\" scope=\"col\">\u7ec4\u4ef6<\/th>\n<th class=\"text-text-100 border-b-0.5 border-[hsl(var(--border-300)\/0.6)] py-2 pr-4 align-top font-bold\" scope=\"col\">\u804c\u8d23<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">API Server<\/td>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">\u6240\u6709\u64cd\u4f5c\u7684\u5165\u53e3\uff0ckubectl \u5c31\u662f\u5728\u8c03\u5b83<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">etcd<\/td>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">\u5206\u5e03\u5f0f KV \u5b58\u50a8\uff0c\u4fdd\u5b58\u96c6\u7fa4\u6240\u6709\u72b6\u6001<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">Scheduler<\/td>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">\u51b3\u5b9a Pod \u653e\u5230\u54ea\u4e2a Node \u4e0a<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">Controller Manager<\/td>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">\u786e\u4fdd\u5b9e\u9645\u72b6\u6001 = \u671f\u671b\u72b6\u6001\uff08\u6bd4\u5982 Pod \u6302\u4e86\u91cd\u5efa\uff09<\/td>\n<\/tr>\n<tr>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">kubelet<\/td>\n<td class=\"border-b-0.5 border-[hsl(var(--border-300)\/0.3)] py-2 pr-4 align-top\">\u6bcf\u4e2a Node \u4e0a\u7684\u4ee3\u7406\uff0c\u6267\u884c Pod \u7684\u589e\u5220<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u6838\u5fc3\u8d44\u6e90\u5bf9\u8c61<\/h4>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Pod<\/strong>\u00a0\u2014 \u6700\u5c0f\u8c03\u5ea6\u5355\u5143\uff0c\u4e00\u4e2a\u6216\u591a\u4e2a\u5bb9\u5668\u7684\u7ec4\u5408<\/p>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># \u4e00\u822c\u4e0d\u76f4\u63a5\u521b\u5efa Pod\uff0c\u800c\u662f\u901a\u8fc7 Deployment \u7ba1\u7406\r\napiVersion: v1\r\nkind: Pod\r\nspec:\r\n  containers:\r\n  - name: game-server\r\n    image: ea\/fc-mobile-server:v1.2.3\r\n    ports:\r\n    - containerPort: 8080\r\n    resources:\r\n      requests:\r\n        memory: \"512Mi\"\r\n        cpu: \"500m\"      # 0.5 \u6838\r\n      limits:\r\n        memory: \"1Gi\"\r\n        cpu: \"1000m\"     # 1 \u6838\uff0c\u8d85\u8fc7\u4f1a\u88ab\u9650\u6d41<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Deployment<\/strong>\u00a0\u2014 \u7ba1\u7406\u65e0\u72b6\u6001\u670d\u52a1\uff08\u6700\u5e38\u7528\uff09<\/p>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">apiVersion: apps\/v1\r\nkind: Deployment\r\nmetadata:\r\n  name: match-service\r\nspec:\r\n  replicas: 3                    # \u671f\u671b 3 \u4e2a\u526f\u672c\r\n  selector:\r\n    matchLabels:\r\n      app: match-service\r\n  strategy:\r\n    type: RollingUpdate\r\n    rollingUpdate:\r\n      maxUnavailable: 1          # \u66f4\u65b0\u65f6\u6700\u591a 1 \u4e2a\u4e0d\u53ef\u7528\r\n      maxSurge: 1                # \u66f4\u65b0\u65f6\u6700\u591a\u591a\u51fa 1 \u4e2a\r\n  template:\r\n    spec:\r\n      containers:\r\n      - name: match-service\r\n        image: ea\/match-service:v2.0.0<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>StatefulSet<\/strong>\u00a0\u2014 \u7ba1\u7406\u6709\u72b6\u6001\u670d\u52a1\uff08Redis Cluster\u3001\u6570\u636e\u5e93\uff09<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1\" dir=\"ltr\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6bcf\u4e2a Pod \u6709\u56fa\u5b9a\u540d\u79f0\uff08<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">redis-0<\/code>,\u00a0<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">redis-1<\/code>\uff09<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6709\u7a33\u5b9a\u7684\u7f51\u7edc\u6807\u8bc6\u548c\u6301\u4e45\u5316\u5b58\u50a8<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\">\u6e38\u620f\u4e2d\u7684 Redis\u3001MySQL \u4e3b\u4ece\u96c6\u7fa4\u7528\u8fd9\u4e2a<\/li>\n<\/ul>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Service<\/strong>\u00a0\u2014 \u670d\u52a1\u53d1\u73b0 + \u8d1f\u8f7d\u5747\u8861<\/p>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">apiVersion: v1\r\nkind: Service\r\nmetadata:\r\n  name: match-service\r\nspec:\r\n  selector:\r\n    app: match-service       # \u8f6c\u53d1\u5230\u5e26\u8fd9\u4e2a label \u7684 Pod\r\n  ports:\r\n  - port: 80\r\n    targetPort: 8080\r\n  type: ClusterIP            # \u96c6\u7fa4\u5185\u90e8\u8bbf\u95ee\r\n  # type: LoadBalancer       # \u66b4\u9732\u5230\u5916\u7f51\uff0c\u4e91\u5382\u5546\u521b\u5efa LB<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Ingress<\/strong>\u00a0\u2014 HTTP \u8def\u7531\u5c42\uff08\u7c7b\u4f3c Nginx \u53cd\u5411\u4ee3\u7406\uff09<\/p>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># \/api\/match \u2192 match-service\r\n# \/api\/player \u2192 player-service\r\nspec:\r\n  rules:\r\n  - host: api.fcmobile.ea.com\r\n    http:\r\n      paths:\r\n      - path: \/api\/match\r\n        backend:\r\n          service:\r\n            name: match-service\r\n            port: 80<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u81ea\u52a8\u6269\u7f29\u5bb9\uff08HPA\uff09<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">apiVersion: autoscaling\/v2\r\nkind: HorizontalPodAutoscaler\r\nmetadata:\r\n  name: match-service-hpa\r\nspec:\r\n  scaleTargetRef:\r\n    kind: Deployment\r\n    name: match-service\r\n  minReplicas: 3\r\n  maxReplicas: 50\r\n  metrics:\r\n  - type: Resource\r\n    resource:\r\n      name: cpu\r\n      target:\r\n        type: Utilization\r\n        averageUtilization: 70    # CPU \u8d85 70% \u89e6\u53d1\u6269\u5bb9<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>\u6e38\u620f\u573a\u666f<\/strong>\uff1a\u8d5b\u5b63\u5f00\u59cb\/\u8282\u5047\u65e5\u6d3b\u52a8\u6d41\u91cf\u66b4\u6da8 \u2192 HPA \u81ea\u52a8\u4ece 3 \u4e2a Pod \u6269\u5230 30 \u4e2a\uff0c\u6d3b\u52a8\u7ed3\u675f\u81ea\u52a8\u7f29\u56de\uff0c\u8282\u7701\u6210\u672c\u3002<\/p>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u6eda\u52a8\u53d1\u5e03\u4e0e\u56de\u6eda<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"bash code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">bash<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># \u66f4\u65b0\u955c\u50cf\u7248\u672c\r\nkubectl set image deployment\/match-service \\\r\n  match-service=ea\/match-service:v2.1.0\r\n\r\n# K8s \u81ea\u52a8\u6eda\u52a8\uff1a\u5148\u8d77\u65b0\u7248 Pod\uff0c\u5065\u5eb7\u68c0\u67e5\u901a\u8fc7\u540e\u518d\u5220\u65e7\u7248\r\n# \u96f6\u505c\u673a\uff0c\u7b26\u5408 maxUnavailable\/maxSurge \u7ea6\u675f\r\n\r\n# \u53d1\u73b0\u95ee\u9898\uff0c\u4e00\u952e\u56de\u6eda\r\nkubectl rollout undo deployment\/match-service\r\n\r\n# \u56de\u6eda\u5230\u6307\u5b9a\u7248\u672c\r\nkubectl rollout undo deployment\/match-service --to-revision=3<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">ConfigMap &amp; Secret<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># \u914d\u7f6e\u4e0e\u4ee3\u7801\u5206\u79bb\uff0c\u4e0d\u7528\u91cd\u65b0\u6253\u955c\u50cf\r\napiVersion: v1\r\nkind: ConfigMap\r\ndata:\r\n  MATCH_TIMEOUT: \"30\"\r\n  MAX_PLAYERS_PER_ROOM: \"100\"\r\n\r\n---\r\napiVersion: v1\r\nkind: Secret           # Base64 \u7f16\u7801\u5b58\u50a8\uff0c\u5b9e\u9645\u751f\u4ea7\u7528 Vault\r\ndata:\r\n  DB_PASSWORD: cGFzc3dvcmQxMjM=<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\" dir=\"ltr\">\u4e09\u3001\u6e38\u620f\u540e\u7aef\u4e2d\u7684\u5b9e\u6218\u6a21\u5f0f<\/h3>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">FC Mobile \u53ef\u80fd\u7684 K8s \u67b6\u6784<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"Code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">\u5916\u7f51\u6d41\u91cf\r\n    \u2193\r\n[Ingress \/ API Gateway]\r\n    \u2193\r\n[Service Mesh: Istio]  \u2190 \u670d\u52a1\u95f4\u901a\u4fe1\u3001\u7194\u65ad\u3001\u53ef\u89c2\u6d4b\u6027\r\n    \u2193\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502  Stateless Services\uff08Deployment\uff09        \u2502\r\n\u2502  [Match Service]  [Player Service]       \u2502\r\n\u2502  [LiveOps Service] [Leaderboard Service] \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\r\n    \u2193\r\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\r\n\u2502  Stateful Services\uff08StatefulSet\uff09        \u2502\r\n\u2502  [Redis Cluster]  [MySQL]  [Kafka]       \u2502\r\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<h4 class=\"text-text-100 mt-2 -mb-1 text-base font-bold\" dir=\"ltr\">\u5065\u5eb7\u68c0\u67e5\uff08\u5fc5\u987b\u638c\u63e1\uff09<\/h4>\n<div class=\"relative group\/copy bg-bg-000\/50 border-0.5 border-border-400 rounded-lg focus:outline-none focus-visible:ring-2 focus-visible:ring-accent-100\" tabindex=\"0\" role=\"group\" aria-label=\"yaml code\">\n<div class=\"sticky opacity-0 group-hover\/copy:opacity-100 group-focus-within\/copy:opacity-100 top-2 py-2 h-12 w-0 float-right\">\n<div class=\"absolute right-0 h-8 px-2 items-center inline-flex z-10\"><\/div>\n<\/div>\n<div class=\"text-text-500 font-small p-3.5 pb-0\">yaml<\/div>\n<div class=\"overflow-x-auto\">\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">livenessProbe:           # \u5b58\u6d3b\u63a2\u9488\uff1a\u5931\u8d25\u5219\u91cd\u542f\u5bb9\u5668\r\n  httpGet:\r\n    path: \/health\r\n    port: 8080\r\n  initialDelaySeconds: 10\r\n  periodSeconds: 5\r\n  failureThreshold: 3\r\n\r\nreadinessProbe:          # \u5c31\u7eea\u63a2\u9488\uff1a\u5931\u8d25\u5219\u4ece Service \u6458\u9664\uff08\u4e0d\u63a5\u6d41\u91cf\uff09\r\n  httpGet:\r\n    path: \/ready\r\n    port: 8080\r\n  periodSeconds: 3<\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<\/div>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>\u5173\u952e\u533a\u5206<\/strong>\uff1a<\/p>\n<ul class=\"[li_&amp;]:mb-0 [li_&amp;]:mt-1 [li_&amp;]:gap-1 [&amp;:not(:last-child)_ul]:pb-1 [&amp;:not(:last-child)_ol]:pb-1 list-disc flex flex-col gap-1 pl-8 mb-3 print:block print:space-y-1\" dir=\"ltr\">\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">liveness<\/code>\u00a0\u5931\u8d25 \u2192 \u91cd\u542f Pod\uff08\u6cbb\u7597\u6b7b\u9501\/OOM\uff09<\/li>\n<li class=\"font-claude-response-body whitespace-normal break-words pl-2\"><code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">readiness<\/code>\u00a0\u5931\u8d25 \u2192 \u4ece\u8d1f\u8f7d\u5747\u8861\u6458\u9664\uff0c\u4f46\u4e0d\u91cd\u542f\uff08\u670d\u52a1\u9884\u70ed\u4e2d\u3001\u4f9d\u8d56\u672a\u5c31\u7eea\uff09<\/li>\n<\/ul>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\" dir=\"ltr\">\u56db\u3001\u9762\u8bd5\u9ad8\u9891\u95ee\u9898<\/h3>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Q\uff1aPod \u548c\u5bb9\u5668\u7684\u533a\u522b\uff1f<\/strong><\/p>\n<blockquote class=\"ml-2 border-l-4 border-[hsl(var(--border-300)\/0.1)] pl-4 text-text-300\">\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Pod \u662f K8s \u8c03\u5ea6\u7684\u6700\u5c0f\u5355\u4f4d\uff0c\u4e00\u4e2a Pod \u5185\u7684\u5bb9\u5668\u5171\u4eab\u7f51\u7edc\u547d\u540d\u7a7a\u95f4\uff08\u540c\u4e00 IP\uff09\u548c\u5b58\u50a8\u5377\u3002\u540c\u4e00 Pod \u5185\u7684\u5bb9\u5668\u7528\u00a0<code class=\"bg-text-200\/5 border border-0.5 border-border-300 text-danger-000 whitespace-pre-wrap rounded-[0.4rem] px-1 py-px text-[0.9rem]\">localhost<\/code>\u00a0\u901a\u4fe1\uff0c\u9002\u5408\u7d27\u8026\u5408\u7684 sidecar \u6a21\u5f0f\uff08\u6bd4\u5982\u4e3b\u670d\u52a1 + \u65e5\u5fd7\u6536\u96c6 agent\uff09\u3002<\/p>\n<\/blockquote>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Q\uff1aDeployment vs StatefulSet \u600e\u4e48\u9009\uff1f<\/strong><\/p>\n<blockquote class=\"ml-2 border-l-4 border-[hsl(var(--border-300)\/0.1)] pl-4 text-text-300\">\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">\u65e0\u72b6\u6001\u670d\u52a1\uff08API Server\u3001\u5339\u914d\u670d\u52a1\uff09\u7528 Deployment\uff0cPod \u53ef\u4ee5\u968f\u610f\u66ff\u6362\u3002\u6709\u72b6\u6001\u670d\u52a1\uff08Redis\u3001\u6570\u636e\u5e93\u3001\u9700\u8981 sticky session \u7684\u6e38\u620f\u623f\u95f4\u670d\u52a1\uff09\u7528 StatefulSet\uff0cPod \u6709\u56fa\u5b9a\u8eab\u4efd\u548c\u6301\u4e45\u5316\u5b58\u50a8\u3002<\/p>\n<\/blockquote>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Q\uff1aK8s \u5982\u4f55\u5b9e\u73b0\u96f6\u505c\u673a\u53d1\u5e03\uff1f<\/strong><\/p>\n<blockquote class=\"ml-2 border-l-4 border-[hsl(var(--border-300)\/0.1)] pl-4 text-text-300\">\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">RollingUpdate \u7b56\u7565 + readinessProbe \u914d\u5408\u3002\u65b0 Pod \u5c31\u7eea\u63a2\u9488\u901a\u8fc7\u540e\u624d\u63a5\u6d41\u91cf\uff0c\u65e7 Pod \u624d\u5f00\u59cb\u88ab\u5220\u9664\uff0c\u4fdd\u8bc1\u5168\u7a0b\u6709\u8db3\u591f\u7684 ready \u526f\u672c\u3002<\/p>\n<\/blockquote>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\"><strong>Q\uff1a\u955c\u50cf\u5f88\u5927\uff0cCI\/CD \u6162\u600e\u4e48\u89e3\u51b3\uff1f<\/strong><\/p>\n<blockquote class=\"ml-2 border-l-4 border-[hsl(var(--border-300)\/0.1)] pl-4 text-text-300\">\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">\u591a\u9636\u6bb5\u6784\u5efa\u51cf\u5c0f\u4f53\u79ef\uff1b\u5408\u7406\u5b89\u6392 Dockerfile \u5c42\u987a\u5e8f\u5229\u7528\u7f13\u5b58\uff1b\u7528\u79c1\u6709\u955c\u50cf\u4ed3\u5e93\uff08ECR\/ACR\uff09\u90e8\u7f72\u5728\u540c\u533a\u57df\uff1b\u5206\u5c42\u63a8\u9001\u53ea\u4e0a\u4f20\u53d8\u5316\u7684\u5c42\u3002<\/p>\n<\/blockquote>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<h3 class=\"text-text-100 mt-3 -mb-1 text-[1.125rem] font-bold\" dir=\"ltr\">\u4e94\u3001\u4e00\u53e5\u8bdd\u603b\u7ed3<\/h3>\n<blockquote class=\"ml-2 border-l-4 border-[hsl(var(--border-300)\/0.1)] pl-4 text-text-300\">\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">Docker \u89e3\u51b3&#8221;\u5728\u6211\u673a\u5668\u4e0a\u80fd\u8dd1&#8221;\u95ee\u9898\uff0cK8s \u89e3\u51b3&#8221;\u5728\u751f\u4ea7\u73af\u5883\u89c4\u6a21\u5316\u3001\u53ef\u9760\u8fd0\u884c&#8221;\u95ee\u9898\u3002\u6e38\u620f\u540e\u7aef\u7528 K8s \u7ba1\u7406\u5fae\u670d\u52a1\u96c6\u7fa4\uff0c\u901a\u8fc7 Deployment + HPA \u5e94\u5bf9\u6d41\u91cf\u6ce2\u52a8\uff0c\u901a\u8fc7 StatefulSet \u7ba1\u7406\u6709\u72b6\u6001\u4e2d\u95f4\u4ef6\uff0c\u901a\u8fc7\u6eda\u52a8\u53d1\u5e03\u5b9e\u73b0\u4e0d\u505c\u670d\u66f4\u65b0\u3002<\/p>\n<\/blockquote>\n<hr class=\"border-border-200 border-t-0.5 my-3 mx-1.5\" \/>\n<p class=\"font-claude-response-body break-words whitespace-normal\" dir=\"ltr\">\u7ee7\u7eed\u5417\uff1f\u53ef\u4ee5\u6df1\u5165\u00a0<strong>Service Mesh\/Istio<\/strong>\u3001<strong>CI\/CD Pipeline \u8bbe\u8ba1<\/strong>\uff0c\u6216\u8005\u8f6c\u5411\u5176\u4ed6 EA \u9762\u8bd5\u51c6\u5907\u65b9\u5411\u3002<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001Docker\uff1a\u5bb9\u5668\u5316\u57fa\u7840 \u6838\u5fc3\u6982\u5ff5 <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","footnotes":""},"categories":[24],"tags":[],"class_list":["post-7573","post","type-post","status-publish","format-standard","hentry","category-value_docs"],"_links":{"self":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/7573","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/comments?post=7573"}],"version-history":[{"count":0,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/posts\/7573\/revisions"}],"wp:attachment":[{"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/media?parent=7573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/categories?post=7573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/i007.cc\/wordpress\/wp-json\/wp\/v2\/tags?post=7573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}