微服务实践k8s与dapr开发部署实验(2)状态管理

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 微服务实践k8s与dapr开发部署实验(2)状态管理

新建webapi项目

  • 建项目时取消https支持,勾选docker支持,
  • Program.cs中注释下面语句,这样部署后才能访问Swagger
    // Configure the HTTP request pipeline.
    //if (app.Environment.IsDevelopment())
    {
      app.UseSwagger();
      app.UseSwaggerUI();
    }
    
  • 添加Dapr.Client与Dapr.AspNetCore两个nuget包
  • 修改Program.cs文件,增加dapr sdk支持
  • 修改WeatherForecastController.cs文件
    ```
    using Dapr;
    using Dapr.Client;
    using Microsoft.AspNetCore.Mvc;

namespace backend.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly DaprClient _daprClient;
public WeatherForecastController(DaprClient daprClient)
{
_daprClient = daprClient;
}

    [HttpGet(Name = "GetWeatherForecast")]
    public object Get()
    {
        return new { message = "Hello Dapr!" };
    }


    [HttpPost(nameof(SaveStateValue))]
    public async Task SaveStateValue(StateModel stateModel)
    {
        await _daprClient.SaveStateAsync("statestore", stateModel.Key, stateModel.Value);//statestore
    }
    [HttpDelete(nameof(DeleteStateValue) + "/{stateKey}")]
    public async Task DeleteStateValue(string stateKey)
    {
        await _daprClient.DeleteStateAsync("statestore", stateKey);
    }
    [HttpGet("GetStateValue/{stateKey}")]
    public async Task<string> GetStateValue(string stateKey)
    {
        return await _daprClient.GetStateAsync<string>("statestore", stateKey);
    }

    [HttpGet(nameof(GetStateValueFromState) + "/{stateKey}")]
    public async Task<string> GetStateValueFromState([FromState("statestore", "stateKey")] StateEntry<string> stateEntry)
    {
        return await Task.FromResult(stateEntry.Value);
    }
}

}

增加文件StateModel.cs

namespace backend.Controllers
{
public class StateModel
{
public string Key { get; set; }
public string Value { get; set; }
}
}


# dapr自托管部署

修改launchSettings.json文件,端口改成5002,如下图

![](https://wxy-blog.oss-cn-hangzhou.aliyuncs.com/wxy-blog/2024/202405290847807.png)

```c#
dapr init
dapr run --app-id front --app-port 5002 dotnet run

访问http://localhost:5002/swagger/index.html

操作各个方法,都符合预期就对了

部署到k8s

dapr init -k
kubectl apply -f redis.yaml
kubectl apply -f statestore.yaml
kubectl apply -f dapr-front.yaml
#redis.yaml 文件
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: redis
    version: v1
  name: redis
  #namespace: dapr-test1
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
        - name: redis
          image: redis:6-alpine
          imagePullPolicy: IfNotPresent
          ports:
          - containerPort: 6379


apiVersion: v1
kind: Service
metadata:
  name: daprfrontend
  labels:
    service: front
spec:
  type: NodePort
  ports:
    - port: 80
      targetPort: 8080
      nodePort: 30002
      protocol: TCP
      name: http
    - port: 50001
      targetPort: 50001
      nodePort: 30041
      protocol: TCP
      name: dapr-grpc
  selector:
    service: front

验证是否成功


我是nat到虚拟机
测试接口,如果都能正常设置状态,获取状态,删除状态就OK了

遇到问题

我上面部署成功的是在vmare虚拟机k8s集群上测试成功了,但我在win11本地测试时死也成功不了,搞了好几天都搞不定
pod运行不了,知道的大佬指点一下啊。
《Blazor+Dapr+K8s微服务之状态管理》 本地运行能成功。

相关文件下载

待上传

常用命令

docker build -t registry.cn-hangzhou.aliyuncs.com/shiningrise/statestore:v1 -f backend/Dockerfile .
docker build -t daprfrontend:v1 -f backend/Dockerfile .

::kubectl delete all --all
::dapr uninstall --all
::dapr init -k


kubectl apply -f namespace.yaml
kubectl apply -f dapr-config.yaml
kubectl apply -f zipkin.yaml
kubectl apply -f redis.yaml
kubectl apply -f statestore.yaml
::kubectl apply -f dapr-statestore-test.yaml
:: kubectl delete -f dapr-front.yaml
kubectl apply -f dapr-front.yaml

pause

相关文章

作者

吴晓阳,微信号:shiningrise

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
5天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
22 2
|
5天前
|
Kubernetes 监控 负载均衡
深入云原生:Kubernetes 集群部署与管理实践
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术以其弹性、可扩展性成为企业IT架构的首选。本文将引导你了解如何部署和管理一个Kubernetes集群,包括环境准备、安装步骤和日常维护技巧。我们将通过实际代码示例,探索云原生世界的秘密,并分享如何高效运用这一技术以适应快速变化的业务需求。
23 1
|
15天前
|
Kubernetes 负载均衡 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第27天】Kubernetes(简称K8s)是云原生应用的核心容器编排平台,提供自动化、扩展和管理容器化应用的能力。本文介绍Kubernetes的基本概念、安装配置、核心组件(如Pod和Deployment)、服务发现与负载均衡、网络配置及安全性挑战,帮助读者理解和实践Kubernetes在容器编排中的应用。
47 4
|
16天前
|
Kubernetes 监控 Cloud Native
云原生应用:Kubernetes在容器编排中的实践与挑战
【10月更文挑战第26天】随着云计算技术的发展,容器化成为现代应用部署的核心趋势。Kubernetes(K8s)作为容器编排领域的佼佼者,以其强大的可扩展性和自动化能力,为开发者提供了高效管理和部署容器化应用的平台。本文将详细介绍Kubernetes的基本概念、核心组件、实践过程及面临的挑战,帮助读者更好地理解和应用这一技术。
48 3
|
23天前
|
Kubernetes 监控 开发者
专家级实践:利用Cloud Toolkit进行微服务治理与容器化部署
【10月更文挑战第19天】在当今的软件开发领域,微服务架构因其高可伸缩性、易于维护和快速迭代的特点而备受青睐。然而,随着微服务数量的增加,管理和服务治理变得越来越复杂。作为阿里巴巴云推出的一款免费且开源的开发者工具,Cloud Toolkit 提供了一系列实用的功能,帮助开发者在微服务治理和容器化部署方面更加高效。本文将从个人的角度出发,探讨如何利用 Cloud Toolkit 来应对这些挑战。
34 2
|
7天前
|
Kubernetes 负载均衡 调度
Kubernetes集群管理与编排实践
Kubernetes集群管理与编排实践
|
7天前
|
Kubernetes Cloud Native 前端开发
Kubernetes入门指南:从基础到实践
Kubernetes入门指南:从基础到实践
17 0
|
8天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
41 6
|
8天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
24 1
|
2月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2