<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>在 Kubernetes 环境中部署和运行 Dapr on Dapr 文档库</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/</link><description>Recent content in 在 Kubernetes 环境中部署和运行 Dapr on Dapr 文档库</description><generator>Hugo</generator><language>zh-hans</language><atom:link href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/index.xml" rel="self" type="application/rss+xml"/><item><title>Dapr 在 Kubernetes 上的概述</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-overview/</guid><description>&lt;p>Dapr 可以在任何支持的 Kubernetes 版本上运行。为此，Dapr 部署了一些 Kubernetes 服务，这些服务提供了良好的集成，使得在 Kubernetes 上运行 Dapr 应用程序变得简单。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Kubernetes 服务&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>dapr-operator&lt;/code>&lt;/td>
 &lt;td>管理 Dapr 的&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/components/">组件&lt;/a>更新和 Kubernetes 服务端点（如状态存储、发布/订阅等）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>dapr-sidecar-injector&lt;/code>&lt;/td>
 &lt;td>将 Dapr 注入到&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-overview/#adding-dapr-to-a-kubernetes-deployment">已标注的&lt;/a>部署 pod 中，并添加环境变量 &lt;code>DAPR_HTTP_PORT&lt;/code> 和 &lt;code>DAPR_GRPC_PORT&lt;/code>，以便用户应用程序可以轻松与 Dapr 通信，而无需硬编码 Dapr 端口。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>dapr-placement&lt;/code>&lt;/td>
 &lt;td>专用于&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/">actor&lt;/a>。创建映射表，将 actor 实例映射到 pod&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>dapr-sentry&lt;/code>&lt;/td>
 &lt;td>管理服务之间的 mTLS 并充当证书颁发机构。更多信息请参阅&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/security-concept/">安全概述&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;img src="https://v1-18.docs.dapr.io/images/overview-kubernetes.png" width=1000>
&lt;h2 id="支持的版本">支持的版本&lt;/h2>
&lt;p>Dapr 对 Kubernetes 的支持遵循 &lt;a href="https://kubernetes.io/releases/version-skew-policy">Kubernetes 版本偏差政策&lt;/a>。&lt;/p>
&lt;h2 id="将-dapr-部署到-kubernetes-集群">将 Dapr 部署到 Kubernetes 集群&lt;/h2>
&lt;p>阅读&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-deploy/">在 Kubernetes 集群上部署 Dapr&lt;/a>以了解如何将 Dapr 部署到您的 Kubernetes 集群。&lt;/p>
&lt;h2 id="将-dapr-添加到-kubernetes-部署">将 Dapr 添加到 Kubernetes 部署&lt;/h2>
&lt;p>要在 Kubernetes 集群中部署和运行启用 Dapr 的应用程序，只需在 pod 中添加一些注释即可。例如，在以下示例中，您的 Kubernetes pod 被标注为：&lt;/p></description></item><item><title>在 Kubernetes 集群上部署 Dapr</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-deploy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-deploy/</guid><description>&lt;p>在 Kubernetes 上设置 Dapr 时，你可以使用 Dapr CLI 或 Helm。&lt;/p>


&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">混合集群&lt;/h4>

 Dapr CLI 和 Dapr Helm chart 默认会部署到带有标签 &lt;code>kubernetes.io/os=linux&lt;/code> 的节点上。如果你的应用程序需要，你也可以将 Dapr 部署到 Windows 节点。更多信息请参见&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-hybrid-clusters/">部署到混合 Linux/Windows Kubernetes 集群&lt;/a>。

&lt;/div>


 &lt;!-- Dapr CLI -->


 &lt;!-- Helm -->


&lt;ul class="nav nav-tabs" id="tabs-1" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
 data-td-tp-persist="dapr cli" aria-controls="tabs-01-00" aria-selected="true">
 Dapr CLI
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
 data-td-tp-persist="helm" aria-controls="tabs-01-01" aria-selected="false">
 Helm
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-1-content">
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
 &lt;h2 id="使用-dapr-cli-安装">使用 Dapr CLI 安装&lt;/h2>
