{"id":43928,"date":"2023-07-05T22:49:36","date_gmt":"2023-10-14T13:56:42","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/"},"modified":"2024-04-30T12:10:35","modified_gmt":"2024-04-30T04:10:35","slug":"%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/","title":{"rendered":"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream"},"content":{"rendered":"<h2>\u5173\u4e8eNATS JetStream\u7684\u5185\u5bb9\u3002<\/h2>\n<h2>\u7b80\u4ecb<\/h2>\n<p>\u5728NATS JetStream\u7684\u6587\u6863\u4e2d\uff0c\u6ca1\u6709\u7279\u522b\u8bf4\u660e\u5982\u4f55\u5728Kubernetes\u4e0a\u8fd0\u884c\u3002\u5982\u679c\u6709\u7684\u8bdd\uff0c\u53ea\u662f\u63d0\u5230\u53ef\u4ee5\u4f7f\u7528Helm Chart\u3002\u6240\u4ee5\u6211\u901a\u8fc7\u89e3\u8bfbHelm Chart\uff0c\u5c06\u5176\u8f6c\u6362\u4e3a\u7b80\u5355\u7684yaml\u63cf\u8ff0\u3002<\/p>\n<h2>\u4e3a\u4ec0\u4e48\u4e0d\u4f7f\u7528Helm Chart\u5462\uff1f<\/h2>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u30d6\u30e9\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u306e\u307e\u307e\u3067\u306f\u3001\u62e1\u5f35\u6027\u306b\u4e4f\u3057\u3044<\/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\">Helm\u304c\u9ed2\u9b54\u8853\u5316\u3059\u308b<\/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\">Helm\u304c\u5ba3\u8a00\u7684\u3067\u306f\u306a\u3044<\/ul>\n<\/li>\n<\/ul>\n<p>helm install &#8211;set \u3084 helm install &#8211;values\u3068\u3044\u3063\u305f\u624b\u7d9a\u304d\u7684\u306aCLI\u64cd\u4f5c\u3092\u6c42\u3081\u3089\u308c\u308b<\/p>\n<h2>YAML<\/h2>\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\">Namespace<\/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\">nats-ns<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/version<\/span><span class=\"pi\">:<\/span> <span class=\"s\">2.6.2<\/span>\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\">nats-js-config<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-ns<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/version<\/span><span class=\"pi\">:<\/span> <span class=\"s\">2.6.2<\/span>\r\n<span class=\"na\">data<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"s\">nats.conf<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n    <span class=\"s\">pid_file: \"\/var\/run\/nats\/nats.pid\"<\/span>\r\n    <span class=\"s\">http: 8222<\/span>\r\n    <span class=\"s\">server_name: $POD_NAME<\/span>\r\n\r\n    <span class=\"s\">jetstream {<\/span>\r\n      <span class=\"s\">store_dir: \"\/data\/jetstream\/store\"<\/span>\r\n      <span class=\"s\">max_file_store: 1G<\/span>\r\n      <span class=\"s\">max_memory_store: 1G<\/span>\r\n    <span class=\"s\">}<\/span>\r\n\r\n    <span class=\"s\">cluster {<\/span>\r\n      <span class=\"s\">name: example<\/span>\r\n      <span class=\"s\">port: 6222<\/span>\r\n\r\n      <span class=\"s\"># Based on 5 replicas<\/span>\r\n      <span class=\"s\">routes = [<\/span>\r\n        <span class=\"s\">nats-route:\/\/$POD_NAME-0.nats-js.$POD_NAMESPACE.svc.cluster.local:6222,<\/span>\r\n        <span class=\"s\">nats-route:\/\/$POD_NAME-1.nats-js.$POD_NAMESPACE.svc.cluster.local:6222,<\/span>\r\n        <span class=\"s\">nats-route:\/\/$POD_NAME-2.nats-js.$POD_NAMESPACE.svc.cluster.local:6222,<\/span>\r\n        <span class=\"s\">nats-route:\/\/$POD_NAME-3.nats-js.$POD_NAMESPACE.svc.cluster.local:6222,<\/span>\r\n        <span class=\"s\">nats-route:\/\/$POD_NAME-4.nats-js.$POD_NAMESPACE.svc.cluster.local:6222,<\/span>\r\n      <span class=\"s\">]<\/span>\r\n      <span class=\"s\">cluster_advertise: $CLUSTER_ADVERTISE<\/span>\r\n      <span class=\"s\">connect_retries: 30<\/span>\r\n    <span class=\"s\">}<\/span>\r\n\r\n    <span class=\"s\">lame_duck_duration: 60s # it should be equal to terminationGracePeriodSeconds of Pod and default is 30s<\/span>\r\n\r\n    <span class=\"s\">}<\/span>\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\">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\">nats-js<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-ns<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/version<\/span><span class=\"pi\">:<\/span> <span class=\"s\">2.6.2<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n  <span class=\"na\">clusterIP<\/span><span class=\"pi\">:<\/span> <span class=\"s\">None<\/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\">client<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">4222<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">cluster<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6222<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitor<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8222<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metrics<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">7777<\/span>\r\n<span class=\"nn\">---<\/span>\r\n<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\">StatefulSet<\/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\">nats-js<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-ns<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n    <span class=\"s\">app.kubernetes.io\/version<\/span><span class=\"pi\">:<\/span> <span class=\"s\">2.6.2<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/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=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n      <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\r\n  <span class=\"na\">serviceName<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">nats-js\"<\/span>\r\n  <span class=\"na\">volumeClaimTemplates<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js-sts-vol<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">accessModes<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"s\">ReadWriteOnce<\/span>\r\n      <span class=\"na\">volumeMode<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">Filesystem\"<\/span>\r\n      <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">storage<\/span><span class=\"pi\">:<\/span> <span class=\"s\">10Gi<\/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=\"s\">app.kubernetes.io\/name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats<\/span>\r\n        <span class=\"s\">app.kubernetes.io\/instance<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js<\/span>\r\n      <span class=\"na\">annotations<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"s\">prometheus.io\/path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/metrics<\/span>\r\n        <span class=\"s\">prometheus.io\/port<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">7777\"<\/span>\r\n        <span class=\"s\">prometheus.io\/scrape<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">true\"<\/span>\r\n\r\n        <span class=\"s\">sidecar.istio.io\/inject<\/span><span class=\"pi\">:<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">false\"<\/span> <span class=\"c1\"># should considerate<\/span>\r\n    <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"c1\"># Common volumes for the containers<\/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\">config-volume<\/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\">nats-js-config<\/span>\r\n      <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pid<\/span>\r\n        <span class=\"na\">emptyDir<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">{}<\/span>\r\n\r\n      <span class=\"c1\"># Required to be able to HUP signal and apply config reload<\/span>\r\n      <span class=\"c1\"># to the server without restarting the pod.<\/span>\r\n      <span class=\"na\">shareProcessNamespace<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n\r\n      <span class=\"c1\">#################<\/span>\r\n      <span class=\"c1\">#               #<\/span>\r\n      <span class=\"c1\">#  NATS Server  #<\/span>\r\n      <span class=\"c1\">#               #<\/span>\r\n      <span class=\"c1\">#################<\/span>\r\n      <span class=\"na\">terminationGracePeriodSeconds<\/span><span class=\"pi\">:<\/span> <span class=\"m\">60<\/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\">nats<\/span>\r\n        <span class=\"na\">image<\/span><span class=\"pi\">:<\/span> <span class=\"s\">synadia\/nats-server:nightly<\/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\">4222<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">client<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">6222<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">cluster<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8222<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitor<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">containerPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">7777<\/span>\r\n          <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metrics<\/span>\r\n        <span class=\"na\">command<\/span><span class=\"pi\">:<\/span>\r\n         <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">nats-server\"<\/span>\r\n         <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">--config\"<\/span>\r\n         <span class=\"pi\">-<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/etc\/nats-config\/nats.conf\"<\/span>\r\n\r\n        <span class=\"c1\"># Required to be able to define an environment variable<\/span>\r\n        <span class=\"c1\"># that refers to other environment variables.  This env var<\/span>\r\n        <span class=\"c1\"># is later used as part of the configuration file.<\/span>\r\n        <span class=\"na\">env<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">POD_NAME<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">fieldRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">fieldPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metadata.name<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">POD_NAMESPACE<\/span>\r\n          <span class=\"na\">valueFrom<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">fieldRef<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"na\">fieldPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">metadata.namespace<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">CLUSTER_ADVERTISE<\/span>\r\n          <span class=\"na\">value<\/span><span class=\"pi\">:<\/span> <span class=\"s\">$(POD_NAME).nats-js.$(POD_NAMESPACE).svc<\/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\">config-volume<\/span>\r\n            <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/etc\/nats-config<\/span>\r\n          <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">pid<\/span>\r\n            <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/var\/run\/nats<\/span>\r\n          <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">nats-js-sts-vol<\/span>\r\n            <span class=\"na\">mountPath<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/data\/jetstream<\/span>\r\n\r\n        <span class=\"c1\"># Liveness\/Readiness probes against the monitoring<\/span>\r\n        <span class=\"c1\">#<\/span>\r\n        <span class=\"na\">livenessProbe<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">httpGet<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/<\/span>\r\n            <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8222<\/span>\r\n          <span class=\"na\">initialDelaySeconds<\/span><span class=\"pi\">:<\/span> <span class=\"m\">10<\/span>\r\n          <span class=\"na\">timeoutSeconds<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\r\n        <span class=\"na\">readinessProbe<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">httpGet<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">path<\/span><span class=\"pi\">:<\/span> <span class=\"s\">\/<\/span>\r\n            <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">8222<\/span>\r\n          <span class=\"na\">initialDelaySeconds<\/span><span class=\"pi\">:<\/span> <span class=\"m\">10<\/span>\r\n          <span class=\"na\">timeoutSeconds<\/span><span class=\"pi\">:<\/span> <span class=\"m\">5<\/span>\r\n\r\n        <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">cpu<\/span><span class=\"pi\">:<\/span> <span class=\"s\">300m<\/span>\r\n            <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s\">600Mi<\/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=\"s\">300m<\/span>\r\n            <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s\">600Mi<\/span>\r\n\r\n        <span class=\"c1\"># Gracefully stop NATS Server on pod deletion or image upgrade.<\/span>\r\n        <span class=\"c1\">#<\/span>\r\n        <span class=\"na\">lifecycle<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">preStop<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">exec<\/span><span class=\"pi\">:<\/span>\r\n              <span class=\"c1\"># Using the alpine based NATS image, we add an extra sleep that is<\/span>\r\n              <span class=\"c1\"># the same amount as the terminationGracePeriodSeconds to allow<\/span>\r\n              <span class=\"c1\"># the NATS Server to gracefully terminate the client connections.<\/span>\r\n              <span class=\"c1\">#<\/span>\r\n              <span class=\"na\">command<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">[<\/span><span class=\"s2\">\"<\/span><span class=\"s\">\/bin\/sh\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">-c\"<\/span><span class=\"pi\">,<\/span> <span class=\"s2\">\"<\/span><span class=\"s\">\/nats-server<\/span> <span class=\"s\">-sl=ldm=\/var\/run\/nats\/nats.pid<\/span> <span class=\"s\">&amp;&amp;<\/span> <span class=\"s\">\/bin\/sleep<\/span> <span class=\"s\">60\"<\/span><span class=\"pi\">]<\/span>\r\n\r\n<\/code><\/pre>\n<p>\u5f53\u4f60\u4f7f\u7528&#8221;kubectl apply -f nats.yaml&#8221; \u547d\u4ee4\u8fdb\u884c Apply\uff0c\u5b83\u7684\u542b\u4e49\u662f<\/p>\n<pre class=\"post-pre\"><code>\u2514\u2500(17:03:54)\u2500\u2500&gt; kubectl logs -f nats-js-0  -c nats  --namespace nats-ns                                                                          \u2500\u2500(\u706b,1207)\u2500\u2518\r\n[8] 2021\/12\/07 08:03:49.354395 [INF] Starting nats-server\r\n[8] 2021\/12\/07 08:03:49.355813 [INF]   Version:  2.6.6\r\n[8] 2021\/12\/07 08:03:49.355852 [INF]   Git:      [893b4154]\r\n[8] 2021\/12\/07 08:03:49.355907 [INF]   Name:     nats-js-0\r\n[8] 2021\/12\/07 08:03:49.356005 [INF]   Node:     yLCaJyhQ\r\n[8] 2021\/12\/07 08:03:49.356124 [INF]   ID:       NAZZFGATIGMG57CFFJXGXNJPE3QBIM5ZARZWFZKPODA7BYGFCAGJBJKV\r\n[8] 2021\/12\/07 08:03:49.356239 [INF] Using configuration file: \/etc\/nats-config\/nats.conf\r\n[8] 2021\/12\/07 08:03:49.446026 [INF] Starting JetStream\r\n[8] 2021\/12\/07 08:03:49.451437 [INF]     _ ___ _____ ___ _____ ___ ___   _   __  __\r\n[8] 2021\/12\/07 08:03:49.451678 [INF]  _ | | __|_   _\/ __|_   _| _ \\ __| \/_\\ |  \\\/  |\r\n[8] 2021\/12\/07 08:03:49.451711 [INF] | || | _|  | | \\__ \\ | | |   \/ _| \/ _ \\| |\\\/| |\r\n[8] 2021\/12\/07 08:03:49.451726 [INF]  \\__\/|___| |_| |___\/ |_| |_|_\\___\/_\/ \\_\\_|  |_|\r\n[8] 2021\/12\/07 08:03:49.451896 [INF] \r\n[8] 2021\/12\/07 08:03:49.452182 [INF]          https:\/\/docs.nats.io\/jetstream\r\n[8] 2021\/12\/07 08:03:49.452206 [INF] \r\n[8] 2021\/12\/07 08:03:49.452218 [INF] ---------------- JETSTREAM ----------------\r\n[8] 2021\/12\/07 08:03:49.455665 [INF]   Max Memory:      953.67 MB\r\n[8] 2021\/12\/07 08:03:49.456175 [INF]   Max Storage:     953.67 MB\r\n[8] 2021\/12\/07 08:03:49.456358 [INF]   Store Directory: \"\/data\/jetstream\/store\/jetstream\"\r\n[8] 2021\/12\/07 08:03:49.456399 [INF] -------------------------------------------\r\n[8] 2021\/12\/07 08:03:49.459252 [INF] Starting JetStream cluster\r\n[8] 2021\/12\/07 08:03:49.459362 [INF] Creating JetStream metadata controller\r\n[8] 2021\/12\/07 08:03:49.545305 [INF] JetStream cluster recovering state\r\n[8] 2021\/12\/07 08:03:49.656808 [INF] Starting http monitor on 0.0.0.0:8222\r\n[8] 2021\/12\/07 08:03:49.657967 [INF] Listening for client connections on 0.0.0.0:4222\r\n[8] 2021\/12\/07 08:03:49.744362 [INF] Server is ready\r\n[8] 2021\/12\/07 08:03:49.745196 [INF] Cluster name is example\r\n[8] 2021\/12\/07 08:03:49.745468 [INF] Listening for route connections on 0.0.0.0:6222\r\n[8] 2021\/12\/07 08:03:49.754961 [ERR] Error trying to connect to route (attempt 1): lookup for host \"$POD_NAME-1.nats-js.$POD_NAMESPACE.svc.cluster.local\": lookup $POD_NAME-1.nats-js.$POD_NAMESPACE.svc.cluster.local: no such host\r\n[8] 2021\/12\/07 08:03:49.754984 [ERR] Error trying to connect to route (attempt 1): lookup for host \"$POD_NAME-4.nats-js.$POD_NAMESPACE.svc.cluster.local\": lookup $POD_NAME-4.nats-js.$POD_NAMESPACE.svc.cluster.local: no such host\r\n[8] 2021\/12\/07 08:03:49.755098 [ERR] Error trying to connect to route (attempt 1): lookup for host \"$POD_NAME-0.nats-js.$POD_NAMESPACE.svc.cluster.local\": lookup $POD_NAME-0.nats-js.$POD_NAMESPACE.svc.cluster.local: no such host\r\n[8] 2021\/12\/07 08:03:49.755142 [ERR] Error trying to connect to route (attempt 1): lookup for host \"$POD_NAME-2.nats-js.$POD_NAMESPACE.svc.cluster.local\": lookup $POD_NAME-2.nats-js.$POD_NAMESPACE.svc.cluster.local: no such host\r\n[8] 2021\/12\/07 08:03:49.755243 [ERR] Error trying to connect to route (attempt 1): lookup for host \"$POD_NAME-3.nats-js.$POD_NAMESPACE.svc.cluster.local\": lookup $POD_NAME-3.nats-js.$POD_NAMESPACE.svc.cluster.local: no such host\r\n<\/code><\/pre>\n<p>\u5728\u542f\u52a8\u65f6\u8fd4\u56de\u627e\u4e0d\u5230\u96c6\u7fa4\u7684\u9519\u8bef\u3002<br \/>\n\u5f53\u7136\uff0c\u5176\u4ed6\u96c6\u7fa4\u4f1a\u7a0d\u540e\u542f\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code>\u2514\u2500(17:14:44)\u2500\u2500&gt; kubectl get pods --namespace nats-ns                                                                                       130 \u21b5 \u2500\u2500(\u706b,1207)\u2500\u2518\r\nNAME        READY   STATUS    RESTARTS   AGE\r\nnats-js-0   1\/1     Running   0          11m\r\nnats-js-1   1\/1     Running   0          10m\r\nnats-js-2   1\/1     Running   0          10m\r\nnats-js-3   1\/1     Running   0          10m\r\nnats-js-4   1\/1     Running   0          10m\r\n<\/code><\/pre>\n<p>\u5f53\u65f6\u95f4\u8fc7\u53bb\u540e\uff0c\u53ea\u8981\u6240\u6709\u7684Pod\u90fd\u80fd\u591f\u542f\u52a8\u8d77\u6765\uff0c\u5c31\u6ca1\u6709\u95ee\u9898\u4e86\u3002<br \/>\n\u5728\u6b63\u5f0f\u90e8\u7f72\u65f6\uff0c\u8981\u6ce8\u610f\u8fd9\u4e00\u70b9\u3002<\/p>\n<p>\u6211\u60f3\u8981\u786e\u8ba4\u4e00\u4e0b\u5b9e\u9645\u662f\u5426\u53d1\u751f\u4e86\u79fb\u52a8\u3002<\/p>\n<h5>\u9996\u5148\uff0c\u8fdb\u884c\u7aef\u53e3\u8f6c\u53d1\u3002<\/h5>\n<pre class=\"post-pre\"><code>\u2514\u2500(17:22:59)\u2500\u2500&gt; kubectl port-forward svc\/nats-js 4222:4222  --namespace nats-ns                                                              1 \u21b5 \u2500\u2500(\u706b,1207)\u2500\u2518\r\nForwarding from 127.0.0.1:4222 -&gt; 4222\r\nForwarding from [::1]:4222 -&gt; 4222\r\n<\/code><\/pre>\n<h5>\u63a5\u4e0b\u6765\uff0c\u8bf7\u8ba2\u9605\u3002<\/h5>\n<pre class=\"post-pre\"><code>\u2514\u2500(16:38:58)\u2500\u2500&gt; nats sub sample                                                                                                                                \u2500\u2500(\u706b,1207)\u2500\u2518\r\n17:24:28 Subscribing on sample\r\n[#1] Received on \"sample\"\r\nhello nats world\r\n<\/code><\/pre>\n<h5>\u51fa\u7248<\/h5>\n<pre class=\"post-pre\"><code>\u2514\u2500(16:38:58)\u2500\u2500&gt; nats pub sample \"hello nats world\"                                                                                         127 \u21b5 \u2500\u2500(\u706b,1207)\u2500\u2518\r\n17:24:37 Published 16 bytes to \"sample\"\r\n<\/code><\/pre>\n<h5>\u89c2\u5bdf\u4e00\u4e0b<\/h5>\n<pre class=\"post-pre\"><code>\u2514\u2500(16:38:58)\u2500\u2500&gt; nats sub sample                                                                                                                                \u2500\u2500(\u706b,1207)\u2500\u2518\r\n17:24:28 Subscribing on sample\r\n[#1] Received on \"sample\"\r\nhello nats world\r\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5173\u4e8eNATS JetStream\u7684\u5185\u5bb9\u3002 \u7b80\u4ecb \u5728NATS JetStream\u7684\u6587\u6863\u4e2d\uff0c\u6ca1\u6709\u7279\u522b\u8bf4\u660e\u5982\u4f55\u5728Ku [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-43928","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>\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream - 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\/\u6211\u5728kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cnats-jetstream\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream\" \/>\n<meta property=\"og:description\" content=\"\u5173\u4e8eNATS JetStream\u7684\u5185\u5bb9\u3002 \u7b80\u4ecb \u5728NATS JetStream\u7684\u6587\u6863\u4e2d\uff0c\u6ca1\u6709\u7279\u522b\u8bf4\u660e\u5982\u4f55\u5728Ku [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u5728kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cnats-jetstream\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-14T13:56:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-30T04:10:35+00:00\" \/>\n<meta name=\"author\" content=\"\u79d1, \u96c5\" \/>\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, \u96c5\" \/>\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\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/\",\"name\":\"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-10-14T13:56:42+00:00\",\"dateModified\":\"2024-04-30T04:10:35+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream\"}]},{\"@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\/41e222757cdd2a3365361328bd79970a\",\"name\":\"\u79d1, \u96c5\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g\",\"caption\":\"\u79d1, \u96c5\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream - 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\/\u6211\u5728kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cnats-jetstream\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream","og_description":"\u5173\u4e8eNATS JetStream\u7684\u5185\u5bb9\u3002 \u7b80\u4ecb \u5728NATS JetStream\u7684\u6587\u6863\u4e2d\uff0c\u6ca1\u6709\u7279\u522b\u8bf4\u660e\u5982\u4f55\u5728Ku [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u5728kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cnats-jetstream\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-10-14T13:56:42+00:00","article_modified_time":"2024-04-30T04:10:35+00:00","author":"\u79d1, \u96c5","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u79d1, \u96c5","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"5 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/","name":"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-10-14T13:56:42+00:00","dateModified":"2024-04-30T04:10:35+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/41e222757cdd2a3365361328bd79970a"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u6211\u5728Kubernetes\u4e0a\u5c1d\u8bd5\u8fd0\u884cNATS JetStream"}]},{"@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\/41e222757cdd2a3365361328bd79970a","name":"\u79d1, \u96c5","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b2d3e00a7df03689797ebd4af8c5827ba5af936849a71050ec331f4cf902c5d?s=96&d=mm&r=g","caption":"\u79d1, \u96c5"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/keya\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e5%9c%a8kubernetes%e4%b8%8a%e5%b0%9d%e8%af%95%e8%bf%90%e8%a1%8cnats-jetstream%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43928","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\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=43928"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43928\/revisions"}],"predecessor-version":[{"id":91833,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43928\/revisions\/91833"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=43928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=43928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=43928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}