首页 > 其他分享 >微服务实践k8s&dapr开发部署实验(2)状态管理

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

时间:2024-05-26 20:14:08浏览次数:36  
标签:kubectl name 部署 redis statestore yaml dapr k8s

新建webapi项目

image

  • 建项目时取消https支持,勾选docker支持,
    image
  • 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支持
    image
  • 修改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; }
    }
}

部署到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:
  labels:
    app: redis
  name: redis
  #namespace: dapr-test1
spec:
  type: NodePort
  ports:
  - name: "data"
    port: 6379
    targetPort: 6379
  selector:
    app: redis

# statestore.yaml 文件
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
  name: statestore
  #namespace: default #dapr-test1
spec:
  type: state.redis
  version: v1
  metadata:
  - name: redisHost
    value: redis:6379
  - name: redisPassword
    value: ""
  - name: actorStateStore
    value: "true"

# dapr-front.yaml
kind: Deployment
apiVersion: apps/v1
metadata:
  name: dapr-deploy-front
  labels:
    service: front
spec:
  replicas: 1
  selector:
    matchLabels:
       service: front
  template:
    metadata:
      labels:
        service: front
      annotations:
        dapr.io/enabled: "true"
        dapr.io/app-id: "front"
        dapr.io/app-port: "8080"
        #dapr.io/config: "dapr-config"
    spec:
      containers:
        - name: daprfrontend
          image:  registry.cn-hangzhou.aliyuncs.com/shiningrise/statestore:v2
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 8080
              protocol: TCP
---
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

验证是否成功

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

遇到问题

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

相关文件下载

https://files.cnblogs.com/files/shiningrise/statestore.zip?t=1716723380&download=true

常用命令

docker build -t registry.cn-hangzhou.aliyuncs.com/shiningrise/statestore:v1 -f backend/Dockerfile .
docker build -t daprfrontend -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

相关文章

标签:kubectl,name,部署,redis,statestore,yaml,dapr,k8s
From: https://www.cnblogs.com/shiningrise/p/18214159

相关文章

  • Ubuntu20 安装 K8S
    准备apt-get修改国内源mv/etc/apt/sources.list/etc/apt/sources.list.bkcat>/etc/apt/sources.list<<EOFdebhttps://mirrors.ustc.edu.cn/ubuntu/focalmainrestricteduniversemultiversedeb-srchttps://mirrors.ustc.edu.cn/ubuntu/focalmainrestric......
  • Springboot计算机毕业设计学生报到小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着教育信息化的不断推进,学生报到流程也逐渐向数字化、智能化方向转变。传统的报到方式通常涉及大量的纸质材料和现场排队等待,不仅效率低下,而且容易......
  • K8S认证|CKA题库+答案| 15. 备份还原Etcd
    目录15、 备份还原EtcdCKA v1.29.0模拟系统  下载试用题目: 开始操作:1)、切换集群2)、登录master并提权3)、备份Etcd现有数据4)、验证备份数据快照5)、查看节点和Pod状态 6)、创建目录​7)、执行Etcd数据恢复命令8)、验证恢复情况 ​9)、更改Etcd配置10)、重启kubel......
  • Springboot计算机毕业设计行程日记卡小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化和移动互联网时代,人们对于旅行方式的需求正发生深刻变化。行程规划、景点打卡、美食推荐等旅行需求日益个性化、多元化。然而,传统的旅行规划......
  • DockerCompose-项目一键部署
    Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YML文件来配置应用程序需要的所有服务。Compose使用的三个步骤使用Dockerfile定义应用程序的环境。使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起......
  • Docker Java项目部署
    将你的java项目打包为一个jar包准备Dockerfile文件#设置本镜像需要使用的基础镜像FROMjava:8#把jar包添加到镜像中ADDyylq-ds.jar/app.jar#镜像暴露的端口EXPOSE8199RUNbash-c'touch/app.jar'#容器启动命令ENTRYPOINT["java","-jar","/app.......
  • Elasticsearch集群和Logstash、Kibana部署
    1、Elasticsearch集群部署服务器安装软件主机名IP地址系统版本配置ElasticsearchElk10.3.145.14centos7.5.18042核4GElasticsearchEs110.3.145.56centos7.5.18042核3GElasticsearchEs210.3.145.57centos7.5.18042核3G软件版本:elasticsearch-7.13.2.tar.gz示例节点:10.3......
  • 服务器部署Redis
    前言:reids历史版本网址:https://download.redis.io/releases/远程服务器:CentOS7.6(本地VM也一样)连接:XShell7与Xftp7图形化桌面:RDM1.安装Redis1)解压并安装Redis是基于C语言编写的,因此首先需要安装Redis所需要的gcc依赖。查看是否安装成功:rpm-qa|......
  • ChatGPT-Next-Web:Github开源+Vercel免费+API 快速部署使用
    ChatGPT-Next-Web:Github开源+Vercel免费+API快速部署使用文章目录ChatGPT-Next-Web:Github开源+Vercel免费+API快速部署使用导语:需要用到的链接汇总1、github项目直达地址2、vercel服务器直达地址3、三方API获取一、Github项目`star`+Vercel部署1、访问进去G......
  • 【计算机毕业设计】基于SSM+Vue的校园美食交流系统【源码+lw+部署文档】
    目录前 言第1章概述1.1研究背景1.2研究目的1.3研究内容      第二章开发技术介绍2.1Java技术2.2Mysql数据库2.3B/S结构2.4SSM框架第三章系统分析3.1可行性分析3.1.1 技术可行性3.1.2经济可行性3.1.3操作可行性3.2系统性能分析3.3......