.NET项目在k8s中运行的Dapr持续集成方法
发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,本文小编为大家详细介绍".NET项目在k8s中运行的Dapr持续集成方法",内容详细,步骤清晰,细节处理妥当,希望这篇".NET项目在k8s中运行的Dapr持续集成方法"文章能帮助大家解决疑惑,下面跟
千家信息网最后更新 2025年02月02日.NET项目在k8s中运行的Dapr持续集成方法
本文小编为大家详细介绍".NET项目在k8s中运行的Dapr持续集成方法",内容详细,步骤清晰,细节处理妥当,希望这篇".NET项目在k8s中运行的Dapr持续集成方法"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
注:本文中主要讨论 .NET6.0项目在 k8s 中运行的 Dapr 的持续集成流程, 但实际上不是Dapr的项目部署到K8s也是相同流程,只是k8s的yaml配置文件有所不同
流程选择
基于 Dapr 的项目持续集成包含以下流程
编译并打包项目
构建 Dockerfile,并推送镜像
push image
至私有仓库准备 k8s 部署的配置文件
通过 kubectl 部署镜像至 k8s 中
这里面有多种方案
- | Pipeline的操作 | Publish的操作 | 优点 | 缺点 |
---|---|---|---|---|
1. 直接BuildImage并发布 | 1. 直接使用 Docker Build Image 2. push image 3.复制Yaml至Artifacts | K8s 直接发布 对应版本的yaml + 指定Image | 直接,操作简单 | 1. 产生大量不必要的Image 2.持续集成消耗时间较长3.每次持续集成都有Image产生 |
2. Publish时再进行Build | 1. 仅 dotnet publish zip | 1. Build Image / Push Image (可选 )2. K8S 部署+指定Image | 单次部署减慢,多次增快 | 部署过程会比直接接取镜像慢 |
3. 仅发布 Zip,并Build一个使用Volume的专署镜像 | 仅 dotnet publish zip | 使用编译好的镜像修改Volume参数 | 快 | 跨环境部署时会导致对于文件系统依赖过重 |
鉴于以上优缺点,最终我选择了第二种
折衷方案,这种方案既不影响持续集成的速度,也不会产生过多的镜像,只是在部署时会产生多余的镜像构建时间。
项目结构
每个要发布的API的 project 文件夹中增加以下文件
dapr.yaml
Dockerfile
dapr.yaml
kind: DeploymentapiVersion: apps/v1metadata: name: demo namespace: dapr-api labels: app: .api service: demospec: replicas: 1 selector: matchLabels: service: demo template: metadata: labels: app: .api service: demo annotations: dapr.io/enabled: "true" dapr.io/app-id: "demo-api" dapr.io/app-port: "80" dapr.io/log-as-json: "true" spec: containers: - name: demo-api image: 仓库地址/镜像名:220310.13 ports: - name: http containerPort: 80 protocol: TCP imagePullPolicy: IfNotPresent---kind: ServiceapiVersion: v1metadata: name: demo-api namespace: dapr-api labels: app: .api service: demospec: type: NodePort selector: service: demo ports: - protocol: TCP port: 80 targetPort: 80 nodePort: 30004
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS finalWORKDIR /appEXPOSE 80COPY ["./projectfolder", "/app"]ENTRYPOINT ["dotnet", "projectdll.dll"]
这两个文件需要每个项目不同,后面在编译和部署流程中会用到。
Pipelines 持续集成的配置文件
trigger: batch: truepool: name: Defaultname: $(Date:yy)$(Date:MM)$(Date:dd)$(Rev:.r)variables: BuildConfiguration: 'Release'steps:- task: UseDotNet@2 displayName: 'Check and Install .NET SDK 6.0' inputs: version: '6.0.x' includePreviewVersions: false- task: DotNetCoreCLI@2 displayName: 'Publish to zip' inputs: command: publish publishWebProjects: false projects: './src/projectfolder/project.csproj' arguments: '--configuration $(BuildConfiguration) --output $(build.artifactstagingdirectory) -v n' zipAfterPublish: false workingDirectory: '$(Build.SourcesDirectory)/src'## 复制上文中的两个文件到 Artifact- task: CopyFiles@2 displayName: 'Copy dapr.yaml to: $(build.artifactstagingdirectory)' inputs: SourceFolder: './src/${{ parameters.project }}/' Contents: | Dockerfile dapr.yaml TargetFolder: '$(build.artifactstagingdirectory)'- task: PublishBuildArtifacts@1 displayName: 'Publish Artifact' inputs: PathtoPublish: '$(build.artifactstagingdirectory)'
Release 发布流程配置文件
发布流程新建两个作业
作业1 Build Image
variables: image: '自定义镜像名'steps:- task: Docker@2 displayName: buildAndPush inputs: containerRegistry: harbor repository: '$(image)' Dockerfile: '$(System.DefaultWorkingDirectory)/_dapr-demo/drop/Dockerfile' tags: '$(Build.BuildNumber)'
作业2 KubeDeploy
variables: image: '自定义镜像名,与上文须一致'steps:- task: KubernetesManifest@0 displayName: deploy inputs: kubernetesServiceConnection: online namespace: '$(ns)' ## k8s的部署目标命名空间 strategy: canary ## 灰度部署策略 percentage: 50 manifests: '$(System.DefaultWorkingDirectory)/_dapr-demo/drop/dapr.yaml' containers: '$(harborUrl)/$(image):$(Build.BuildNumber)'
这样,在首次部署时执行全部管道。
后期回滚版本只,手动执行第二个管理即KubeDeploy
即可
读到这里,这篇".NET项目在k8s中运行的Dapr持续集成方法"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
镜像
项目
文件
流程
运行
配置
方法
两个
文章
方案
作业
编译
不同
上文
仓库
内容
只是
时间
版本
选择
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
基础教育信息化 网络安全
软件开发的所有语言
软件开发的未来方向
服务器健康度模型
网络安全空间专业专科
psql免密登录数据库
苹果系统支持的数据库
局域网网络安全管理软件
dat数据库
中山定制软件开发
云服务器部署执法仪
2017年软件开发总结
服务器虚拟化技术与集群
计算机网络技术山东专升本
宜宾国家网络安全
侨联网络安全应急
学生网络安全课
怎样改战地五服务器
总显示微信连接不到服务器
彩票预测系统软件开发
上海直播软件开发哪家好
怎么安装数据库sql2019
公司服务器维修
软件开发学最新
护苗网络安全打黄打非课视频
江西本地软件开发收费
河南信鼎网络技术有限公司
写脚本算软件开发嘛
软件开发公司查询
等保后发生网络安全问题