&lt;p>你可以使用 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/install-dapr-cli/">Dapr CLI&lt;/a> 在 Kubernetes 集群中安装 Dapr。&lt;/p>
&lt;h3 id="先决条件">先决条件&lt;/h3>
&lt;ul>
&lt;li>安装：
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/install-dapr-cli/">Dapr CLI&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://kubernetes.io/docs/tasks/tools/">kubectl&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>创建一个带有 Dapr 的 Kubernetes 集群。以下是一些有用的链接：
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/cluster/setup-kind/">设置 KiNd 集群&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/cluster/setup-minikube/">设置 Minikube 集群&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/cluster/setup-aks/">设置 Azure Kubernetes 服务集群&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/cluster/setup-gke/">设置 GKE 集群&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html">设置 Amazon 弹性 Kubernetes 服务&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="安装选项">安装选项&lt;/h3>
&lt;p>你可以从官方 Helm chart 或私有 chart 安装 Dapr，并使用自定义命名空间等。&lt;/p></description></item><item><title>在 Kubernetes 集群上升级 Dapr</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-upgrade/</guid><description>&lt;p>您可以通过 Dapr CLI 或 Helm 来升级 Kubernetes 集群上的 Dapr 控制平面。&lt;/p>


&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 请参阅 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/support/support-release-policy/#upgrade-paths">Dapr 版本政策&lt;/a> 以获取 Dapr 升级路径的指导。

&lt;/div>


 &lt;!-- Dapr CLI -->


 &lt;!-- Helm -->


&lt;ul class="nav nav-tabs" id="tabs-1" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-01-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-00" role="tab"
 data-td-tp-persist="dapr cli" aria-controls="tabs-01-00" aria-selected="true">
 Dapr CLI
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-01-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-01-01" role="tab"
 data-td-tp-persist="helm" aria-controls="tabs-01-01" aria-selected="false">
 Helm
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-1-content">
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-01-00" role="tabpanel" aria-labelled-by="tabs-01-00-tab" tabindex="1">
 &lt;h2 id="使用-dapr-cli-升级">使用 Dapr CLI 升级&lt;/h2>
&lt;p>您可以使用 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/install-dapr-cli/">Dapr CLI&lt;/a> 来升级 Dapr。&lt;/p>
&lt;h3 id="前提条件">前提条件&lt;/h3>
&lt;ul>
&lt;li>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/install-dapr-cli/">安装 Dapr CLI&lt;/a>&lt;/li>
&lt;li>一个现有的 &lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/cluster/">运行 Dapr 的 Kubernetes 集群&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="将现有集群升级到-1169">将现有集群升级到 1.16.9&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>dapr upgrade -k --runtime-version&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>1.16.9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;a href="https://github.com/dapr/cli#supplying-helm-values">您可以使用 Dapr CLI 提供所有可用的 Helm chart 配置。&lt;/a>&lt;/p></description></item><item><title>Kubernetes 生产指南</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-production/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-production/</guid><description>&lt;h2 id="集群和容量要求">集群和容量要求&lt;/h2>
&lt;p>Dapr 对 Kubernetes 的支持遵循 &lt;a href="https://kubernetes.io/releases/version-skew-policy/">Kubernetes 版本偏差政策&lt;/a>。&lt;/p>
&lt;p>以下资源配置可作为起始参考。具体要求会因集群规模、pod 数量及其他因素而有所不同。请根据您的环境进行测试以确定合适的配置值。在生产环境中，建议不要为 Dapr 控制平面组件设置内存限制，以避免出现 &lt;code>OOMKilled&lt;/code> pod 状态。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>部署&lt;/th>
 &lt;th>CPU&lt;/th>
 &lt;th>内存&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;strong>Operator&lt;/strong>&lt;/td>
 &lt;td>限制: 1, 请求: 100m&lt;/td>
 &lt;td>请求: 100Mi&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Sidecar Injector&lt;/strong>&lt;/td>
 &lt;td>限制: 1, 请求: 100m&lt;/td>
 &lt;td>请求: 30Mi&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Sentry&lt;/strong>&lt;/td>
 &lt;td>限制: 1, 请求: 100m&lt;/td>
 &lt;td>请求: 30Mi&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;strong>Placement&lt;/strong>&lt;/td>
 &lt;td>限制: 1, 请求: 250m&lt;/td>
 &lt;td>请求: 75Mi&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>


