{"id":33591,"date":"2023-08-28T03:20:01","date_gmt":"2022-11-07T23:36:50","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/"},"modified":"2024-04-30T20:24:20","modified_gmt":"2024-04-30T12:24:20","slug":"%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/","title":{"rendered":"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09"},"content":{"rendered":"<p>\u672c\u6587\u662f\u4e00\u7bc7\u5173\u4e8e\u81ea\u5236\u5f3a\u5316\u5b66\u4e60\u6846\u67b6\u7684\u89e3\u8bf4\u6587\u7ae0\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u8fd9\u7bc7\u6587\u7ae0\u7684\u4ee3\u7801\u4f4d\u7f6e\uff1aexamples\/kubernetes<\/p>\n<p>\u514d\u8d39\u7ae0\u8282\u7684\u5ef6\u7eed\u3002<\/p>\n<p>1\uff1a\u4f7f\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u5f3a\u5316\u5b66\u4e60\uff08\u514d\u8d39\u7248\uff09<br \/>\n2\uff1a\u8fd9\u91cc<br \/>\n3\uff1a\u4f7f\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u5f3a\u5316\u5b66\u4e60\uff08GKE\/\u4ed8\u8d39\u7248\uff09<\/p>\n<p>\u8bf7\u53c2\u8003\u524d\u7bc7\u6587\u7ae0\u4e86\u89e3\u6709\u5173\u67b6\u6784\u7b49\u7684\u6982\u8ff0\u3002<br \/>\n\u9996\u5148\u6211\u4eec\u5728\u672c\u5730\u521b\u5efa\u4e00\u4e2akubernetes\u3002<\/p>\n<h1>\u6574\u4f53\u5370\u8c61<\/h1>\n<p>\u8fd9\u6b21\u60f3\u6784\u5efa\u7684\u7ec4\u5408\u5305\u542b\u4e86\u591a\u4e2a\u670d\u52a1\u3002<br \/>\n\u5bf9\u4e8e\u50cf\u8fd9\u6837\u96c6\u6210\u591a\u4e2a\u670d\u52a1\u5668\u7684\u65b9\u6cd5\u4e4b\u4e00\uff0c\u6709 Kubernetes\uff08k8s\uff09\u3002<br \/>\n\u56e0\u4e3a\u662f\u7b2c\u4e00\u6b21\u63a5\u89e6k8s\uff0c\u8bf7\u5bbd\u5bb9\u4e00\u4e9b&#8230;\u3002<\/p>\n<p>\u7b80\u5355\u6765\u8bf4\uff0ck8s\u7684\u6982\u5ff5\u662f\u6307\u4e00\u4e2aPod\u662f\u4e00\u4e2a\u865a\u62df\u7684\u8ba1\u7b97\u673a\uff0c\u800cPod\u5185\u5305\u542b\u591a\u4e2aDocker\u5bb9\u5668\u3002\u4e0b\u9762\u662f\u6211\u4eec\u5373\u5c06\u521b\u5efa\u7684\u6574\u4f53\u67b6\u6784\u56fe\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d187e37434c4406c06a7c\/9-0.png\" alt=\"a-\u30da\u30fc\u30b87.drawio.png\" \/><\/div>\n<p>\u521b\u5efa\u4e09\u4e2a\u5927\u578bPod\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>RedisPod<\/ol>\n<\/li>\n<\/ol>\n<p>RedisPod\u662f\u4e00\u4e2aPod\uff0c\u91cc\u9762\u5305\u542b\u4e86\u4e00\u4e2aRedis\u670d\u52a1\u5668\u5bb9\u5668\u548c\u4e00\u4e2aRedis-commander\uff08\u7528\u4e8eGUI\u754c\u9762\uff09\u5bb9\u5668\u3002\u5b83\u517c\u4efb\u4e86TaskBoard\u3001ParameterBoard\u548cQueue\u4e09\u4e2a\u89d2\u8272\u7684\u529f\u80fd\u3002\u53ea\u6709\u901a\u8fc7\u5916\u90e8\u6216\u5185\u90e8\u7684\u8bbf\u95ee\u53ef\u4ee5\u8fde\u63a5\u5230\u8fd9\u4e2aPod\u3002<\/p>\n<p>TrainerPod<\/p>\n<p>TrainerPod\u662f\u4e00\u4e2aPod\uff0c\u91cc\u9762\u53ea\u6709\u4e00\u4e2aTrainer\u7528\u7684\u5bb9\u5668\u8fd0\u884c\u3002<\/p>\n<p>ActorPod<\/p>\n<p>\u4e00\u5171\u6709N\u4e2aActorPods\u542f\u52a8\uff0c\u6bcf\u4e2aActorPod\u91cc\u9762\u53ea\u6709\u4e00\u4e2aActor\u7528\u7684\u5bb9\u5668\u8fd0\u884c\u3002<\/p>\n<p>\u4f5c\u4e3a\u4e00\u4e2aActor\uff0c\u6211\u4f1a\u4f7f\u7528Pod\u7684\u590d\u5236\u529f\u80fd\u6765\u590d\u5236\u3002\uff08\u6211\u4e0d\u786e\u5b9a\u8fd9\u662f\u6b63\u786e\u7684\u7528\u6cd5\uff09\u6bcf\u4e2aPod\u90fd\u4f1a\u901a\u8fc7Service\u7684\u6982\u5ff5\u8fdb\u884c\u8fde\u63a5\u3002\uff08\u5728\u56fe\u4e2d\u8868\u793a\u4e3a\u7bad\u5934\uff09<br \/>\n* Pod\u5185\u7684\u5bb9\u5668\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528localhost\u8fdb\u884c\u901a\u4fe1\u3002<br \/>\n* \u53ef\u4ee5\u5c06Redis\u7684\u4e0d\u540c\u89d2\u8272\u5206\u5272\u5230\u4e0d\u540c\u7684Pod\u4e2d\u3002\u6700\u521d\u5c06\u961f\u5217\u7684\u89d2\u8272\u5206\u5272\u5230\u53e6\u4e00\u4e2aPod\u4e2d\u5e76\u4f7f\u7528RabbitMQ\uff0c\u4f46\u8fd9\u592a\u590d\u6742\u4e86\uff0c\u6240\u4ee5\u6211\u4eec\u8fdb\u884c\u4e86\u6574\u5408\u3002<\/p>\n<h1>Docker\u684c\u9762\u7248 + Kubernetes<\/h1>\n<p>\u7531\u4e8eDockerDesktop\u5728\u5b98\u65b9\u63d0\u4f9b\u4e86K8s\u529f\u80fd\uff0c\u6240\u4ee5\u6211\u5c06\u5229\u7528\u5b83\u6765\u5b66\u4e60K8s\u3002<\/p>\n<p>\u5982\u679c\u6ca1\u6709\u5b89\u88c5Docker Desktop\uff0c\u5219\u53ef\u4ee5\u4ece\u4ee5\u4e0b\u94fe\u63a5\u8fdb\u884c\u5b89\u88c5\uff1a<\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"meWHWnC15y\"><p><a href=\"https:\/\/www.docker.com\/products\/docker-desktop\/\">Docker Desktop<\/a><\/p><\/blockquote>\n<p><iframe loading=\"lazy\" class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;Docker Desktop&#8221; &#8212; Docker\" src=\"https:\/\/www.docker.com\/products\/docker-desktop\/embed\/#?secret=wsTI0HTwum#?secret=meWHWnC15y\" data-secret=\"meWHWnC15y\" width=\"500\" height=\"282\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p>\u4ee5\u4e0b\u662f\u542f\u7528K8s\u7684\u6b65\u9aa4\u3002<br \/>\nhttps:\/\/matsuand.github.io\/docs.docker.jp.onthefly\/desktop\/kubernetes\/<\/p>\n<p>\u53ea\u9700\u8981\u4e00\u79cd\u9009\u9879\uff1a\u8be6\u7ec6\u5185\u5bb9\u7701\u7565\uff0c\u4f46\u662f\u5982\u679c\u6709\u6548\uff0c\u5b83\u5c06\u4f1a\u542f\u52a8\u8d77\u6765\u3002k8s\u4f3c\u4e4e\u662f\u6309\u7167\u4e0a\u4e0b\u6587\u5355\u4f4d\u6765\u5904\u7406\u9879\u76ee\u7684\uff0c\u5e76\u4e14\u5e94\u8be5\u4f1a\u6709\u4e00\u4e2a\u540d\u4e3adocker-desktop\u7684\u4e1c\u897f\u3002<\/p>\n<p>\u4e3a\u4e86\u786e\u8ba4\u80fd\u5426\u4f7f\u7528 &#8220;kubectl&#8221; \u547d\u4ee4\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u4ee5\u4e0b\u65b9\u5f0f\u68c0\u67e5\u4e0a\u4e0b\u6587\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># \u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u5909\u66f4<\/span>\r\n<span class=\"o\">&gt;<\/span> kubectl config use-context docker-desktop\r\n<span class=\"o\">&gt;<\/span> kubectl config get-contexts\r\nCURRENT   NAME            CLUSTER         AUTHINFO       NAMESPACE\r\n<span class=\"k\">*<\/span>         docker-desktop  docker-desktop  docker-desktop\r\n<\/code><\/pre>\n<h2>Pod\u7684\u6982\u5ff5<\/h2>\n<p>\u6211\u5728\u8fd9\u91cc\u66fe\u7ecf\u7ea0\u7ed3\u8fc7\uff0c\u6240\u4ee5\u73b0\u5728\u6211\u628a\u5907\u5fd8\u5f55\u5199\u4e0b\u6765\u3002<br \/>\n\u5728k8s\u4e2d\u6709Pod\u3001ReplicaSet\u548cDeployment\u7684\u6982\u5ff5\uff0c\u5b83\u4eec\u5206\u522b\u4ee3\u8868\u4ee5\u4e0b\u542b\u4e49\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Pod\u306fk8s\u306e\u6700\u5c0f\u5358\u4f4d\u30671\u3064\u306ePod\u306b\u8907\u6570\u306e\u30b3\u30f3\u30c6\u30ca\u304c\u5165\u308a\u3001Pod\u5185\u306f\u540c\u3058\u30ea\u30bd\u30fc\u30b9\u304c\u5171\u6709\u3055\u308c\u308b(CPU,\u30e1\u30e2\u30ea\u3084\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u7b49\u304c\u5171\u901a)<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">ReplicaSet\u306f\u540c\u3058Pod\u3092\u8907\u88fd\u3059\u308b\u6a5f\u80fd<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Deployment\u306fReplicaSet\u3092\u30e9\u30c3\u30d7\u3057\u3001\u30c7\u30d7\u30ed\u30a4\u30fb\u66f4\u65b0\u30fb\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u7b49\u3082\u542b\u3081\u3066\u7ba1\u7406\u3059\u308b<\/ul>\n<p>\u5728\u5305\u542b\u5173\u7cfb\u4e0a\uff0cDeployment \u2283 ReplicaSet \u2283 Pod\u3002<\/p>\n<p>\u4f7f\u7528Deployment\u57fa\u672c\u4e0a\u6ca1\u6709\u95ee\u9898\uff0c\u4f46\u5bf9\u4e8e\u50cf\u8fd9\u6b21\u7684\u6279\u5904\u7406\u9700\u6c42\u6765\u8bf4\uff0c\u4f3c\u4e4e\u4e0e\u4e4b\u4e0d\u517c\u5bb9\uff0c\u4e0b\u9762\u7684GKE\u6587\u7ae0\u4e2d\u7684\u8d44\u6e90\u5206\u914d\u4f1a\u5931\u8d25\u4e00\u6b21\u53c8\u4e00\u6b21&#8230;\u3002<br \/>\nDeployment\u53ef\u80fd\u529f\u80fd\u7a0d\u5fae\u590d\u6742\uff0c\u6240\u4ee5\u6211\u4eec\u57fa\u672c\u4e0a\u4f7f\u7528Pod\u3002<\/p>\n<p>\u4e00\u822c\u6765\u8bf4\uff0c\u5982\u679c\u4e0d\u4f7f\u7528Deployment\uff0c\u800c\u662f\u4f7f\u7528Pod\u7684\u8bdd\uff0c\u60c5\u51b5\u5982\u4e0b\uff08\u636eChatGPT\u6240\u8ff0\uff09\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5b66\u7fd2\u3084\u30c6\u30b9\u30c8\uff1aDeployment\u306f\u8907\u6570\u306ePod\u3092\u7ba1\u7406\u3059\u308b\u305f\u3081\u306e\u3082\u306e\u3067\u3001\u5358\u4e00\u306ePod\u3092\u4f7f\u3046\u5834\u5408\u306f\u76f4\u63a5Pod\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u4e00\u6642\u7684\u306a\u30b8\u30e7\u30d6\u3084\u30bf\u30b9\u30af\uff1a\u4f8b\u3048\u3070\u30d0\u30c3\u30c1\u51e6\u7406\u3084\u30c7\u30fc\u30bf\u306e\u30af\u30ea\u30fc\u30cb\u30f3\u30b0\u306a\u3069\u306e\u4e00\u6642\u7684\u306a\u4f5c\u696d\u3092\u884c\u3046\u5834\u5408\u306f\u3001\u305d\u306e\u30b8\u30e7\u30d6\u5c02\u7528\u306ePod\u3092\u76f4\u63a5\u4f5c\u6210\u3059\u308b\u3053\u3068\u304c\u3042\u308a\u307e\u3059<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\u7279\u5b9a\u306e\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408\uff1aDeployment\u306f\u30c7\u30d7\u30ed\u30a4\u3084\u66f4\u65b0\u306e\u7ba1\u7406\u306b\u4fbf\u5229\u306a\u30c4\u30fc\u30eb\u3067\u3059\u304c\u3001\u7279\u5b9a\u306e\u5236\u5fa1\u304c\u5fc5\u8981\u306a\u5834\u5408\u306fPod\u3092\u76f4\u63a5\u4f5c\u6210\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059<\/ul>\n<p>\u57fa\u672c\u4e0a\u9019\u7a2e\u60c5\u6cc1\u61c9\u8a72\u5c31\u662f\u9019\u6a23\u3002<br \/>\n\u9019\u662f\u6211\u500b\u4eba\u7684\u7406\u89e3\uff0c\u6c38\u7e8c\u6027\u670d\u52d9\u61c9\u8a72\u4f7f\u7528Deployment\uff0c\u800c\u6279\u6b21\u8655\u7406\u7cfb\u7d71\u5247\u66f4\u9069\u5408\u4f7f\u7528Pod\uff08\u6216\u8005ReplicaSet\uff09\uff0c\u9019\u6a23\u80fd\u4fdd\u6301\u66f4\u7a69\u5b9a\u7684\u5370\u8c61\u3002<\/p>\n<h2>1. \u542f\u52a8Redis<\/h2>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u5c1d\u8bd5\u542f\u52a8\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528Web\u4e0a\u7684\u5bb9\u5668\u955c\u50cf\u7684Redis\u3002<br \/>\n\u4e0b\u9762\u662f\u6307\u5357\u3002<br \/>\n\u7531\u4e8eGEA\u8fd8\u5b58\u5728\uff0c\u6240\u4ee5\u6211\u60f3\u8981\u5206\u5f00\u5de5\u4f5c\u76ee\u5f55\u3002<br \/>\n\u76ee\u5f55\u7ed3\u6784\u5982\u4e0b\u3002<\/p>\n<pre class=\"post-pre\"><code>.\/\r\n \u2514 docker_desktop\/ # new\r\n    \u2514 redis.yaml   # new\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-internal-service<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClusterIP<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-internal-port<\/span>\r\n    <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-external-service<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">NodePort<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-external-port<\/span>\r\n    <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n    <span class=\"na\">nodePort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">30001<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-web-port<\/span>\r\n    <span class=\"na\">protocol<\/span><span class=\"pi\">:<\/span> <span class=\"s\">TCP<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8081<\/span>\r\n    <span class=\"na\">nodePort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">30002<\/span>\r\n\r\n\r\n<span class=\"nn\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ConfigMap<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-config<\/span>\r\n<span class=\"na\">data<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">redis.conf<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|-<\/span>\r\n    <span class=\"s\">bind 0.0.0.0<\/span>\r\n    <span class=\"s\">port 6379<\/span>\r\n\r\n<span class=\"s\">---<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Pod<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-pod<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-server<\/span>\r\n      <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis:7.2-alpine<\/span>\r\n      <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6379<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">redis-server\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/etc\/redis\/redis.conf\"<\/span><span class=\"pi\">]<\/span>\r\n      <span class=\"na\">volumeMounts<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-config<\/span>\r\n          <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/redis<\/span>\r\n      <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">limits<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">900m\"<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-commander<\/span>\r\n      <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">rediscommander\/redis-commander:latest<\/span>\r\n      <span class=\"na\">env<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[{<\/span><span class=\"s2\">\"<\/span><span class=\"s\">name\"<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">REDIS_HOSTS\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">value\"<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">local:localhost:6379\"<\/span><span class=\"pi\">}]<\/span>\r\n      <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8081<\/span>\r\n      <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">limits<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">200m\"<\/span>\r\n          <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">64Mi\"<\/span>\r\n  <span class=\"na\">volumes<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-config<\/span>\r\n      <span class=\"na\">configMap<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-config<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u672c\u5185\u5bb9\u6d89\u53ca\u521b\u5efaRedis\u7684Pod\uff0c\u5e76\u5728\u96c6\u7fa4\u5185\u6253\u5f006379\u7aef\u53e3\uff0c\u5411\u5916\u90e8\u6253\u5f0030001\u7aef\u53e3\uff08Redis\uff09\u548c30002\u7aef\u53e3\uff08Redis\u7ba1\u7406\u754c\u9762\uff09\u3002<\/p>\n<p>\u521b\u5efa\u6587\u4ef6\u540e\uff0c\u5728\u63d0\u793a\u7b26\u4e0b\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\uff0c\u542f\u52a8\u5b83\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl apply <span class=\"nt\">-f<\/span> .\/docker_desktop\/redis.yaml\r\n<\/code><\/pre>\n<p>\u4f60\u53ef\u4ee5\u5728\u4e0b\u9762\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl get pods\r\nNAME        READY   STATUS    RESTARTS   AGE\r\nredis-pod   2\/2     Running   0          14s\r\n<\/code><\/pre>\n<p>\u5982\u679c\u542f\u52a8\u6210\u529f\uff0c\u60a8\u5c31\u53ef\u4ee5\u4ece\u4ee5\u4e0b\u4f4d\u7f6e\u8fdb\u5165\u7ba1\u7406\u754c\u9762\u3002<\/p>\n<p>&nbsp;<\/p>\n<p>\u5982\u679c\u8981\u5220\u9664\uff0c\u8bf7\u53c2\u8003\u4ee5\u4e0b\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl delete <span class=\"nt\">-f<\/span> .\/docker_desktop\/redis.yaml\r\n<\/code><\/pre>\n<h2>2. \u521b\u5efa\u5bb9\u5668\u955c\u50cf<\/h2>\n<p>\u521b\u5efa\u7528\u4e8eActor\/Trainer\u4f7f\u7528\u7684\u5bb9\u5668\u6620\u50cf\u3002<br \/>\n\u6b64\u6620\u50cf\u4e5f\u5c06\u5728GKE\u4e2d\u4f7f\u7528\u76f8\u540c\u7684\u7248\u672c\u3002<br \/>\n\u4e0b\u9762\u662f\u5728\u6b64\u5904\u521b\u5efa\u7684\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>.\/\r\n \u251c docker_desktop\/\r\n |  \u2514 redis.yaml\r\n |\r\n \u251c dockerfile        # new\r\n \u251c server_actor.py   # new\r\n \u2514 server_trainer.py # new\r\n<\/code><\/pre>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u5c06\u521b\u5efa\u4e00\u4e2a\u7528\u4e8e\u5165\u53e3\u70b9\u7684\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">from<\/span> <span class=\"n\">srl.runner.distribution<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">RedisParameters<\/span><span class=\"p\">,<\/span> <span class=\"n\">actor_run_forever<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"n\">srl.utils.common<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">logger_print<\/span>\r\n\r\n<span class=\"nf\">logger_print<\/span><span class=\"p\">()<\/span>\r\n<span class=\"nf\">actor_run_forever<\/span><span class=\"p\">(<\/span><span class=\"nc\">RedisParameters<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">redis-internal-service<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span> <span class=\"bp\">None<\/span><span class=\"p\">)<\/span>\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"kn\">from<\/span> <span class=\"n\">srl.runner.distribution<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">RedisParameters<\/span><span class=\"p\">,<\/span> <span class=\"n\">trainer_run_forever<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"n\">srl.utils.common<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">logger_print<\/span>\r\n\r\n<span class=\"nf\">logger_print<\/span><span class=\"p\">()<\/span>\r\n<span class=\"nf\">trainer_run_forever<\/span><span class=\"p\">(<\/span><span class=\"nc\">RedisParameters<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">redis-internal-service<\/span><span class=\"sh\">\"<\/span><span class=\"p\">),<\/span><span class=\"bp\">None<\/span><span class=\"p\">)<\/span>\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u6765\u81eak8s\u5185\u90e8\u7684\u8bbf\u95ee\uff0c\u60a8\u53ef\u4ee5\u901a\u8fc7&#8221;redis-internal-service&#8221;\u8fdb\u884c\u8bbf\u95ee\u3002<br \/>\n\uff08\u5728redis.yaml\u6587\u4ef6\u4e2d\u5b9a\u4e49\u4e86\u8fd9\u4e2a\uff09<\/p>\n<p>\u63a5\u4e0b\u6765\uff0c\u521b\u5efaDockerfile\u3002<br \/>\nTensorflow\u955c\u50cf\u7684\u5c3a\u5bf8\u5f88\u5927\u2026\u2026<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># syntax=docker\/dockerfile:1<\/span>\r\n\r\n<span class=\"c\"># --- select image CPU(1.76GB) or GPU(7.38GB)<\/span>\r\n<span class=\"k\">FROM<\/span><span class=\"s\"> tensorflow\/tensorflow:2.14.0-gpu<\/span>\r\n<span class=\"c\">#FROM tensorflow\/tensorflow:2.14.0<\/span>\r\n\r\n<span class=\"k\">WORKDIR<\/span><span class=\"s\"> \/code<\/span>\r\n<span class=\"k\">RUN <\/span>apt-get update <span class=\"se\">\\\r\n<\/span> <span class=\"o\">&amp;&amp;<\/span> apt <span class=\"nb\">install<\/span> <span class=\"nt\">-y<\/span> <span class=\"nt\">--no-install-recommends<\/span> git <span class=\"se\">\\\r\n<\/span> <span class=\"o\">&amp;&amp;<\/span> apt-get <span class=\"nb\">install<\/span> <span class=\"nt\">-y<\/span> <span class=\"nt\">--no-install-recommends<\/span> libgl1-mesa-dev libglib2.0-0 <span class=\"se\">\\\r\n<\/span> <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> \/var\/lib\/apt\/lists\/<span class=\"k\">*<\/span> <span class=\"se\">\\\r\n<\/span> <span class=\"o\">&amp;&amp;<\/span> pip <span class=\"nb\">install<\/span> <span class=\"nt\">--no-cache-dir<\/span> git+https:\/\/github.com\/pocokhc\/simple_distributed_rl@v0.13.3 <span class=\"se\">\\\r\n<\/span><span class=\"c\"># \u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u9069\u5b9c\u5165\u308c\u308b<\/span>\r\n &amp;&amp; pip install --no-cache-dir opencv-python pygame gymnasium redis async_timeout\r\n\r\n<span class=\"c\"># \u30a8\u30f3\u30c8\u30ea\u30fc\u30dd\u30a4\u30f3\u30c8\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30b3\u30d4\u30fc<\/span>\r\n<span class=\"k\">COPY<\/span><span class=\"s\"> server_*.py \/code\/<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u4ee5\u4e0b\u5c06\u7528\u56fe\u50cf\u6765\u8868\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> docker build <span class=\"nt\">--pull<\/span> <span class=\"nt\">--rm<\/span> <span class=\"nt\">-t<\/span> srl_qiita:latest <span class=\"nb\">.<\/span>\r\n<\/code><\/pre>\n<h2>3. \u6f14\u5458\/\u8bad\u7ec3\u5e08\u6e05\u5355\u6587\u4ef6<\/h2>\n<p>\u6700\u540e\uff0c\u5c06\u4e3a\u6f14\u5458\/\u8bad\u7ec3\u5e08\u521b\u5efa\u4e00\u4e2a\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>.\/\r\n \u251c docker_desktop\/\r\n |  \u251c redis.yaml\r\n |  \u251c actor.yaml    # new\r\n |  \u2514 trainer.yaml  # new\r\n |\r\n \u251c dockerfile\r\n \u251c server_actor.py\r\n \u2514 server_trainer.py\r\n<\/code><\/pre>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Pod<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">trainer-pod<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">trainer-node<\/span>\r\n      <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">srl_qiita:latest<\/span>\r\n      <span class=\"na\">imagePullPolicy<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Never<\/span>  <span class=\"c1\"># \u3053\u306e\u884c\u3067\u30ed\u30fc\u30ab\u30eb\u306eimage\u3092\u898b\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u308b<\/span>\r\n      <span class=\"c1\">#command: [\"sh\", \"-c\", \"while true; do sleep 3600; done\"]<\/span>\r\n      <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">python\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-u\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/code\/server_trainer.py\"<\/span><span class=\"pi\">]<\/span>\r\n      <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">limits<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">950m\"<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u203bDockerDesktop\u7684k8s\u4e0d\u652f\u6301GPU\u3002<br \/>\n\u203b\u6211\u4eec\u901a\u8fc7\u6dfb\u52a0&#8221;-u&#8221;\u9009\u9879\u6765\u4f7fpython\u7684print\u8f93\u51fa\u5230k8s\u7684\u65e5\u5fd7\u4e2d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">apps\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ReplicaSet<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">actor-pods<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">1<\/span>  <span class=\"c1\"># \u3053\u3053\u304c\u305d\u306e\u307e\u307eActor\u6570\u306b\u306a\u308b<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">actor<\/span>\r\n  <span class=\"na\">template<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">actor<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">containers<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">actor-node<\/span>\r\n          <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">srl_qiita:latest<\/span>\r\n          <span class=\"na\">imagePullPolicy<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Never<\/span>  <span class=\"c1\"># \u3053\u306e\u884c\u3067\u30ed\u30fc\u30ab\u30eb\u306eimage\u3092\u898b\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u308b<\/span>\r\n          <span class=\"c1\">#command: [\"sh\", \"-c\", \"while true; do sleep 3600; done\"]<\/span>\r\n          <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">python\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-u\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/code\/server_actor.py\"<\/span><span class=\"pi\">]<\/span>\r\n          <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">limits<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">950m\"<\/span>\r\n\r\n<\/code><\/pre>\n<p>Actor\u662f\u5728ReplicaSet\u4e2d\u521b\u5efa\u7684\u3002<br \/>\nreplicas\u7684\u6570\u91cf\u8868\u793a\u8981\u590d\u5236\u7684Pod\u6570\u91cf\uff0c\u4e5f\u5c31\u662fActor\u7684\u6570\u91cf\u3002<br \/>\n\u7136\u800c\uff0c\u8fd9\u4e2a\u6570\u91cf\u4e5f\u9700\u8981\u76f8\u5e94\u7684CPU\u8d44\u6e90&#8230;\u3002<\/p>\n<p>\u6211\u5c06\u5728\u4e0b\u9762\u542f\u52a8\u3002(W\u01d2 .)<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl apply <span class=\"nt\">-f<\/span> .\/docker_desktop\/trainer.yaml\r\n<span class=\"o\">&gt;<\/span> kubectl apply <span class=\"nt\">-f<\/span> .\/docker_desktop\/actor.yaml\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u5728\u4e0b\u9762\u8fdb\u884c\u786e\u8ba4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl get pods\r\nNAME               READY   STATUS    RESTARTS   AGE\r\nactor-pods-2h47z   1\/1     Running   0          61s\r\nredis-pod          2\/2     Running   0          19m\r\ntrainer-pod        1\/1     Running   0          13s\r\n<\/code><\/pre>\n<p>\u5982\u679c\u65e0\u6cd5\u542f\u52a8\uff0c\u8bf7\u5c06\u547d\u4ee4\u66f4\u6539\u4e3a\u8c03\u8bd5\u6a21\u5f0f\u5e76\u542f\u52a8\uff0c\u7136\u540e\u5c1d\u8bd5\u8fdb\u5165\u5185\u90e8\u8fdb\u884c\u8c03\u67e5\uff08\u5728\u4e0b\u9762\u8f93\u5165pods\u7684\u540d\u79f0\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl <span class=\"nb\">exec<\/span> <span class=\"nt\">-it<\/span> <span class=\"o\">[<\/span>NAME] <span class=\"nt\">--<\/span> bash\r\n<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u67e5\u770b\u6bcf\u4e2aPod\u7684\u65e5\u5fd7\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u65b9\u6cd5\u3002<br \/>\n\u4f7f\u7528-f\u9009\u9879\u53ef\u4ee5\u5b9e\u65f6\u67e5\u770b\u65e5\u5fd7\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> kubectl logs <span class=\"nt\">-f<\/span> <span class=\"o\">[<\/span>NAME]\r\n<\/code><\/pre>\n<h2>4. \u5b66\u4e60\u7684\u6267\u884c de<\/h2>\n<p>\u6e96\u5907\u5c31\u7eea\u540e\u5c06\u5f00\u59cb\u5b66\u4e60\u3002<br \/>\n\u5c06\u4f1a\u8fde\u63a5\u5230 Redis \u7684\u7aef\u53e3 30001\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"kn\">import<\/span> <span class=\"n\">srl<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"n\">srl.algorithms<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">dqn<\/span>\r\n<span class=\"kn\">from<\/span> <span class=\"n\">srl.runner.distribution<\/span> <span class=\"kn\">import<\/span> <span class=\"n\">RedisParameters<\/span>\r\n\r\n<span class=\"n\">rl_config<\/span> <span class=\"o\">=<\/span> <span class=\"n\">dqn<\/span><span class=\"p\">.<\/span><span class=\"nc\">Config<\/span><span class=\"p\">()<\/span>\r\n<span class=\"n\">rl_config<\/span><span class=\"p\">.<\/span><span class=\"n\">hidden_block<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_mlp<\/span><span class=\"p\">((<\/span><span class=\"mi\">64<\/span><span class=\"p\">,<\/span> <span class=\"mi\">64<\/span><span class=\"p\">))<\/span>\r\n<span class=\"n\">rl_config<\/span><span class=\"p\">.<\/span><span class=\"n\">memory<\/span><span class=\"p\">.<\/span><span class=\"nf\">set_proportional_memory<\/span><span class=\"p\">()<\/span>\r\n<span class=\"n\">rl_config<\/span><span class=\"p\">.<\/span><span class=\"n\">memory<\/span><span class=\"p\">.<\/span><span class=\"n\">capacity<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">5000<\/span>\r\n<span class=\"n\">runner<\/span> <span class=\"o\">=<\/span> <span class=\"n\">srl<\/span><span class=\"p\">.<\/span><span class=\"nc\">Runner<\/span><span class=\"p\">(<\/span><span class=\"sh\">\"<\/span><span class=\"s\">Pendulum-v1<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">rl_config<\/span><span class=\"p\">)<\/span>\r\n\r\n<span class=\"n\">runner<\/span><span class=\"p\">.<\/span><span class=\"nf\">train_distribution<\/span><span class=\"p\">(<\/span>\r\n    <span class=\"nc\">RedisParameters<\/span><span class=\"p\">(<\/span><span class=\"n\">host<\/span><span class=\"o\">=<\/span><span class=\"sh\">\"<\/span><span class=\"s\">localhost<\/span><span class=\"sh\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">port<\/span><span class=\"o\">=<\/span><span class=\"mi\">30001<\/span><span class=\"p\">),<\/span>\r\n    <span class=\"n\">actor_num<\/span><span class=\"o\">=<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"n\">max_train_count<\/span><span class=\"o\">=<\/span><span class=\"mi\">20_000<\/span><span class=\"p\">,<\/span>\r\n<span class=\"p\">)<\/span>\r\n\r\n<span class=\"nf\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">runner<\/span><span class=\"p\">.<\/span><span class=\"nf\">evaluate<\/span><span class=\"p\">())<\/span>\r\n<\/code><\/pre>\n<p>\u6267\u884c\u7ed3\u679c<\/p>\n<pre class=\"post-pre\"><code><span class=\"o\">&gt;<\/span> python main.py\r\n18:45:35 ACTIVE  1.00s<span class=\"o\">(<\/span>     - left<span class=\"o\">)<\/span>,      0tr <span class=\"o\">(<\/span><span class=\"nt\">-1451<\/span>.4eval<span class=\"o\">)<\/span>\r\n trainer  573db05d-d1e4-4178-a2c0-b36f03fbf303  0.9s:     0tr\/s,    0recv\/s,        <span class=\"nb\">tr<\/span>,       0recv\r\n actor0   not assigned\r\n18:46:36 ACTIVE   1.0m<span class=\"o\">(<\/span>  3.5m left<span class=\"o\">)<\/span>,   4487tr <span class=\"o\">(<\/span><span class=\"nt\">-1244<\/span>.9eval<span class=\"o\">)<\/span>\r\n trainer  573db05d-d1e4-4178-a2c0-b36f03fbf303 10.2s:    74tr\/s,  440recv\/s,    4487tr,   26578recv\r\n actor0   b456bf97-deda-4839-8a83-fb26977abe18 10.2s:   372st\/s,  371send\/s,   22461st,   22424send\r\n18:47:36 ACTIVE   2.0m<span class=\"o\">(<\/span>  1.7m left<span class=\"o\">)<\/span>,  10291tr <span class=\"o\">(<\/span><span class=\"nt\">-0<\/span>.968eval<span class=\"o\">)<\/span>\r\n trainer  573db05d-d1e4-4178-a2c0-b36f03fbf303  9.5s:    96tr\/s,  455recv\/s,   10291tr,   54000recv\r\n actor0   b456bf97-deda-4839-8a83-fb26977abe18  9.5s:   457st\/s,  457send\/s,   50006st,   49987send\r\n18:48:36 ACTIVE   3.0m<span class=\"o\">(<\/span>43.33s left<span class=\"o\">)<\/span>,  15941tr <span class=\"o\">(<\/span><span class=\"nt\">-127<\/span>.4eval<span class=\"o\">)<\/span>\r\n trainer  573db05d-d1e4-4178-a2c0-b36f03fbf303  9.8s:    93tr\/s,  444recv\/s,   15941tr,   80832recv\r\n actor0   b456bf97-deda-4839-8a83-fb26977abe18  9.8s:   446st\/s,  447send\/s,   76966st,   76950send\r\n18:49:11 END   3.6m<span class=\"o\">(<\/span> 0.00s left<span class=\"o\">)<\/span>,  20000tr <span class=\"o\">(<\/span> <span class=\"nt\">-13<\/span>.4eval<span class=\"o\">)<\/span>\r\n trainer  573db05d-d1e4-4178-a2c0-b36f03fbf303  1.0s:   115tr\/s,  436recv\/s,   20000tr,   96217recv\r\n actor0   b456bf97-deda-4839-8a83-fb26977abe18  5.0s:   509st\/s,  509send\/s,   94930st,   94915send\r\n\r\n<span class=\"o\">[<\/span><span class=\"nt\">-13<\/span>.179330630227923, <span class=\"nt\">-302<\/span>.80894811078906, <span class=\"nt\">-12<\/span>.675792848691344, <span class=\"nt\">-128<\/span>.10729961842299, <span class=\"nt\">-247<\/span>.43346573412418, <span class=\"nt\">-12<\/span>.799946028739214, <span class=\"nt\">-365<\/span>.9429765045643, <span class=\"nt\">-132<\/span>.10430204682052, <span class=\"nt\">-14<\/span>.009112168103456, <span class=\"nt\">-134<\/span>.4337202552706]\r\n<\/code><\/pre>\n<p>\u5f53\u5b8c\u6210\u540e\u6211\u4f1a\u5220\u9664\u3002<br \/>\n\u8fd9\u4e2a\u7ed3\u6784\u5b8c\u5168\u6ca1\u6709\u4fdd\u5b58\u5230\u6570\u636e\u5e93\uff0c\u6240\u4ee5\u5220\u9664\u540e\u5c06\u4f1a\u91cd\u65b0\u521d\u59cb\u5316\u3002<\/p>\n<pre class=\"post-pre\"><code># \u4e00\u62ec\u524a\u9664\r\n&gt; kubectl delete -f .\/docker_desktop\r\n\r\n# \u4e00\u62ec\u8d77\u52d5\r\n&gt; kubectl apply -f .\/docker_desktop\r\n<\/code><\/pre>\n<p>\u6211\u63a5\u4e0b\u6765\u60f3\u8981\u5728 Google Kubernetes Engine\uff08GKE\uff09\u4e0a\u521b\u5efa\u8fd9\u4e2ak8s\u73af\u5883\u3002<br \/>\n\u3010\u5f3a\u5316\u5b66\u4e60\u3011\u4f7f\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u5f3a\u5316\u5b66\u4e60\uff08GKE\/\u4ed8\u8d39\u7248\u672c\uff09<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u672c\u6587\u662f\u4e00\u7bc7\u5173\u4e8e\u81ea\u5236\u5f3a\u5316\u5b66\u4e60\u6846\u67b6\u7684\u89e3\u8bf4\u6587\u7ae0\u3002 &nbsp; \u8fd9\u7bc7\u6587\u7ae0\u7684\u4ee3\u7801\u4f4d\u7f6e\uff1aexamples\/kuberne [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-33591","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08kubernetes\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09\" \/>\n<meta property=\"og:description\" content=\"\u672c\u6587\u662f\u4e00\u7bc7\u5173\u4e8e\u81ea\u5236\u5f3a\u5316\u5b66\u4e60\u6846\u67b6\u7684\u89e3\u8bf4\u6587\u7ae0\u3002 &nbsp; \u8fd9\u7bc7\u6587\u7ae0\u7684\u4ee3\u7801\u4f4d\u7f6e\uff1aexamples\/kuberne [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08kubernetes\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2022-11-07T23:36:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T12:24:20+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d187e37434c4406c06a7c\/9-0.png\" \/>\n<meta name=\"author\" content=\"\u6587, \u7fd4\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6587, \u7fd4\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/\",\"name\":\"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2022-11-07T23:36:50+00:00\",\"dateModified\":\"2024-04-30T12:24:20+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c\",\"name\":\"\u6587, \u7fd4\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g\",\"caption\":\"\u6587, \u7fd4\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08kubernetes\/","og_locale":"zh_CN","og_type":"article","og_title":"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09","og_description":"\u672c\u6587\u662f\u4e00\u7bc7\u5173\u4e8e\u81ea\u5236\u5f3a\u5316\u5b66\u4e60\u6846\u67b6\u7684\u89e3\u8bf4\u6587\u7ae0\u3002 &nbsp; \u8fd9\u7bc7\u6587\u7ae0\u7684\u4ee3\u7801\u4f4d\u7f6e\uff1aexamples\/kuberne [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08kubernetes\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2022-11-07T23:36:50+00:00","article_modified_time":"2024-04-30T12:24:20+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d187e37434c4406c06a7c\/9-0.png"}],"author":"\u6587, \u7fd4","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6587, \u7fd4","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/","name":"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2022-11-07T23:36:50+00:00","dateModified":"2024-04-30T12:24:20+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u3010\u589e\u5f3a\u5b66\u4e60\u3011\u5229\u7528\u4e91\u670d\u52a1\u8fdb\u884c\u5206\u5e03\u5f0f\u589e\u5f3a\u5b66\u4e60\uff08Kubernetes \u7f16\u8f91\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/64d5cc7727fffbff2f9a2a8da1de3e5c","name":"\u6587, \u7fd4","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/920c3d673e0bccacc98e5e6b7149bb3c22edd8d39cb753e5d7d7e471498118a1?s=96&d=mm&r=g","caption":"\u6587, \u7fd4"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/wenxiang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e3%80%90%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%e3%80%91%e5%88%a9%e7%94%a8%e4%ba%91%e6%9c%8d%e5%8a%a1%e8%bf%9b%e8%a1%8c%e5%88%86%e5%b8%83%e5%bc%8f%e5%a2%9e%e5%bc%ba%e5%ad%a6%e4%b9%a0%ef%bc%88kubernetes\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33591","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=33591"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33591\/revisions"}],"predecessor-version":[{"id":94104,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/33591\/revisions\/94104"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=33591"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=33591"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=33591"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}