尧图精选

Dapr 1.1.0 版本全解读:Job 场景 sidecar 注入、shutdown API、环境变量注入与 ETag 强制校验

🕒 发布时间:2026/9/11 16:59:13 📁 来源:尧图网络
Dapr 1.1.0 版本全解读Job 场景 sidecar 注入、shutdown API、环境变量注入与 ETag 强制校验【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/daprDapr 1.1.0 是 Dapr 在 1.0 GA 之后的一个重要功能版本围绕生产化体验做了大量打磨为 Kubernetes Job/CronJob 场景补齐了 sidecar 生命周期管理新增shutdownAPI、支持通过注解为 sidecar 注入环境变量、并对 Actor 状态存储强制要求 ETag 支持。本文以本仓库dapr/dapr中 v1.1.0 发布说明 为骨架结合仓库源码梳理该版本的核心能力、组件与 SDK 更新并给出本地与 Kubernetes 两套完整的升级实操步骤。版本亮点速览1.1.0 版本的核心变化可以概括为以下几条Kubernetes Job 场景的 sidecar 注入新增预览特性支持为 K8s Job 注入 Dapr sidecar并配套新增shutdownAPI允许应用在任务完成后主动关闭 sidecar对应 issue #2689sidecar 环境变量定义支持通过dapr.io/env等注解为注入的 sidecar 容器定义环境变量对应 issue #2508Actor 状态存储 ETag 强制要求新增状态存储必须支持 ETag否则 Actor 状态存储无法启用对应 issue #2890安全加固Dapr API Token 不再出现在遥测 trace 中对应 issue #2974新增 Local Storage Binding对应 components-contrib issue #752pubsub 组件一致性测试覆盖为 Pulsar、MQTT、Hazelcast、RabbitMQ 增加了 conformance testsSDK 生态.NET SDK 支持 Actor Timer/Reminder 单测与配置层级嵌套Python SDK 增加DAPR_HTTP_TIMEOUT_SECONDS与 shutdown 支持Go SDK 增加 shutdown 能力。若你是 Dapr 新手建议先通过官方 Getting Started 教程熟悉基础概念本篇文章聚焦 1.1.0 的具体能力与升级路径。Runtime 核心改进与源码印证1. 为 Kubernetes Job 而生shutdownAPI在 Job/CronJob 这类跑完即走的负载下sidecar 的退出时机一直是个痛点任务处理完毕后 sidecar 如果没有随之退出Job 将无法正常完成。1.1.0 以预览特性方式引入shutdownAPI允许应用在业务处理完毕后主动通知 sidecar 优雅退出。从当前仓库源码可以看到该 API 的完整实现链路HTTP 侧pkg/api/http/shutdown.go中通过constructShutdownEndpoints()注册了POST /v1.0/shutdown端点Handler 为onShutdown内部转发到a.universal.Shutdown(...)。这里还支持通过请求头dapr-force-shutdown对应常量ForceShutdownMetadataKey强制关闭gRPC 侧pkg/api/grpc/endpoints.go中将daprRuntimePrefix v1.Dapr/Shutdown注册为shutdown.v1端点统一实现pkg/api/universal/shutdown.go中的Universal.Shutdown是核心逻辑调用ShutdownFn触发 sidecar 的优雅退出流程isForceShutdown负责解析 metadata 中的dapr-force-shutdown标记大小写不敏感相关行为由 shutdown_test.go 覆盖。调用方式如下# HTTP curl -X POST http://localhost:3500/v1.0/shutdown # 强制关闭忽略排空等保护逻辑 curl -X POST http://localhost:3500/v1.0/shutdown -H dapr-force-shutdown: truegRPC 客户端则调用Dapr.Shutdown方法。相应地Python SDKissue #210与 Go SDKPR #151也在 1.1.0 前后补齐了 shutdown 支持方便各类语言在任务末尾统一触发。2. 为 sidecar 注入环境变量以前注入到 Pod 中的 daprd sidecar 容器难以定制化配置如代理设置、调试开关等。1.1.0 起可以在 Pod 注解中直接定义 sidecar 的环境变量。仓库中 injector 的注解定义pkg/injector/annotations/annotations.go与 patcher 配置结构pkg/injector/patcher/sidecar.go印证了这一点// pkg/injector/annotations/annotations.go KeyEnv dapr.io/env KeyEnvFromSecret dapr.io/env-from-secret// pkg/injector/patcher/sidecar.go Env string annotation:dapr.io/env EnvFromSecret string annotation:dapr.io/env-from-secret使用方式是在 Deployment 的 Pod template 注解中加入dapr.io/env以逗号分隔多个键值对apiVersion: apps/v1 kind: Deployment metadata: name: myapp namespace: default spec: template: metadata: annotations: dapr.io/enabled: true dapr.io/app-id: myapp dapr.io/env: FOObar,HTTP_PROXYhttp://proxy.example.com:8080 spec: containers: - name: myapp image: myapp:latest注入后sidecar 容器内即可读取到FOO与HTTP_PROXY环境变量。环境变量的值还可以来自 Secret使用dapr.io/env-from-secret注解引用同一个 Secret 中的键值对避免将敏感信息明文写入注解。3. Actor 状态存储ETag 从可选变为必须为避免 Actor 状态并发读写导致的覆盖问题1.1.0 起强制要求 Actor 使用的状态存储必须支持 ETag 与事务Transactional。若所选状态存储不支持这两个特性Actor 状态存储将直接判定为未配置。仓库中 pkg/actors/state/state.go 的stateStore()方法正是这一校验的实现store, ok : storeS.(Backend) if !ok || !contribstate.FeatureETag.IsPresent(store.Features()) || !contribstate.FeatureTransactional.IsPresent(store.Features()) { return , nil, errors.New(errStateStoreNotConfigured) }即状态存储必须同时声明支持FeatureETag与FeatureTransactional否则返回errStateStoreNotConfigured。ETag 作为行的版本令牌贯穿于 Actor 状态读写见 pkg/actors/api/api.go 中ETag *string字段的定义写入时携带 ETag服务端据此做乐观并发控制版本不匹配则拒绝写入。对使用者的影响请确保 Actor 状态存储组件版本已升级到支持 ETag 的版本如 Redis、MongoDB 等主流存储组件在 1.1.0 均已支持。本次组件侧也专门修复了 GetResponse 在无 ETag 时返回 nil 的问题components-contrib issue #731。4. 安全与健壮性修复API Token 不再进 traceissue #2974DAPR_API_TOKEN此前可能随请求头被 telemetry 采样记录1.1.0 在追踪链路中将其排除避免凭据泄漏不再覆盖已有的 X-Forwarded 头issue #2846Runtime 只会在请求头不存在时才写入 X-Forwarded 相关头避免破坏用户设置或上游代理信息组件热更新竞态修复issue #2932修复 Runtime 读写组件的竞态条件同时修复grpc.Manager的 map 读写竞态PR #2915健康检查优化PR #2781healthz 持续检查失败状态并返回 failure便于更早暴露异常状态键校验PR #2835确认状态 key 不包含||分隔符避免键冲突fasthttp 路由升级PR #2863修复路径中/的处理问题sidecar 镜像拉取策略改为 IfNotPresentPR #2965减少重复拉取、加快注入速度fswatcher 修复PR #2777修复文件监听器的fmask error处理scope 容错增强PR #2779提高资源定义如 allowlist 规则的容错性升级到 Go 1.16PR #2819构建工具链整体升级。5. 输入绑定响应传播与其他新能力输入绑定支持响应传播issue #2628输入绑定处理完成后可以将处理结果作为对上游调用方的响应返回打通事件消费 → 处理 → 响应的链路加载前打印组件列表issue #2723daprd 在加载组件前先输出组件清单日志便于排查组件装配问题Helm 安装冲突修复issue #2651避免与 Vault 已有的role-tokenreview-bindingClusterRoleBinding 冲突并在 chart 版本未更新时跳过推送PR #2750度量服务器启动修复issue #2677即使配置中禁用了 metrics也不再因地址占用导致 daprd 启动失败。Dapr CLI 更新JSON 日志输出选项issue #515daprCLI 增加 JSON 格式日志便于与日志采集系统对接--wait标志issue #597dapr init与dapr upgrade支持--wait命令会等待所有 Pod 就绪后才返回适合 CI/CD 场景状态检查 panic 修复issue #609修复dapr status在遇到 Pending 容器时的 panic升级后 CRD 丢失修复issue #622修复dapr upgrade后 CRD 被删除的问题Windows 退出码修复issue #631Windows 下dapr stop返回非零退出码的问题得到修复。Components 更新1.1.0 在组件生态上同样有不少收获主要来自 dapr/components-contribAzure Blob Storage Binding 支持 blob 删除issue #681Redis PubSub增加消息重新投递redelivery与更优的并发设置issue #710并修复 pubsub 关闭时的 bugPR #769MQTT增加消息错误重试并确认已处理消息的 ackissue #720Hazelcast增加消息错误重试issue #723MongoDB 状态存储支持eTagissue #726AWS SSM Parameter Store 作为 Secret Storeissue #746新增 AWS Systems Manager Parameter Store 组件Local Storage Bindingissue #752支持读写本地文件系统的绑定组件适合自托管/边缘场景GCP Pub/Sub 重构PR #760组件内部实现重构提升可维护性CosmosDB 状态组件修复存储byte[]值的问题issue #745依赖清理移除github.com/satori/go.uuid依赖issue #703。SDK 更新速览.NET SDKActor Timer/Reminder 可单元测试issue #575支持配置层级嵌套issue #615与嵌套分隔符配置issue #627修复 CloudEvents 中 data 字段非 JSON 内容的处理issue #592补充 docker-compose、Tye 等本地开发选项与 Actor 依赖注入文档Python SDK新增DAPR_HTTP_TIMEOUT_SECONDS配置项issue #162新增 shutdown 支持issue #210Go SDK新增 shutdown 能力PR #151并修复若干文档错误。升级到 Dapr 1.1.0本仓库为 Dapr 主仓库dapr/dapr版本发布与 CLI/Helm chart 配套发布以下命令中的 CLI 与 Helm chart 需从对应发布渠道获取。本地 / 自托管升级使用当前已安装的 CLI 卸载 Dapr会移除$HOME/.dapr目录、二进制文件以及dapr_redis、dapr_placement、dapr_zipkin容器Linux 用户若 docker 需要 sudo 则加 sudodapr uninstall --all下载最新 CLI 并放入 PATH或参考官方安装 CLI 的指引然后指定 1.1.0 版本初始化dapr init --runtime-version1.1.0等待安装完成后校验版本$ dapr --version CLI version: 1.1.0 Runtime version: 1.1.0Kubernetes 集群升级K8s 环境支持零停机升级可通过 Dapr CLI 或 Helm 3 完成。方式一使用 CLI 升级dapr upgrade --runtime-version 1.1.0 -k等待操作完成后用dapr status -k检查状态。注意升级后请务必重启你的 Deployment让业务 Pod 重新注入新版本 sidecar。升级排查CLI 路径有一个已知问题如果集群历史上安装过早于 1.0.0-rc.2 的版本个别升级路径可能残留不兼容的 CustomResourceDefinition报错形如❌ Failed to upgrade Dapr: Warning: kubectl apply should be used on resource created by either kubectl create --save-config or kubectl apply The CustomResourceDefinition configurations.dapr.io is invalid: spec.preserveUnknownFields: Invalid value: true: must be false in order to use defaults in the schema解决办法是先用兼容版本的 CRD 文件替换kubectl replace -f https://raw.githubusercontent.com/dapr/dapr/commit/charts/dapr/crds/configuration.yaml将commit替换为发布说明中指定的 1.1.0 对应 commit5a15b3e0f093d2d0938b12f144c7047474a290fe。替换后再重新执行dapr upgrade --runtime-version 1.1.0 -k。方式二使用 Helm 升级helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update helm upgrade dapr dapr/dapr --version 1.1.0 --namespacedapr-system --wait同样完成后用dapr status -k确认并重启业务 Deployment 以加载新 sidecar。全新安装使用 Helm 3 全新安装helm repo add dapr https://dapr.github.io/helm-charts/ helm repo update kubectl create namespace dapr-system helm install dapr dapr/dapr --version 1.1.0 --namespace dapr-system --wait或者直接用 CLIdapr init --runtime-version1.1.0 -k安装后验证检查控制面 Pod 是否健康$ dapr status -k NAME NAMESPACE HEALTHY STATUS REPLICAS VERSION AGE CREATED dapr-dashboard dapr-system True Running 1 0.6.0 15s 2021-03-31 13:07.39 dapr-sidecar-injector dapr-system True Running 1 1.1.0 15s 2021-03-31 13:07.39 dapr-sentry dapr-system True Running 1 1.1.0 15s 2021-03-31 13:07.39 dapr-operator dapr-system True Running 1 1.1.0 15s 2021-03-31 13:07.39 dapr-placement dapr-system True Running 1 1.1.0 15s 2021-03-31 13:07.39确认控制面就绪后对业务 Deployment 执行滚动重启以拾取新版本 sidecarkubectl rollout restart deploy/deployment-nameBreaking ChangesNone.1.1.0 不引入破坏性变更可从 1.0.x 平滑升级但请注意上述对 Actor 状态存储 ETag 支持的强制性要求——如果你的 Actor 状态存储组件不支持 ETag需要在升级前更换或升级组件这属于运行行为层面的约束而非 API 破坏性变更。小结Dapr 1.1.0 是从可用到好用的一版shutdownAPI 打通了 Job 场景的 sidecar 生命周期闭环dapr.io/env注解让 sidecar 配置变得可编程ETag 强制校验则从机制上避免了 Actor 状态并发覆盖。配合组件生态的补齐MongoDB ETag、AWS SSM、Local Storage 等与 SDK 的测试友好化改进这一版本为后续 1.x 系列的功能迭代奠定了坚实基础。【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →