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应用。

大致步骤如下:

  1. 创建项目,(可选)引用对应语言的Dapr SDK

  2. 在VS Code中打开项目的工作区(Workspace)

  3. 在命令面板中输入“Remote-Containers: Add Development Container Configuration Files...”

  4. 在选择开发容器的时候,输入“dapr”来进行查找,选择对应的语言版本,比如“Dapr with C#”

  5. VS Code会自动给你的项目添加相关的Dockerfile和其他配置文件(比如“.devcontainer”文件夹)

  6. VS Code检测到.devcontainer文件夹后,会提示你是否要使用容器模式打开

  7. 通过容器模式打开后,会自动构建项目工作区的容器镜像,同时还会额外启动用于容器开发的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 # 卸载本机开发环境包括Redis和Zipkin容器实例
dapr uninstall --all # 卸载Kubernetes中的测试环境
dapr uninstall --kubernetes # 卸载Kubernetes中的生产环境
helm uninstall dapr -n dapr-system 

参考资料

[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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308033.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode704二分法:(左闭右闭+左闭右开)

前言 又重温了一遍<肖生客的救赎> 其中安迪的一句话一直回荡我的脑中&#xff1a;“人生可以归结为一种简单的选择&#xff1a;不是忙着活&#xff0c;就是忙着死。” 多深刻&#xff0c;多简单&#xff0c;又多令人深省&#xff0c; 哪有那么多选择 哪有那么多时间去花…

你真的理解事件绑定、事件冒泡和事件委托吗?

一文了解Web API中的事件绑定、事件冒泡、事件委托引言正文一、事件绑定1、事件和事件绑定时什么&#xff1f;2、事件是如何实现的&#xff1f;二、事件冒泡1、事件模型2、事件模型解析&#xff08;1&#xff09;捕获阶段&#xff08;2&#xff09;目标阶段&#xff08;3&#…

欢迎来到 C# 9.0(Welcome to C# 9.0)

翻译自 Mads Torgersen 2020年5月20日的博文《Welcome to C# 9.0》&#xff0c;Mads Torgersen 是微软 C# 语言的首席设计师&#xff0c;也是微软 .NET 团队的项目群经理。C# 9.0 正在成形&#xff0c;我想和大家分享一下我们对下一版本语言中添加的一些主要特性的想法。对于 C…

367. 有效的完全平方数(二分法)

一&#xff1a;题目 二:思路 完全平方数:若一个数能表示成某个整数的平方的形式&#xff0c;则称这个数为完全平方数 思路:1.我们将num先折半,因为它是某个整数的平方&#xff0c;而这个数的范围肯定不会超过num的一半 2.那么这就相当于在[left,num/2]中查找某个数&#xff0c…

译 | Azure 应用服务中的程序崩溃监控

点击上方蓝字关注“汪宇杰博客”原文&#xff1a;Yun Jung Choi, Puneet Gupta翻译&#xff1a;汪宇杰应用程序崩溃经常发生。崩溃是指代码中的异常未得到处理并终止进程。这些未处理的异常也称为二次机会异常&#xff08;second chance exceptions&#xff09;。当您的应用程序…

使用Seq搭建免费的日志服务

Seq简介Seq是老外开发的一个针对.NET平台非常友好的日志服务。支持容器部署&#xff0c;提供一个单用户免费的开发版本。官网&#xff1a;https://datalust.co/seq使用文档&#xff1a;https://docs.datalust.co/docsSeq主体功能如下所示&#xff1a;支持主流的编程语言&#x…

leetcode27:移除元素(暴力+双指针)

一&#xff1a;题目 二&#xff1a;暴力双指针 1&#xff1a;暴力解法 (1):思路 1.在数组当中 我们想要删除一个元素 得靠覆盖也就是后面的元素往前覆盖其想要删除的元素 但是注意的是我们真实的数组中的元素个数是不变的 因为我们只是将后面的元素移到起前面 并未真正的删除…

三分钟Docker-推送本地镜像到仓库

在上篇文章中&#xff0c;我们完成了应用程序容器化&#xff0c;把webapi项目构建镜像并容器化运行。本文将会演示如何把自己构建的镜像上传到docker官网的仓库和自己私有仓库本地镜像推送到官网的registry1.创建仓库点击Docker Desktop图标->Repositories-》create 跳转到…

你知道304吗?图解强缓存和协商缓存

http协议—常见状态码&#xff0c;请求方法&#xff0c;http头部&#xff0c;http缓存一、http状态码1、引例阐述2、状态码分类3、常见状态码4、关于协议和规范二、http 方法1、传统的methods2、现在的methods3、Restful API&#xff08;1&#xff09;Restful API是什么&#x…

leetcode844. 比较含退格的字符串(栈+双指针)

一:题目 二:思路代码 1:利用栈 (1):思路 1.利用栈 我们将字符串中的单个元素都入栈 当遇到’#的时候将将栈顶元素弹出 (2):上码&#xff08;方法一&#xff09; class Solution { public:/**思路:1.利用栈 我们将字符串中的单个元素都入栈 当遇到#的时候将将栈顶元素弹出*…

efcore技巧贴-也许有你不知道的使用技巧

前言.net 环境近些年也算是稳步发展。在开发的过程中&#xff0c;与数据库打交道是必不可少的。早期的开发者都是DbHelper一撸到底&#xff0c;到现在的各种各样的ORM框架大行其道。孰优孰劣谁也说不清楚&#xff0c;文无第一武无第二说的就是这个理。没有什么最好的&#xff0…

关于前端性能优化问题,认识网页加载过程和防抖节流

前端性能优化—网页加载过程、性能优化方法、防抖和节流一、网页加载过程1、加载资源的形式2、加载资源的过程3、渲染页面的过程4、关于window.onload 和 DOMContentLoaded二、性能优化1、性能优化原则2、性能优化的方法3、让加载更快4、让渲染更快三、防抖和节流1、防抖 debou…

javax.net.ssl.SSLHandshakeException: No appropriate protocol

一:报错 二:解决 找到jdk 1.8安装目录&#xff0c;找到C:\Program Files\Java\jre里面的lib\security 下面有个java.security将jdk.tls.disabledAlgorithms后面的SSLv3, TLSv1, TLSv1.1都删除掉.&#xff08;大概位置是在700多行&#xff09; 三:上方并未解决的 我的jdk是这…

『软件工程9』结构化系统分析——解决软件“做什么”问题

结构化系统分析——解决软件“做什么”问题一、系统分析的任务和过程1、系统分析的任务2、系统分析的过程&#xff08;1&#xff09;问题识别&#xff08;2&#xff09;分析与综合&#xff08;3&#xff09;编制文档&#xff08;4&#xff09;系统分析评审二、结构化分析方法1、…

.NET5.0 Preview 8 开箱教程

.NET5.0 Preview 8 开箱教程前言首先&#xff0c;看到 .NET5.0 Preview 8 发布后&#xff0c;作为一枚基层应用开发人员&#xff0c;很想要体验一下新版本的魅力&#xff1b;这可能就是程序员对新技术的一种执着吧。其实从官方宣布 .NETCore 将更名为 .NET5 开始&#xff0c;我…

leetcode977. 有序数组的平方(暴力+双指针)

一:题目 二:暴力双指针 1:暴力 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int> v;for(int num : nums){int temp pow(num,2);v.push_back(temp);} sort(v.begin(),v.end());return v;} };2:双指针 思路:1.利…