&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">注意&lt;/h4>

 有关更多信息，请参阅 Kubernetes 文档中的 &lt;a href="https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/#resource-units-in-kubernetes">CPU 和内存资源单位及其含义&lt;/a>。

&lt;/div>

&lt;h3 id="helm">Helm&lt;/h3>
&lt;p>使用 Helm 安装 Dapr 时，默认未设置限制/请求值。每个组件都有一个 &lt;code>resources&lt;/code> 选项（例如，&lt;code>dapr_dashboard.resources&lt;/code>），您可以根据需要调整 Dapr 控制平面的资源配置。&lt;/p>
&lt;p>&lt;a href="https://github.com/dapr/dapr/blob/master/charts/dapr/README.md">Helm chart 说明&lt;/a> 提供了详细信息和示例。&lt;/p>
&lt;p>对于本地/开发安装，您可以选择不配置 &lt;code>resources&lt;/code> 选项。&lt;/p>
&lt;h3 id="可选组件">可选组件&lt;/h3>
&lt;p>以下 Dapr 控制平面部署是可选的：&lt;/p></description></item><item><title>使用 Dapr Shared 部署 Dapr 到每个节点或每个集群</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-dapr-shared/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-dapr-shared/</guid><description>&lt;p>Dapr 会自动为您的应用程序注入一个 sidecar，以启用 Dapr API，从而实现最佳的可用性和可靠性。&lt;/p>
&lt;p>Dapr Shared 提供了两种替代的部署策略：通过 Kubernetes 的 &lt;code>DaemonSet&lt;/code> 实现每节点部署，或通过 &lt;code>Deployment&lt;/code> 实现每集群部署。&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>DaemonSet&lt;/code>:&lt;/strong> 当以 Kubernetes 的 &lt;code>DaemonSet&lt;/code> 资源运行 Dapr Shared 时，daprd 容器会在集群中的每个 Kubernetes 节点上运行。这可以减少应用程序与 Dapr 之间的网络延迟。&lt;/li>
&lt;li>&lt;strong>&lt;code>Deployment&lt;/code>:&lt;/strong> 当以 Kubernetes 的 &lt;code>Deployment&lt;/code> 运行 Dapr Shared 时，Kubernetes 调度器会决定 daprd 容器实例在集群中的哪个节点上运行。&lt;/li>
&lt;/ul>


&lt;div class="alert alert-primary" role="alert">
&lt;h4 class="alert-heading">Dapr Shared 部署&lt;/h4>

 对于您部署的每个 Dapr 应用程序，您需要使用不同的 &lt;code>shared.appId&lt;/code> 来部署 Dapr Shared Helm chart。

&lt;/div>

&lt;h2 id="为什么选择-dapr-shared">为什么选择 Dapr Shared？&lt;/h2>
&lt;p>默认情况下，当 Dapr 安装到 Kubernetes 集群中时，Dapr 控制平面会将 Dapr 作为 sidecar 注入到带有 Dapr 注释（&lt;code>dapr.io/enabled: &amp;quot;true&amp;quot;&lt;/code>）的应用程序中。sidecar 提供了许多优势，包括提高弹性，因为每个应用程序都有一个实例，并且应用程序与 sidecar 之间的所有通信都无需经过网络。&lt;/p></description></item><item><title>操作指南：持久化调度器任务</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-persisting-scheduler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-persisting-scheduler/</guid><description>&lt;p>&lt;a href="https://v1-18.docs.dapr.io/zh-hans/concepts/dapr-services/scheduler/">调度器&lt;/a>服务负责将任务写入其嵌入的Etcd数据库并调度执行。
默认情况下，调度器服务数据库会将数据写入大小为&lt;code>1Gb&lt;/code>的持久卷声明（Persistent Volume Claim），使用集群的默认&lt;a href="https://kubernetes.io/docs/concepts/storage/storage-classes/">存储类&lt;/a>。
这意味着在大多数Kubernetes部署中运行调度器服务不需要额外参数，但如果没有默认的StorageClass或在生产环境中运行时，您将需要进行&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-persisting-scheduler/#storage-class">额外的配置&lt;/a>。&lt;/p>


