Dapr微服务应用开发系列1:环境配置
题记:上篇Dapr系列文章简要介绍了Dapr,这篇来谈一下开发和运行环境配置
本机开发环境配置
安装Docker
为了方便进行Dapr开发,最好(其实不一定必须)首先在本机(开发机器)上安装Docker。安装方式可以参考Docker的官方文档:https://docs.docker.com/install/。
如果你是Windows平台,那么需要选择Linux容器模式。对于我这样的Windows 10用户而言,个人建议最好的方式就是把Windows 10升级到2004,并启用WSL2,然后启用Docker Desktop WSL 2 backend[1]。这种方式可以获得很好的用户体验和性能。
安装CLI
通过如下脚本在不同平台安装最新的CLI(Dapr命令行工具):
- Windows:
powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"
默认会安装到 c:\dapr 目录
- Linux:
wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
默认会安装到 /usr/local/bin 目录
- MacOS
curl -fsSL https://raw.githubusercontent.com/dapr/cli/master/install/install.sh | /bin/bash
默认会安装到 /usr/local/bin 目录
或者通过Homebrew来安装:brew install dapr/tap/dapr-cli
如果你想手动安装CLI,比如希望安装不同版本或者安装到不同目录。那么可以从这里(https://github.com/dapr/cli/releases)直接下载平台对应的二进制文件并解压到适合的地方,并在PATH中注册这个目录。
安装Runtime
在本机安装Dapr运行时分为两种模式,一种是完整模式,一种是简易模式:
- 完整模式:需要Docker环境,运行
dapr init,会自动下载Dapr的运行时daprd,并在Docker中启动3个容器:- dapr_placement:Image为“daprio/dapr”,用于Dapr的Actor应用的注册
- dapr_zipkin:Image为“openzipkin/zipkin”,用于分布式跟踪的处理
- dapr_redis:Image为“redis”,用于状态存储和发布订阅处理
- 简易模式:不需要Docker环境,运行
dapr init --slim,同样会自动下载Dapr的运行时,并下载placement服务的二进制文件。
两种模式下,有些配置也有所不同:
- 完整模式:会在Linux/MacOS的
$HOME/.dapr/components目录或Windows的%USERPROFILE%\.dapr\components目录下面创建3个默认组件配置文件:pubsub.yaml使用redis容器作为发布订阅组件、statestore.yaml使用redis容器作为状态存储组件和zipkin.yaml把分布式跟踪的信息导出到zipkin容器;并添加Linux/MacOS的$HOME/.dapr/config.yaml或Windows的%USERPROFILE%\.dapr\config.yaml的默认配置文件,重点配置了分布式跟踪的采样率为1。 - 简易模式:虽然会创建默认
components目录,但是不会创建默认组件配置文件。后续运行的时候,你需要自行创建默认组件配置文件或者指定服务的自定义组件配置文件。
容器开发环境配置
如果不想在本机安装Dapr的CLI和Runtime,还可以利用Visual Studio Code Remote - Containers[2]的强大功能来实现开发环境的容器化。
Dapr为各种支持的开发语言默认提供了开发容器,方便你把任何项目转换为Dapr应用。
大致步骤如下:
- 创建项目,(可选)引用对应语言的Dapr SDK
- 在VS Code中打开项目的工作区(Workspace)
- 在命令面板中输入“Remote-Containers: Add Development Container Configuration Files...”
- 在选择开发容器的时候,输入“dapr”来进行查找,选择对应的语言版本,比如“Dapr with C#”
- VS Code会自动给你的项目添加相关的Dockerfile和其他配置文件(比如“.devcontainer”文件夹)
- VS Code检测到.devcontainer文件夹后,会提示你是否要使用容器模式打开
- 通过容器模式打开后,会自动构建项目工作区的容器镜像,同时还会额外启动用于容器开发的placement和zipkin容器实例(名称为:dapr_placement_dapr-dev-container和dapr_zipkin_dapr-dev-container)
开发容器如下图所示:

使用这种开发容器带来的好处就是:整个Dapr开发的依赖环境可以通过Dockerfile来自动配置完成。
测试与生产环境配置
虽然Dapr可以运行到任意托管环境,不过目前最自然的选择还是发布到 Kubernetes 集群当中。
首先,你需要配置好一个Kubernetes集群,建议使用Azure Kubernetes Service(AKS),基本可以一键创建好集群[3]。
在做好kubectl和Kubernetes集群的连接之后,就可以开始安装Dapr了。
如果是配置测试环境,那么只需要执行如下命令就可以完成:
dapr init -k
如果要配置生产环境,那么建议使用helm3来进行安装:
helm repo add dapr https://daprio.azurecr.io/helm/v1/repo
helm repo update
kubectl create namespace dapr-system
helm install dapr dapr/dapr --namespace dapr-system
Dapr安装到Kubernetes集群之后,会启动如下Pod:
- dapr-operator: 用来管理Dapr组件的更新和Dapr的kubernetes服务端点(比如状态存储、发布订阅等)
- dapr-sidecar-injector: 用来把Dapr运行时注入到被标记了的应用Pod里面(即把Dapr运行时作为sidecar容器注入到Pod当中)
- dapr-placement: 管理Dapr的Actor应用注册
- dapr-sentry: 管理服务之间的mTLS,并作为一个证书CA
总结
至此,Dapr的开发、测试和生产环境就配置完成了,接下来就是进入到开发阶段了。
当然,如果你需要卸载Dapr环境的话,只需要运行如下命令:
dapr uninstall //卸载本机开发环境
dapr uninstall --all //卸载本机开发环境包括Redis和Zipkin容器实例
dapr uninstall --kubernetes //卸载Kubernetes中的测试环境
helm uninstall dapr -n dapr-system //卸载Kubernetes中的生产环境
参考资料
[1] Docker Desktop WSL 2 backend: https://docs.docker.com/docker-for-windows/wsl/
[2] Visual Studio Code Remote - Containers: https://code.visualstudio.com/docs/remote/containers
[3] Quickstart: Deploy an Azure Kubernetes Service cluster using the Azure CLI: https://docs.microsoft.com/en-us/azure/aks/kubernetes-walkthrough
Dapr微服务应用开发系列1:环境配置的更多相关文章
- Dapr微服务应用开发系列2:Hello World与SDK初接触
题记:上篇介绍了Dapr的环境配置,这次我们来动手尝试一下Dapr应用的开发 Hello World Dapr应用的Hello World其实和其他的Hello World一样简单: 首先用你喜欢的语 ...
- Dapr微服务应用开发系列0:概述
题记:Dapr是什么,Dapr包含什么,为什么要用Dapr. Dapr是什么 Dapr(Distributed Application Runtime),是微软Azure内部创新孵化团队的一个开源项目 ...
- Dapr微服务应用开发系列3:服务调用构件块
题记:这篇开始逐一深入介绍各个构件块,从服务调用开始 原理 所谓服务调用,就是通过这个构件块让你方便的通过HTTP或者gRPC协议同步调用其他服务的方法,这些方法也是通过HTTP或者gRPC来暴露的. ...
- Blazor+Dapr+K8s微服务之开发环境调试
1 安装Dapr开发调试环境 1.1 Dapr 完整安装模式不支持开发调试 在上一篇随笔<Blazor+Dapr+K8s微服务之服务调用>中,我们通过为每个 ...
- 【新书推荐】《ASP.NET Core微服务实战:在云环境中开发、测试和部署跨平台服务》 带你走近微服务开发
<ASP.NET Core 微服务实战>译者序:https://blog.jijiechen.com/post/aspnetcore-microservices-preface-by-tr ...
- Apollo-open-capacity-platform 微服务能力开发平台 (转)
来自大佬的apollo整合微服务的教程:欢迎大家点评和star,链接如下:https://gitee.com/owenwangwen/open-capacity-platform 官方demo链接:h ...
- 微服务项目开发学成在线_day02 CMS前端开发
1 Vue.js与Webpack研究 开发版的浏览器:https://www.google.cn/intl/zh-CN/chrome/dev/ 前端的开发框架:微服务项目开发学成在线_Vue.js与W ...
- CODING DevOps 微服务项目实战系列第一课,明天等你
CODING DevOps 微服务项目实战系列第一课<DevOps 微服务项目实战:DevOps 初体验>将由 CODING DevOps 开发工程师 王宽老师 向大家介绍 DevOps ...
- CODING DevOps 微服务项目实战系列最后一课,周四开讲!
随着软件工程越来越复杂化,如何在 Kubernetes 集群进行灰度发布成为了生产部署的"必修课",而如何实现安全可控.自动化的灰度发布也成为了持续部署重点关注的问题.CODING ...
随机推荐
- bash5.0参考手册
Bash Reference Manual a.summary-letter { text-decoration: none } blockquote.indentedblock { margin-r ...
- 这难道不是.NET5 的bug? 在线求锤?
hello,最近在对一个使用.NET5项目的认证授权系统进行重构,对.NET 5的授权中间件的源码有些看法. 也希望同学们能帮我理解. 一个朴素的需求 这是一个api项目,默认所有的api都需要授权, ...
- java虚拟机入门(五)- 常见垃圾回收器及jvm实现
上节讲完了垃圾回收的基础,包括java的垃圾是什么,如何寻找以及常用的垃圾回收算法,那么那么多的理论知识讲完了,具体是什么样的东西在做着回收垃圾的事情呢?我们接下来就好好聊聊jvm中常用的垃圾回收器. ...
- Java层面上下文切换
前言 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的"同一时间点",而是 多个任务 ...
- 设置一个两边固定中间自适应的css
1.两边浮动,中间自动宽度 给左右两个盒子设置左右浮动,中间的盒子不设置宽度,左右两边边距为左右盒子的宽度,中间盒子的位置必须写在右盒子下面,不然会把右盒子挤下去 如: <div class ...
- 它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程
[Linux编程]守护进程(daemon)详解与创建_mick_seu的博客-CSDN博客_linux daemon https://blog.csdn.net/woxiaohahaa/article ...
- is_callable Callbacks / Callables What is a “callable”? 可调用 回调函数
PHP: Callback / Callable 类型 - Manual https://www.php.net/manual/zh/language.types.callable.php Callb ...
- 从零开始学Java (三)基础语法
1. 基本数据类型 整数类型:byte,short,int,long 浮点数类型:float,double 字符类型:char 布尔类型:boolean java最小单位是bit,一个byte占用8个 ...
- WebServices 与 Web API 的区别
WebServices : WebServices 是可以通过 Internet 访问并通过 XML 编码规范其通信的任何服务. 客户通过发送请求(大部分是 XML消息)来召唤 WebServices ...
- P2573 [SCOI2012]滑雪 题解
下午花了三个小时肝这道题,心态差点爆炸! 下面是分析: 1 题目要求: 2 求最小生成树 3 但是 4 - a是从1号点开始的 --> 如果以后的某个点比一号高,则不可能到达 5 - a只能从高 ...