『软件工程10』结构化系统分析:数据流图和字典案例分析

结构化系统分析——数据流图和数据字典案例分析一、数据流图案例分析1、案例1&#xff1a;商店业务管理系统2、案例2&#xff1a;学籍管理系统3、案例3&#xff1a;大型企业数据中心二、数据字典案例分析1、案例1&#xff1a;学籍管理系统三、写在最后接 上一篇文章的内容&…

MongoDB最新4.2.7版本三分片集群修改IP实操演练

背景重新组网&#xff0c;需要对现有MongoDB分片集群服务器的IP进行更改&#xff0c;因此也需要对MongoDB分片集群的IP也进行相应的更新&#xff0c;而MongoDB分片集群的IP修改不能单纯的通过配置来进行&#xff0c;需要一番折腾后才能正常更新&#xff0c;这里对整个MongoDB集…

浅谈Web前端安全策略xss和csrf,及又该如何预防?

Web前端安全策略xss和csrf的攻击和防御一、XSS跨站请求攻击1、什么是XSS2、场景模拟3、XSS的攻击类型4、如何防御XSS二、XSRF跨站请求伪造1、什么是csrf2、场景模拟&#xff08;1&#xff09;场景一&#xff08;2&#xff09;场景二3、CSRF的特点4、CSRF攻击方式5、CSRF常见的攻…

leetcode209. 长度最小的子数组(暴力+滑动窗口)

一:题目 二:暴力滑动窗口 1:暴力解法 class Solution { public:int min (int a ,int b){return a < b ? a : b;}int minSubArrayLen(int target, vector<int>& nums) {int minx 100001;for(int i 0; i < nums.size(); i){vector<int> v;int sum nu…