&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">警告&lt;/h4>

 调度器的默认存储大小为&lt;code>1Gi&lt;/code>，这对于大多数生产部署来说可能不够。
请注意，当启用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/support/support-preview-features/">SchedulerReminders&lt;/a>预览功能时，调度器会用于&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/actors-timers-reminders/">actor提醒&lt;/a>、&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/workflow/workflow-overview/">工作流&lt;/a>以及&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/api/jobs_api/">任务API&lt;/a>。
您可能需要考虑重新安装Dapr，并将调度器存储增加到至少&lt;code>16Gi&lt;/code>或更多。
有关更多信息，请参见下面的&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-persisting-scheduler/#etcd-storage-disk-size">ETCD存储磁盘大小&lt;/a>部分。

&lt;/div>

&lt;h2 id="生产环境设置">生产环境设置&lt;/h2>
&lt;h3 id="etcd存储磁盘大小">ETCD存储磁盘大小&lt;/h3>
&lt;p>调度器的默认存储大小为&lt;code>1Gb&lt;/code>。
这个大小对于大多数生产部署来说可能不够。
当存储大小超出时，调度器将记录类似以下的错误：&lt;/p>
&lt;pre tabindex="0">&lt;code>error running scheduler: etcdserver: mvcc: database space exceeded
&lt;/code>&lt;/pre>&lt;p>确定存储大小的安全上限并不是一门精确的科学，主要取决于应用程序任务的数量、持久性和数据负载大小。
&lt;a href="https://v1-18.docs.dapr.io/zh-hans/reference/api/jobs_api/">任务API&lt;/a>和&lt;a href="https://v1-18.docs.dapr.io/zh-hans/developing-applications/building-blocks/actors/actors-timers-reminders/">actor提醒&lt;/a>（启用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/support/support-preview-features/">SchedulerReminders&lt;/a>预览功能时）会根据应用程序的使用情况进行映射。
工作流（启用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/support/support-preview-features/">SchedulerReminders&lt;/a>预览功能时）会创建大量的任务作为actor提醒，但这些任务是短暂的，与每个工作流执行的生命周期相匹配。
工作流创建的任务的数据负载通常为空或很小。&lt;/p>
&lt;p>调度器使用Etcd作为其存储后端数据库。
根据设计，Etcd以&lt;a href="https://etcd.io/docs/v3.5/learning/persistent-storage-files/">预写日志（WAL）和快照&lt;/a>的形式持久化历史事务和数据。
这意味着调度器的实际磁盘使用量将高于当前可观察的数据库状态，通常是多个倍数。&lt;/p>
&lt;h3 id="在安装时设置存储大小">在安装时设置存储大小&lt;/h3>
&lt;p>如果您需要增加&lt;strong>现有&lt;/strong>调度器的存储大小，请参见下面的&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-persisting-scheduler/#increase-existing-scheduler-storage-size">增加现有调度器存储大小&lt;/a>部分。
要增加&lt;strong>新&lt;/strong>Dapr安装的存储大小（在此示例中为&lt;code>16Gi&lt;/code>），您可以使用以下命令：&lt;/p>

 &lt;!-- Dapr CLI -->


 &lt;!-- Helm -->

&lt;ul class="nav nav-tabs" id="tabs-6" role="tablist">
 &lt;li class="nav-item">
 &lt;button class="nav-link active"
 id="tabs-06-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-00" role="tab"
 data-td-tp-persist="dapr cli" aria-controls="tabs-06-00" aria-selected="true">
 Dapr CLI
 &lt;/button>
 &lt;/li>&lt;li class="nav-item">
 &lt;button class="nav-link"
 id="tabs-06-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-06-01" role="tab"
 data-td-tp-persist="helm" aria-controls="tabs-06-01" aria-selected="false">
 Helm
 &lt;/button>
 &lt;/li>
