{"id":50624,"date":"2023-10-13T01:18:32","date_gmt":"2024-01-03T04:07:51","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/"},"modified":"2024-05-04T03:58:27","modified_gmt":"2024-05-03T19:58:27","slug":"%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/","title":{"rendered":"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406"},"content":{"rendered":"<h1>\u9996\u5148<\/h1>\n<p>\u6211\u6253\u7b97\u5728\u4eca\u5e7412\u6708\u4efd\u7684Microsoft Azure Tech Advent Calendar 2019\u4e0a\u53d1\u5e03\u4e00\u7bc7\u5173\u4e8eDapr\u6846\u67b6\u5728AKS\uff08Azure Kubernetes Service\uff09\u4e0a\u7684\u4f7f\u7528\u7684\u6295\u7a3f\u3002\u8fd9\u4e2a\u6846\u67b6\u57282019\u5e7410\u6708\u4efd\u53d1\u5e03\u3002<\/p>\n<h1>\u6982\u62ec\u56de\u7b54<\/h1>\n<p>2019\u5e7410\u6708\uff0cDapr\uff08\u5206\u6563\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u30e9\u30f3\u30bf\u30a4\u30e0\uff09\u4f5c\u4e3a\u4e00\u4e2a\u6846\u67b6\u88ab\u53d1\u5e03\uff0c\u65e8\u5728\u7b80\u5316\u5fae\u670d\u52a1\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u5c3d\u7ba1\u76ee\u524d\u53ea\u662f\u03b1\u7248\uff0c\u4f46Dapr\u6b63\u5728\u5f00\u53d1\u4e2d\uff0c\u65e8\u5728\u63d0\u4f9b\u8de8\u7f16\u7a0b\u8bed\u8a00\u7684\u5fae\u670d\u52a1\u8c03\u7528\u529f\u80fd\u3001\u72b6\u6001\u7ba1\u7406\u3001\u670d\u52a1\u4e4b\u95f4\u6d88\u606f\u4f20\u9012\u3001\u8d44\u6e90\u7ed1\u5b9a\u548c\u5206\u5e03\u5f0f\u670d\u52a1\u4e4b\u95f4\u7684\u8ddf\u8e2a\u7b49\u529f\u80fd\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d928c913a08637a6e2f8a\/4-0.jpeg\" alt=\"dapr_conceptual_model.jpg\" \/><\/div>\n<p>Dapr\u4ee5\u6240\u8c13\u7684Sidecar\u67b6\u6784\u8fd0\u884c\uff0c\u5e76\u901a\u8fc7\u5e94\u7528\u7a0b\u5e8f\u7684HTTP\/gRPC API\u8c03\u7528\u6765\u4f7f\u7528\uff08\u5728Kubernetes\u4e0a\uff0c\u5728\u5e94\u7528\u7a0b\u5e8f\u548c\u540c\u4e00\u4e2aPOD\u5185\u4f5c\u4e3aSidecar\u5bb9\u5668\u8fd0\u884c\uff09\u3002\u56e0\u6b64\uff0c\u5e94\u7528\u7a0b\u5e8f\u4e0d\u9700\u8981\u5d4c\u5165\u7279\u6b8a\u7684\u8fd0\u884c\u65f6\u6765\u4f7f\u7528Dapr\uff0c\u53ef\u4ee5\u5728\u5e94\u7528\u903b\u8f91\u88ab\u9694\u79bb\u7684\u72b6\u6001\u4e0b\u4f7f\u7528\u529f\u80fd\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d928c913a08637a6e2f8a\/6-0.png\" alt=\"overview-sidecar.png\" \/><\/div>\n<p>\u8fd9\u6b21\u6211\u4eec\u5c06\u5728 Kubernetes \u4e0a\u9a8c\u8bc1 Dapr \u7684\u64cd\u4f5c\uff0c\u4f5c\u4e3a Azure Tech Advent Calendar \u7684\u4e00\u90e8\u5206\uff0c\u6211\u5c06\u5728 Microsoft Azure \u7684\u6258\u7ba1 k8 \u670d\u52a1 AKS \u4e0a\u6267\u884c\u3002<br \/>\n\u5728 AKS \u4e0a\u8fd0\u884c\u7684\u5bb9\u5668\u5e94\u7528\u7a0b\u5e8f\u4e2d\uff0c\u4f7f\u7528 Dapr \u6846\u67b6\u6765\u7ba1\u7406\u5e94\u7528\u7a0b\u5e8f\u72b6\u6001\u7684\u65b9\u6cd5\uff0c\u6211\u4eec\u5c06\u6309\u7167\u4ee5\u4e0b\u6b65\u9aa4\u6574\u7406\u793a\u4f8b\u547d\u4ee4\u548c\u4ee3\u7801\u89e3\u91ca\u3002<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u521b\u5efa Azure Kubernetes Service (AKS) \u96c6\u7fa4<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5b89\u88c5 Dapr CLI<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u5728 AKS \u96c6\u7fa4\u4e0a\u5b89\u88c5 dapr<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u6784\u5efa Dapr \u7684 State Store (Redis)<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u90e8\u7f72\u5e26\u6709 dapr \u7684 Node.js \u5e94\u7528\u7a0b\u5e8f<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\n<li style=\"list-style-type: none;\">\n<ol>\u90e8\u7f72\u5e26\u6709 dapr \u7684 Python \u5e94\u7528\u7a0b\u5e8f<\/ol>\n<\/li>\n<\/ol>\n<p>&nbsp;<\/p>\n<ol>\u5728 Node.js \u548c Python \u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c dapr \u7684\u4ea4\u4e92\u5e76\u8fdb\u884c\u64cd\u4f5c\u786e\u8ba4<\/ol>\n<p>\u6700\u7ec8\uff0cAKS \u4e0a\u5c06\u5b9e\u73b0\u4ee5\u4e0b\u914d\u7f6e\u3002State Store \u5c06\u4f7f\u7528 Redis\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d928c913a08637a6e2f8a\/10-0.png\" alt=\"Architecture_Diagram.png\" \/><\/div>\n<h1>\u6b65\u9aa41. \u521b\u5efaAzure Kubernetes\u670d\u52a1\uff08AKS\uff09\u96c6\u7fa4<\/h1>\n<p>\u9996\u5148\u6211\u4eec\u9700\u8981\u521b\u5efa\u4e00\u4e2akubernetes\u96c6\u7fa4\u6765\u8fd0\u884cdapr\u548c\u793a\u4f8b\u5e94\u7528\u7a0b\u5e8f\u3002\u5728\u8fdb\u884c\u540e\u7eed\u64cd\u4f5c\u4e4b\u524d\uff0c\u8bf7\u786e\u4fdd\u4ee5\u4e0b\u5de5\u5177\u5df2\u7ecf\u8bbe\u7f6e\u5728\u60a8\u7684\u5de5\u4f5c\u7ec8\u7aef\u4e0a\u3002<\/p>\n<p>\u30fbAzure CLI: \u5fae\u8f6f Azure \u547d\u4ee4\u884c\u754c\u9762<br \/>\n\u30fbkubectl: Kubernetes \u63a7\u5236\u5de5\u5177<\/p>\n<p>\u4f7f\u7528Azure CLI\u521b\u5efa\u7528\u4e8edapr\u9a8c\u8bc1\u73af\u5883\u7684AKS\u96c6\u7fa4\u3002\u7531\u4e8ekubectl\u4e5f\u662f\u524d\u63d0\u6761\u4ef6\uff0c\u5efa\u8bae\u60a8\u67e5\u770b&#8221;\u5feb\u901f\u5165\u95e8\uff1a\u4f7f\u7528Azure CLI\u90e8\u7f72Azure Kubernetes Service\u96c6\u7fa4&#8221;\u3002\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\"># Azure \u3078\u306e\u63a5\u7d9a<\/span>\r\naz login\r\n\r\n<span class=\"c\"># \u30b5\u30d6\u30b9\u30af\u30ea\u30d7\u30b7\u30e7\u30f3\u306e\u9078\u629e<\/span>\r\naz account <span class=\"nb\">set<\/span> <span class=\"nt\">-s<\/span> &lt;YourSubscriptionId&gt;\r\n\r\n<span class=\"c\"># \u30ea\u30bd\u30fc\u30b9\u30b0\u30eb\u30fc\u30d7\u306e\u4f5c\u6210<\/span>\r\naz group create <span class=\"nt\">--name<\/span> myAKSdapr <span class=\"nt\">--location<\/span> japaneast\r\n\r\n<span class=\"c\"># AKS \u30af\u30e9\u30b9\u30bf\u306e\u4f5c\u6210<\/span>\r\naz aks create <span class=\"nt\">--resource-group<\/span> myAKSdapr <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--name<\/span> myAKSDaprCluster <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--node-count<\/span> 2 <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--enable-addons<\/span> http_application_routing\r\n    <span class=\"nt\">--enable-rbac<\/span> <span class=\"se\">\\<\/span>\r\n    <span class=\"nt\">--generate-ssh-keys<\/span>\r\n\r\n<span class=\"c\"># \u30af\u30e9\u30b9\u30bf\u306e\u8cc7\u683c\u60c5\u5831\u3092\u53d6\u5f97\u3059\u308b<\/span>\r\naz aks get-credentials <span class=\"nt\">--resource-group<\/span> myAKSdapr <span class=\"nt\">--name<\/span> myAKSDaprCluster\r\n<\/code><\/pre>\n<p>\u4e3a\u4e86\u4fdd\u9669\u8d77\u89c1\uff0c\u5728\u521b\u5efa\u5b8c\u96c6\u7fa4\u540e\uff0c\u6211\u4f1a\u4f7f\u7528 kubectl get node \u547d\u4ee4\u786e\u8ba4\u521b\u5efa\u5df2\u7ecf\u6210\u529f\u5b8c\u6210\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get node\r\nNAME                                STATUS   ROLES   AGE     VERSION\r\naks-nodepool1-37284717-vmss000000   Ready    agent   5m39s   v1.13.12\r\naks-nodepool1-37284717-vmss000001   Ready    agent   5m51s   v1.13.12\r\n<\/code><\/pre>\n<h1>\u7b2c\u4e8c\u6b65\uff1a\u5b89\u88c5Dapr CLI<\/h1>\n<p>\u8fd9\u6b21\u6211\u662f\u901a\u8fc7 Visual Studio Code \u7684\u8fdc\u7a0b\u90e8\u7f72\u8fde\u63a5\u5230 Azure VM(Ubuntu)\u4e0a\u8fdb\u884c\u64cd\u4f5c\u7684\uff0c\u56e0\u6b64\u6211\u8981\u5728\u8fd9\u4e2a Ubuntu \u73af\u5883\u4e2d\u5b89\u88c5 Dapr CLI\u3002\u4f60\u53ef\u4ee5\u5728\u201c\u5b89\u88c5 Dapr CLI\u201d\u4e2d\u67e5\u770b\u5728 Mac\/Windows \u4e0a\u7684\u6b65\u9aa4\u3002<\/p>\n<pre class=\"post-pre\"><code>wget -q https:\/\/raw.githubusercontent.com\/dapr\/cli\/master\/install\/install.sh -O - | \/bin\/bash\r\nYour system is linux_amd64\r\nInstalling Dapr CLI...\r\n\r\nDownloading https:\/\/github.com\/dapr\/cli\/releases\/download\/v0.2.0\/dapr_linux_amd64.tar.gz ...\r\ndapr installed into \/usr\/local\/bin successfully.\r\ncli version: 0.2.0 \r\nruntime version: n\/a\r\nTo get started with Dapr, please visit https:\/\/github.com\/dapr\/docs\/tree\/master\/getting-started\r\n<\/code><\/pre>\n<h1>\u7b2c\u4e09\u6b65\u3002\u5728 AKS \u96c6\u7fa4\u4e2d\u5b89\u88c5 dapr\u3002<\/h1>\n<p>\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5728 AKS \u96c6\u7fa4\u4e2d\u5b89\u88c5 dapr\u3002<\/p>\n<pre class=\"post-pre\"><code>$ dapr init --kubernetes\r\n\u231b  Making the jump to hyperspace...\r\n\u2139\ufe0f  Note: this installation is recommended for testing purposes. For production environments, please use Helm \r\n\r\n\u2705  Deploying the Dapr Operator to your cluster...\r\n\u2705  Success! Dapr has been installed. To verify, run 'kubectl get pods -w' in your terminal\r\n<\/code><\/pre>\n<p>\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u4f7f\u7528kubectl get pods\u547d\u4ee4\u53ef\u4ee5\u786e\u8ba4pod\u662f\u5426\u6b63\u786e\u542f\u52a8\uff0c\u4f1a\u663e\u793a\u4e0edapr\u76f8\u5173\u7684pod (dapr-operator, dapr-placement, dapr-sidecar-injector)\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get pods -w\r\nNAME                                     READY   STATUS    RESTARTS   AGE\r\ndapr-operator-68f7dcb454-nv25m           1\/1     Running   0          70s\r\ndapr-placement-6d77d54dc6-5bsp4          1\/1     Running   0          70s\r\ndapr-sidecar-injector-86d6ccf956-5j56p   1\/1     Running   0          70s\r\n<\/code><\/pre>\n<h1>\u7b2c\u56db\u6b65\uff1a\u5efa\u7acb State Store\uff08Redis\uff09<\/h1>\n<p>Dapr \u53ef\u4ee5\u5c06 Redis\u3001CosmosDB\u3001DynamoDB\u3001Cassandra \u7b49\u591a\u79cd\u6570\u636e\u670d\u52a1\u7528\u4f5c state \u4fe1\u606f\u7684\u5b58\u50a8\uff0c\u4f46\u662f\u8fd9\u6b21\u6211\u4eec\u60f3\u8981\u4f7f\u7528 Redis\u3002<br \/>\n\u6211\u4eec\u6253\u7b97\u4f7f\u7528 helm \u6765\u521b\u5efa Redis\u3002\u7531\u4e8e\u572811\u6708\u53d1\u5e03\u4e86 Helm 3.0.0\uff0c\u6240\u4ee5\u6211\u4eec\u5148\u4ece\u8bbe\u7f6e Helm3 \u5f00\u59cb\u3002\u4ee5\u4e0b\u5047\u8bbe\u4f7f\u7528\u7684\u662f Linux \u4f5c\u4e3a\u5de5\u4f5c\u7ec8\u7aef\uff0c\u5982\u679c\u4f7f\u7528\u5176\u4ed6\u73af\u5883\uff0c\u8bf7\u53c2\u8003 Helm \u7684\u5b98\u65b9\u6587\u6863\u3002Helm 3\u5df2\u7ecf\u53d8\u6210\u4e86 Tillerless\uff0c\u5e76\u4e14\u547d\u4ee4\u7ed3\u6784\u7a0d\u6709\u4e0d\u540c\u3002\u5b9e\u9645\u6267\u884c\u7684\u547d\u4ee4\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$curl<\/span> https:\/\/raw.githubusercontent.com\/helm\/helm\/master\/scripts\/get-helm-3 | bash\r\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\r\n                                 Dload  Upload   Total   Spent    Left  Speed\r\n100  6617  100  6617    0     0  21483      0 <span class=\"nt\">--<\/span>:--:-- <span class=\"nt\">--<\/span>:--:-- <span class=\"nt\">--<\/span>:--:-- 21414\r\nDownloading https:\/\/get.helm.sh\/helm-v3.0.0-linux-amd64.tar.gz\r\nPreparing to <span class=\"nb\">install <\/span>helm into \/usr\/local\/bin\r\nhelm installed into \/usr\/local\/bin\/helm\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5df2\u5b89\u88c5\u4e86Helm\u547d\u4ee4\uff0c\u5c31\u53ef\u4ee5\u6ce8\u518c\u56fe\u8868\u4ed3\u5e93\u3002<\/p>\n<pre class=\"post-pre\"><code>$helm repo add stable https:\/\/kubernetes-charts.storage.googleapis.com\/\r\n\"stable\" has been added to your repositories\r\n<\/code><\/pre>\n<p>\u786e\u8ba4\u5b58\u50a8\u5e93\u53ef\u4ee5\u88ab\u5f15\u7528\u3002<\/p>\n<pre class=\"post-pre\"><code>$helm search repo stable\r\nNAME                                    CHART VERSION   APP VERSION                     DESCRIPTION                                       \r\nstable\/acs-engine-autoscaler            2.2.2           2.1.1                           DEPRECATED Scales worker nodes within agent pools \r\nstable\/aerospike                        0.3.1           v4.5.0.5                        A Helm chart for Aerospike in Kubernetes          \r\nstable\/airflow                          5.1.0           1.10.4                          Airflow is a platform to programmatically autho...\r\n# more\r\n<\/code><\/pre>\n<p>\u6211\u6253\u7b97\u5c06redis\u5b89\u88c5\u5230\u9ed8\u8ba4\u7684\u547d\u540d\u7a7a\u95f4\u4e2d\u3002\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5b89\u88c5redis\u3002<\/p>\n<pre class=\"post-pre\"><code>$ helm install redis stable\/redis \r\n<\/code><\/pre>\n<p>\u53ef\u4ee5\u786e\u8ba4 Redis \u5df2\u7ecf\u90e8\u7f72\u597d\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ helm list\r\nNAME    NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION\r\nredis   default         1               2019-11-28 17:49:09.405349951 +0000 UTC deployed        redis-10.0.2    5.0.7    \r\n\r\n$ kubectl get pods -n redis\r\nNAME             READY   STATUS              RESTARTS   AGE\r\nredis-master-0   1\/1     Running             0          6m2s\r\nredis-slave-0    1\/1     Running             0          6m2s\r\nredis-slave-1    1\/1     Running             0          5m21s\r\n<\/code><\/pre>\n<p>\u5982\u679cRedis\u88ab\u6210\u529f\u521b\u5efa\uff0c\u4f7f\u7528deploy\/redis.yaml\u6587\u4ef6\u6765\u914d\u7f6eRedis\u3002<\/p>\n<p>\u8bf7\u53c2\u8003\u4ee5\u4e0b\u94fe\u63a5\u81f3 GitHub \u4e0a\u7684\u9879\u76ee\uff0c\u8def\u5f84\u4e3a 210_aks_dapr_redis\/deploy\/\uff1a<br \/>\nhttps:\/\/github.com\/y10e\/azure-sample-cli\/tree\/master\/210_aks_dapr_redis\/deploy<\/p>\n<p>\u8bf7\u7f16\u8f91 YOUR_REDIS_HOST_HERE \u548c YOUR_REDIS_KEY_HERE \u7684\u90e8\u5206\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">dapr.io\/v1alpha1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Component<\/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\">statestore<\/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\">state.redis<\/span>\r\n  <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redisHost<\/span>\r\n    <span class=\"na\">value<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redis-master:6379<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">redisPassword<\/span>\r\n    <span class=\"na\">value<\/span><span class=\"pi\">:<\/span> <span class=\"s\">&lt;YOUR_REDIS_KEY_HERE&gt;<\/span>\r\n<\/code><\/pre>\n<p>&#8220;YOUR_REDIS_KEY_HERE&#8221; \u6307\u5b9a\u4e86\u901a\u8fc7\u4e0b\u5217\u547d\u4ee4\u786e\u8ba4\u7684\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get secret redis -o jsonpath=\"{.data.redis-password}\" | base64 --decode\r\n<\/code><\/pre>\n<p>\u5f53\u60a8\u4fee\u6539\u6587\u4ef6\u540e\uff0c\u5c06\u5e94\u7528\u914d\u7f6e\u3002\u8fd9\u6837\u4e00\u6765\uff0cRedis\u7684\u64cd\u4f5c\u5c31\u6682\u65f6\u5b8c\u6210\u4e86\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl apply -f .\/deploy\/redis.yaml\r\ncomponent.dapr.io\/statestore created\r\n<\/code><\/pre>\n<p>\u987a\u4fbf\u63d0\u4e00\u4e0b\uff0cRedis\u7684\u952e\u4e5f\u53ef\u4ee5\u4fdd\u5b58\u5728Kubernetes\u7684Secrets\u4e2d\u3002\u793a\u4f8b\u5728\u8fd9\u91cc\u4ecb\u7ecd\u8fc7\u3002<\/p>\n<h1>\u5728\u4e2d\u56fd\uff0c\u53ea\u9700\u8981\u4e00\u79cd\u9009\u62e9\uff0c\u5c06\u4ee5\u4e0b\u5185\u5bb9\u7ffb\u8bd1\u6210\u4e2d\u56fd\u4f20\u7edf\u6587\u5316:<br \/>\n\u7b2c\u4e94\u6b65\uff1a\u90e8\u7f72\u5177\u6709Dapr\u7684Node.js\u5e94\u7528\u7a0b\u5e8f<\/h1>\n<p>\u4ece\u8fd9\u91cc\u5f00\u59cb\uff0c\u6211\u4eec\u5c06\u63a8\u8fdb\u4f7f\u7528 Dapr \u8fdb\u884c\u5e94\u7528\u7a0b\u5e8f\u7684\u90e8\u7f72\u3002<br \/>\n\u540c\u6837\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 sample \u7684 deploy\/node.yaml \u6587\u4ef6\u3002\u901a\u8fc7\u67e5\u770b node.yaml \u6587\u4ef6\uff0c\u53ef\u4ee5\u770b\u5230\u5728 Deployment \u7684 annotations \u4e2d\u542f\u7528\u4e86 Dapr Sidecar \u7684\u914d\u7f6e\u3002\u540c\u65f6\uff0c\u8fd8\u6307\u5b9a\u4e86\u5e94\u7528\u7a0b\u5e8f\u7684 ID\u3001\u7aef\u53e3\u7b49\u4fe1\u606f\u7ed9 Dapr Sidecar\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">annotations<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"s\">dapr.io\/enabled<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">true\"<\/span>\r\n        <span class=\"s\">dapr.io\/id<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">nodeapp\"<\/span>\r\n        <span class=\"s\">dapr.io\/port<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">3000\"<\/span>\r\n<\/code><\/pre>\n<p>\u90e8\u7f72\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl apply -f .\/deploy\/node.yaml\r\nservice\/nodeapp created\r\ndeployment.apps\/nodeapp created\r\n<\/code><\/pre>\n<p>\u90e8\u7f72\u5b8c\u6210\u540e\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 &#8220;kubectl get pod&#8221; \u547d\u4ee4\u67e5\u770b\u4ee5 &#8220;nodeapp&#8221; \u5f00\u5934\u7684 pod\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get pods --selector=app=node\r\nNAME                       READY   STATUS    RESTARTS   AGE\r\nnodeapp-5956c68964-wfnsh   2\/2     Running   0          41h\r\n$ kubectl exec -it nodeapp-5956c68964-wfnsh \/bin\/ash\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u793a\u4f8b\u662f\u57fa\u4e8ealpine\u7684\u5bb9\u5668\uff0c\u56e0\u6b64\u53ef\u4ee5\u4f7f\u7528ash\u8fde\u63a5\u5e76\u9a8c\u8bc1node.js\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl exec -it nodeapp-5956c68964-wfnsh \/bin\/ash\r\nDefaulting container name to node.\r\nUse 'kubectl describe pod\/nodeapp-5956c68964-wfnsh -n default' to see all of the containers in this pod.\r\n\/app # ls\r\napp.js             node_modules       package-lock.json  package.json\r\n\/app # cat app.js \r\n\/\/ ------------------------------------------------------------\r\n\/\/ Copyright (c) Microsoft Corporation.\r\n\/\/ Licensed under the MIT License.\r\n\/\/ ------------------------------------------------------------\r\n\r\nconst express = require('express');\r\nconst bodyParser = require('body-parser');\r\nrequire('isomorphic-fetch');\r\n\r\nconst app = express();\r\napp.use(bodyParser.json());\r\n\r\nconst daprPort = process.env.DAPR_HTTP_PORT || 3500;\r\nconst stateUrl = `http:\/\/localhost:${daprPort}\/v1.0\/state`;\r\nconst port = 3000;\r\n\r\napp.get('\/order', (_req, res) =&gt; {\r\n    fetch(`${stateUrl}\/order`)\r\n        .then((response) =&gt; {\r\n            if (!response.ok) {\r\n                throw \"Could not get state.\";\r\n            }\r\n\r\n            return response.text();\r\n        }).then((orders) =&gt; {\r\n            res.send(orders);\r\n        }).catch((error) =&gt; {\r\n            console.log(error);\r\n            res.status(500).send({message: error});\r\n        });\r\n});\r\n\r\napp.post('\/neworder', (req, res) =&gt; {\r\n    const data = req.body.data;\r\n    const orderId = data.orderId;\r\n    console.log(\"Got a new order! Order ID: \" + orderId);\r\n\r\n    const state = [{\r\n        key: \"order\",\r\n        value: data\r\n    }];\r\n\r\n    fetch(stateUrl, {\r\n        method: \"POST\",\r\n        body: JSON.stringify(state),\r\n        headers: {\r\n            \"Content-Type\": \"application\/json\"\r\n        }\r\n    }).then((response) =&gt; {\r\n        if (!response.ok) {\r\n            throw \"Failed to persist state.\";\r\n        }\r\n\r\n        console.log(\"Successfully persisted state.\");\r\n        res.status(200).send();\r\n    }).catch((error) =&gt; {\r\n        console.log(error);\r\n        res.status(500).send({message: error});\r\n    });\r\n});\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u5e94\u7528\u5c06\u4e0e\u8fd9\u91cc\u7684\u76f8\u540c\u3002\u6709\u4e24\u79cd\u65b9\u6cd5\uff0cGET \/order \u548c POST \/neworder\uff0c\u65b0\u8ba2\u5355\u5c06\u4f7f\u7528dapr\u7684\u72b6\u6001\u7ba1\u7406API\u6765\u8bb0\u5f55\u63a5\u6536\u5230\u7684\u8ba2\u5355\u4fe1\u606f\uff08\u952e\u4e3aorder\uff09\u3002\u8ba2\u5355\u901a\u8fc7order\u65b9\u6cd5\u6765\u83b7\u53d6\u8ba2\u5355\u7684\u72b6\u6001\u3002<\/p>\n<p>\u4e3a\u4e86\u540e\u7eed\u64cd\u4f5c\uff0c\u60a8\u53ef\u4ee5\u5728 node.yaml \u6587\u4ef6\u4e2d\u786e\u8ba4\u5df2\u90e8\u7f72\u7684\u670d\u52a1\u7684 IP\uff0c\u7136\u540e\u5c06\u5176\u8bbe\u7f6e\u4e3a\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get svc nodeapp\r\nNAME      TYPE           CLUSTER-IP    EXTERNAL-IP      PORT(S)        AGE\r\nnodeapp   LoadBalancer   10.0.42.100   xx.xxx.xxx.xxx   80:32133\/TCP   9m55s\r\n$ export NODE_APP=$(kubectl get svc nodeapp --output 'jsonpath={.status.loadBalancer.ingress[0].ip}')\r\n<\/code><\/pre>\n<h1>\u7b2c6\u6b65\u3002\u5c06\u5e26\u6709Dapr\u7684Python\u5e94\u7528\u90e8\u7f72\u4e0a\u53bb\u3002<\/h1>\n<p>\u8fd9\u6b21\u6211\u4eec\u5c06\u4f7f\u7528 sample \u7684 deploy\/python.yaml\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl apply -f .\/deploy\/python.yaml\r\ndeployment.apps\/pythonapp created\r\n<\/code><\/pre>\n<p>\u5728\u90e8\u7f72\u540e\uff0c\u60a8\u53ef\u4ee5\u4f7f\u7528 &#8220;kubectl get pod&#8221; \u547d\u4ee4\u6765\u786e\u8ba4\u4ee5 &#8220;pythonapp&#8221; \u5f00\u5934\u7684 pod\u3002<\/p>\n<pre class=\"post-pre\"><code>$ kubectl get pods --selector=app=python\r\nNAME                         READY   STATUS    RESTARTS   AGE\r\npythonapp-5d9649fccd-pv8x6   2\/2     Running   0          42h\r\n<\/code><\/pre>\n<p>\u7531\u4e8ePython\u793a\u4f8b\u4e5f\u662f\u57fa\u4e8eAlpine\u5bb9\u5668\uff0c\u56e0\u6b64\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528ash\u8fde\u63a5\u5e76\u67e5\u770b\u5e94\u7528\u7a0b\u5e8f\u7684\u4ee3\u7801\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl exec -it pythonapp-5d9649fccd-pv8x6 \/bin\/ash\r\n\/app # cat app.py \r\n# ------------------------------------------------------------\r\n# Copyright (c) Microsoft Corporation.\r\n# Licensed under the MIT License.\r\n# ------------------------------------------------------------\r\n\r\nimport time\r\nimport requests\r\nimport os\r\n\r\ndapr_port = os.getenv(\"DAPR_HTTP_PORT\", 3500)\r\ndapr_url = \"http:\/\/localhost:{}\/v1.0\/invoke\/nodeapp\/method\/neworder\".format(dapr_port)\r\n\r\nn = 0\r\nwhile True:\r\n    n += 1\r\n    message = {\"data\": {\"orderId\": n}}\r\n\r\n    try:\r\n        response = requests.post(dapr_url, json=message)\r\n    except Exception as e:\r\n        print(e)\r\n\r\n    time.sleep(1)\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u5e94\u7528\u7a0b\u5e8f\u975e\u5e38\u7b80\u5355\u3002\u6bcf\u79d2\u949f\uff0c\u5b83\u90fd\u4f1a\u5411dapr\u7684\u8fb9\u754c\u670d\u52a1\u7684\u7aef\u70b9\u53d1\u9001\u4e0b\u4e00\u4e2aHTTP\u8bf7\u6c42\u8fdb\u884cPOST\u64cd\u4f5c\u3002<br \/>\n\u540c\u65f6\uff0c\u901a\u8fc7\u6307\u5b9aNode.js\u5e94\u7528\u7a0b\u5e8f\u7684ID\u548cneworder\u65b9\u6cd5\uff0c\u5b83\u4f1a\u901a\u8fc7dapr\u8c03\u7528Node.js\u670d\u52a1\u3002<\/p>\n<pre class=\"post-pre\"><code>POST http:\/\/localhost:&lt;daprPort&gt;\/v1.0\/invoke\/&lt;appId&gt;\/method\/&lt;method-name&gt;\r\n<\/code><\/pre>\n<h1>\u6b65\u9aa47. \u5728 Node \u548c Python \u5e94\u7528\u7a0b\u5e8f\u4e4b\u95f4\u8fdb\u884c\u4e0e dapr \u7684\u4ea4\u4e92\u8fdb\u884c\u786e\u8ba4\u3002<\/h1>\n<p>\u6211\u5011\u8a66\u8a66\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u4f86\u6aa2\u67e5 Node.js \u7684\u65e5\u8a8c\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl logs --selector=app=node -c node\r\n<\/code><\/pre>\n<p>\u5f53\u8fd9\u6837\u505a\u65f6\uff0c\u60a8\u53ef\u4ee5\u5728Python\u5e94\u7528\u7a0b\u5e8f\u4e2d\u8c03\u7528\u5e76\u786e\u8ba4\u6bcf\u79d2\u66f4\u65b0\u7684\u8ba2\u5355\u4fe1\u606f\u65e5\u5fd7\u3002<\/p>\n<pre class=\"post-pre\"><code>Got a new order! Order ID: 1\r\nSuccessfully persisted state.\r\nGot a new order! Order ID: 2\r\nSuccessfully persisted state.\r\nGot a new order! Order ID: 3\r\nSuccessfully persisted state.\r\nGot a new order! Order ID: 4\r\nSuccessfully persisted state.\r\nGot a new order! Order ID: 5\r\nSuccessfully persisted state.\r\n<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u8fde\u63a5\u5230Node.js\u7684GET\u7aef\u70b9\u65f6\u80fd\u591f\u786e\u8ba4\u6700\u65b0\u7684\u8ba2\u5355\u72b6\u6001\uff08\u8ba2\u5355ID\uff09\u3002<\/p>\n<pre class=\"post-pre\"><code>$ curl $NODE_APP\/order\r\n{\"orderId\":72}\r\n<\/code><\/pre>\n<h1>\u8865\u5145\u586b\u5199<\/h1>\n<p>\u5982\u679c\u5728\u4e0a\u8ff0\u7684\u64cd\u4f5c\u9a8c\u8bc1\u4e2d\u65e0\u6cd5\u83b7\u53d6\u5230\u6b63\u5e38\u7684\u503c\uff0c\u53ef\u80fd\u662fdapr\u7684\u914d\u7f6e\u6709\u95ee\u9898\u3002\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6211\u8ba4\u4e3a\u901a\u8fc7\u67e5\u770b\u8282\u70b9\u5e94\u7528POD\u5185\u7684daprd\u65e5\u5fd7\u7b49\u4fe1\u606f\uff0c\u53ef\u4ee5\u4e86\u89e3\u5230\u53d1\u751f\u4e86\u4ec0\u4e48\u6837\u7684\u9519\u8bef\u3002<\/p>\n<pre class=\"post-pre\"><code>kubectl logs nodeapp-5956c68964-wfnsh  -c daprd\r\n<\/code><\/pre>\n<h1>\u6700\u540e<\/h1>\n<p>\u5728\u8fd9\u6b21\u4e2d\uff0c\u6211\u4eec\u4ecb\u7ecd\u4e86\u4e00\u4e2a\u5728Azure Kubernetes Service\u4e0a\u4f7f\u7528Dapr\u5728\u8bed\u8a00\u4e0d\u540c\u7684\u5404\u4e2a\u5e94\u7528\u7a0b\u5e8f\uff08POD\uff09\u4e4b\u95f4\u7ba1\u7406\u72b6\u6001\u4fe1\u606f\u7684\u5e94\u7528\u7a0b\u5e8f\u793a\u4f8b\u3002<br \/>\n\u622a\u81f3\u672c\u5e16\u5b50\u53d1\u5e03\u65e5\u671f\uff082019\u5e7412\u67081\u65e5\uff09\uff0cDapr\u5df2\u53d1\u5e030.2.0\u7248\u672c\uff0c\u4f46\u7531\u4e8e\u51e0\u4e4e\u6ca1\u6709\u65e5\u8bed\u4fe1\u606f\uff0c\u6211\u4eec\u5e0c\u671b\u7ee7\u7eed\u5173\u6ce8\u5e76\u4ecb\u7ecd\u5373\u5c06\u53d1\u5e03\u76841.0.0\u7248\u672c\u3002<\/p>\n<h1>\u53c2\u8003\u6587\u732e<\/h1>\n<p>Dapr \u5b98\u65b9\u7f51\u7ad9<br \/>\nhttps:\/\/dapr.io\/#<\/p>\n<p>Dapr GitHub<br \/>\nhttps:\/\/github.com\/dapr\/docs<\/p>\n<p>Dapr \u7684 GitHub \u9875\u9762<br \/>\nhttps:\/\/github.com\/dapr\/docs<\/p>\n<p>\u8def\u7ebf\u56fe<br \/>\nhttps:\/\/github.com\/dapr\/dapr\/wiki\/%E8%B7%AF%E7%BA%BF%E5%9B%BE<\/p>\n<p>\u4ee5\u4e0b\u662f\u4f7f\u7528\u4e86\u793a\u4f8b\u8fdb\u884c\u6295\u7a3f\u7684\u94fe\u63a5\uff1a<br \/>\nhttps:\/\/github.com\/y10e\/azure-sample-cli\/tree\/master\/210_aks_dapr_redis\/deploy<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9996\u5148 \u6211\u6253\u7b97\u5728\u4eca\u5e7412\u6708\u4efd\u7684Microsoft Azure Tech Advent Calendar 2019 [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-50624","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>\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406 - 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\/\u4f7f\u7528dapr\u6846\u67b6\u5728azure-kubernetes-service\uff08aks\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406\" \/>\n<meta property=\"og:description\" content=\"\u9996\u5148 \u6211\u6253\u7b97\u5728\u4eca\u5e7412\u6708\u4efd\u7684Microsoft Azure Tech Advent Calendar 2019 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528dapr\u6846\u67b6\u5728azure-kubernetes-service\uff08aks\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-03T04:07:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-03T19:58:27+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d928c913a08637a6e2f8a\/4-0.jpeg\" \/>\n<meta name=\"author\" content=\"\u79d1, \u9896\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u79d1, \u9896\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 \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\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/\",\"name\":\"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2024-01-03T04:07:51+00:00\",\"dateModified\":\"2024-05-03T19:58:27+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406\"}]},{\"@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\/8ca01ba7f7362ad4edb7da206a12f29e\",\"name\":\"\u79d1, \u9896\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u9896\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406 - 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\/\u4f7f\u7528dapr\u6846\u67b6\u5728azure-kubernetes-service\uff08aks\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406\/","og_locale":"zh_CN","og_type":"article","og_title":"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406","og_description":"\u9996\u5148 \u6211\u6253\u7b97\u5728\u4eca\u5e7412\u6708\u4efd\u7684Microsoft Azure Tech Advent Calendar 2019 [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u4f7f\u7528dapr\u6846\u67b6\u5728azure-kubernetes-service\uff08aks\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2024-01-03T04:07:51+00:00","article_modified_time":"2024-05-03T19:58:27+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d928c913a08637a6e2f8a\/4-0.jpeg"}],"author":"\u79d1, \u9896","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u9896","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"6 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/","name":"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2024-01-03T04:07:51+00:00","dateModified":"2024-05-03T19:58:27+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/8ca01ba7f7362ad4edb7da206a12f29e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u4f7f\u7528Dapr\u6846\u67b6\u5728Azure Kubernetes Service\uff08AKS\uff09\u4e0a\u8fdb\u884c\u5fae\u670d\u52a1\u7684\u72b6\u6001\u7ba1\u7406"}]},{"@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\/8ca01ba7f7362ad4edb7da206a12f29e","name":"\u79d1, \u9896","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8a6fb3cc7ba2f69d2189ba532aec4633ea7ed75ac0af162ec367cb3abc0fb2af?s=96&d=mm&r=g","caption":"\u79d1, \u9896"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keying\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e4%bd%bf%e7%94%a8dapr%e6%a1%86%e6%9e%b6%e5%9c%a8azure-kubernetes-service%ef%bc%88aks%ef%bc%89%e4%b8%8a%e8%bf%9b%e8%a1%8c%e5%be%ae%e6%9c%8d%e5%8a%a1%e7%9a%84%e7%8a%b6%e6%80%81%e7%ae%a1%e7%90%86\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50624","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\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=50624"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50624\/revisions"}],"predecessor-version":[{"id":95979,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/50624\/revisions\/95979"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=50624"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=50624"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=50624"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}