&lt;/ul>

&lt;div class="tab-content" id="tabs-6-content">
 &lt;div class="tab-body tab-pane fade show active"
 id="tabs-06-00" role="tabpanel" aria-labelled-by="tabs-06-00-tab" tabindex="6">
 &lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>dapr init -k --set dapr_scheduler.cluster.storageSize&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>16Gi --set dapr_scheduler.etcdSpaceQuota&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>16Gi
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
 &lt;div class="tab-body tab-pane fade"
 id="tabs-06-01" role="tabpanel" aria-labelled-by="tabs-06-01-tab" tabindex="6">
 &lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>helm upgrade --install dapr dapr/dapr &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>--version&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>1.16 &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>--namespace dapr-system &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>--create-namespace &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>--set dapr_scheduler.cluster.storageSize&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>16Gi &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>--set dapr_scheduler.etcdSpaceQuota&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>16Gi &lt;span style="color:#4e9a06">\
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&lt;/span>--wait
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>
 &lt;/div>
&lt;/div>

&lt;h4 id="增加现有调度器存储大小">增加现有调度器存储大小&lt;/h4>


&lt;div class="alert alert-warning" role="alert">
&lt;h4 class="alert-heading">警告&lt;/h4>

 并非所有存储提供商都支持动态卷扩展。
请参阅您的存储提供商文档以确定是否支持此功能，以及如果不支持该怎么办。

&lt;/div>

&lt;p>默认情况下，每个调度器会为每个副本创建一个大小为&lt;code>1Gi&lt;/code>的持久卷和持久卷声明，使用&lt;a href="https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-persisting-scheduler/#storage-class">默认的&lt;code>standard&lt;/code>存储类&lt;/a>。
这些将类似于以下内容，在此示例中我们以HA模式运行调度器。&lt;/p></description></item><item><title>部署到混合 Linux/Windows Kubernetes 集群</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-hybrid-clusters/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-hybrid-clusters/</guid><description>&lt;p>Dapr 支持在以下类型的 Kubernetes 集群上运行您的微服务：&lt;/p>
&lt;ul>
&lt;li>Windows&lt;/li>
&lt;li>Linux&lt;/li>
&lt;li>两者的组合&lt;/li>
&lt;/ul>
&lt;p>这在分阶段将遗留应用程序迁移到 Dapr Kubernetes 集群时特别有用。&lt;/p>
&lt;p>Kubernetes 使用 &lt;strong>节点亲和性&lt;/strong> 的概念来指定您的应用程序应在 Linux 节点还是 Windows 节点上启动。当部署到同时具有 Windows 和 Linux 节点的集群时，您必须为应用程序设置亲和性规则，否则 Kubernetes 调度器可能会将您的应用程序启动在错误类型的节点上。&lt;/p>
&lt;h2 id="先决条件">先决条件&lt;/h2>
&lt;p>在开始之前，设置一个具有 Windows 节点的 Kubernetes 集群。许多 Kubernetes 提供商支持自动配置启用 Windows 的 Kubernetes 集群。&lt;/p>
&lt;ol>
&lt;li>
&lt;p>按照您首选提供商的说明设置启用 Windows 的集群。&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://docs.microsoft.com/azure/aks/windows-container-cli">在 Azure AKS 上设置 Windows&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/windows-support.html">在 AWS EKS 上设置 Windows&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://cloud.google.com/kubernetes-engine/docs/how-to/creating-a-cluster-windows">在 Google Cloud GKE 上设置 Windows&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>设置集群后，验证 Windows 和 Linux 节点是否可用。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>kubectl get nodes -o wide
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aks-nodepool1-11819434-vmss000000 Ready agent 6d v1.17.9 10.240.0.4 &amp;lt;none&amp;gt; Ubuntu 16.04.6 LTS 4.15.0-1092-azure docker://3.0.10+azure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aks-nodepool1-11819434-vmss000001 Ready agent 6d v1.17.9 10.240.0.35 &amp;lt;none&amp;gt; Ubuntu 16.04.6 LTS 4.15.0-1092-azure docker://3.0.10+azure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>aks-nodepool1-11819434-vmss000002 Ready agent 5d10h v1.17.9 10.240.0.129 &amp;lt;none&amp;gt; Ubuntu 16.04.6 LTS 4.15.0-1092-azure docker://3.0.10+azure
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>akswin000000 Ready agent 6d v1.17.9 10.240.0.66 &amp;lt;none&amp;gt; Windows Server &lt;span style="color:#0000cf;font-weight:bold">2019&lt;/span> Datacenter 10.0.17763.1339 docker://19.3.5
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>akswin000001 Ready agent 6d v1.17.9 10.240.0.97 &amp;lt;none&amp;gt; Windows Server &lt;span style="color:#0000cf;font-weight:bold">2019&lt;/span> Datacenter 10.0.17763.1339 docker://19.3.5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;/ol>
&lt;h2 id="安装-dapr-控制平面">安装 Dapr 控制平面&lt;/h2>
&lt;p>如果您使用 Dapr CLI 或通过 Helm chart 安装，只需按照正常的部署程序进行：&lt;a href="https://v1-18.docs.dapr.io/zh-hans/getting-started/install-dapr-selfhost/#installing-Dapr-on-a-kubernetes-cluster">在 Kubernetes 集群上安装 Dapr&lt;/a>&lt;/p></description></item><item><title>在 Kubernetes Job 中运行 Dapr</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-job/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-job/</guid><description>&lt;p>Dapr sidecar 被设计为一个长期运行的进程。在 Kubernetes Job 的环境中，这种行为可能会阻碍作业的完成。&lt;/p>
&lt;p>为了解决这个问题，Dapr sidecar 提供了一个 &lt;code>Shutdown&lt;/code> 端点，用于关闭 sidecar。&lt;/p>
&lt;p>在运行一个基本的 Kubernetes Job 时，你需要调用 sidecar 的 &lt;code>/shutdown&lt;/code> 端点，以便优雅地停止 sidecar，并使作业被视为 &lt;code>Completed&lt;/code>。&lt;/p>
&lt;p>如果作业在没有调用 &lt;code>Shutdown&lt;/code> 的情况下完成，作业会处于 &lt;code>NotReady&lt;/code> 状态，而 &lt;code>daprd&lt;/code> 容器会一直运行下去。&lt;/p>
&lt;p>停止 Dapr sidecar 会导致容器中的就绪性和存活性探测失败。&lt;/p>
&lt;p>为了防止 Kubernetes 尝试重启你的作业，请将作业的 &lt;code>restartPolicy&lt;/code> 设置为 &lt;code>Never&lt;/code>。&lt;/p>
&lt;p>在调用 shutdown HTTP API 时，请确保使用 &lt;em>POST&lt;/em> HTTP 动词。例如：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">batch/v1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Job&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">job-with-shutdown&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">template&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">annotations&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/enabled&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/app-id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;with-shutdown&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">containers&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">job&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">image&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">alpine&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">command&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000;font-weight:bold">[&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;/bin/sh&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;-c&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;apk --no-cache add curl &amp;amp;&amp;amp; sleep 20 &amp;amp;&amp;amp; curl -X POST localhost:3500/v1.0/shutdown&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">]&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">restartPolicy&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Never&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>你也可以从任何 Dapr SDK 调用 &lt;code>Shutdown&lt;/code>。例如，对于 Go SDK：&lt;/p></description></item><item><title>操作指南：将 Pod 卷挂载到 Dapr sidecar</title><link>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-volume-mounts/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://v1-18.docs.dapr.io/zh-hans/operations/hosting/kubernetes/kubernetes-volume-mounts/</guid><description>&lt;p>Dapr sidecar 可以配置为挂载应用程序 Pod 上的任何 Kubernetes 卷。这些卷可以通过 &lt;code>daprd&lt;/code> (sidecar) 容器以只读或读写模式访问。如果配置了一个卷进行挂载但在 Pod 中不存在，Dapr 会记录一个警告并忽略该卷。&lt;/p>
&lt;p>有关不同类型卷的更多信息，请查看 &lt;a href="https://kubernetes.io/docs/concepts/storage/volumes/">Kubernetes 文档&lt;/a>。&lt;/p>
&lt;h2 id="配置">配置&lt;/h2>
&lt;p>您可以在部署的 YAML 文件中设置以下注解：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>注解&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>dapr.io/volume-mounts&lt;/code>&lt;/td>
 &lt;td>用于只读卷挂载&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>dapr.io/volume-mounts-rw&lt;/code>&lt;/td>
 &lt;td>用于读写卷挂载&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>这些注解是以逗号分隔的 &lt;code>volume-name:path/in/container&lt;/code> 对。请确保相应的卷在 Pod 规范中已定义。&lt;/p>
&lt;p>在官方容器镜像中，Dapr 以用户 ID (UID) &lt;code>65532&lt;/code> 运行。请确保挂载卷内的文件夹和文件对用户 &lt;code>65532&lt;/code> 可读写。&lt;/p>
&lt;p>虽然您可以在 Dapr sidecar 容器内的任何文件夹中挂载卷，但为了避免冲突并确保未来的兼容性，建议将所有挂载点放置在以下位置之一或其子文件夹中：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>位置&lt;/th>
 &lt;th>描述&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>/mnt&lt;/code>&lt;/td>
 &lt;td>推荐用于存储 Dapr sidecar 进程可读写的持久数据的卷。&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>/tmp&lt;/code>&lt;/td>
 &lt;td>推荐用于存储临时数据的卷，例如临时磁盘。&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="示例">示例&lt;/h2>
&lt;h3 id="基本部署资源示例">基本部署资源示例&lt;/h3>
&lt;p>在下面的 Deployment 资源示例中：&lt;/p>
&lt;ul>
&lt;li>&lt;code>my-volume1&lt;/code> 在 sidecar 容器内以只读模式挂载到 &lt;code>/mnt/sample1&lt;/code>&lt;/li>
&lt;li>&lt;code>my-volume2&lt;/code> 在 sidecar 容器内以只读模式挂载到 &lt;code>/mnt/sample2&lt;/code>&lt;/li>
&lt;li>&lt;code>my-volume3&lt;/code> 在 sidecar 容器内以读写模式挂载到 &lt;code>/tmp/sample3&lt;/code>&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">apiVersion&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">apps/v1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">kind&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Deployment&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">myapp&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">namespace&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">default&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">app&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">myapp&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">replicas&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#0000cf;font-weight:bold">1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">selector&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">matchLabels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">app&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">myapp&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">template&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">metadata&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">labels&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">app&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">myapp&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">annotations&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/enabled&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;true&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/app-id&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;myapp&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/app-port&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;8000&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/volume-mounts&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;my-volume1:/mnt/sample1,my-volume2:/mnt/sample2&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">dapr.io/volume-mounts-rw&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#34;my-volume3:/tmp/sample3&amp;#34;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">spec&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">volumes&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-volume1&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">hostPath&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">path&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">/sample&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-volume2&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">persistentVolumeClaim&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">claimName&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">pv-sample&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>- &lt;span style="color:#204a87;font-weight:bold">name&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">my-volume3&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">emptyDir&lt;/span>&lt;span style="color:#000;font-weight:bold">:&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>{}&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f8f8f8;text-decoration:underline">&lt;/span>&lt;span style="color:#000">...&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="使用本地文件-secret-存储自定义-secret-存储">使用本地文件 secret 存储自定义 secret 存储&lt;/h3>
&lt;p>由于任何类型的 Kubernetes 卷都可以附加到 sidecar，您可以使用本地文件 secret 存储从各种地方读取 secret。例如，如果您有一个运行在 &lt;code>10.201.202.203&lt;/code> 的网络文件共享 (NFS) 服务器，secret 存储在 &lt;code>/secrets/stage/secrets.json&lt;/code>，您可以将其用作 secret 存储。&lt;/p></description></item></channel></rss>