在k8s配置sentinel并且实现持久化--踩坑麻了版本

1、首先是k8s的基本配置 配置几个文件实现k8s中的可视化:

配置sentinel-cm.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: sentinel-cm
data:
  sentinel.server.host: "192.168.**"
  sentinel.server.port: "8858"
  sentinel.dashboard.auth.username: "sentinel"
  sentinel.dashboard.auth.password: "sentinel"

配置sentinel-pod.yml


apiVersion: apps/v1
kind: StatefulSet
metadata:

  name: sentinel
  labels:
    app: sentinel
spec:
  serviceName: sentinel
  replicas: 1
  selector:
    matchLabels:
      app: sentinel
  template:
    metadata:
      labels:
        app: sentinel
    spec:
      containers:
        - name: sentinel
          image: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/bladex/sentinel-dashboard:1.8.7
          imagePullPolicy: IfNotPresent
          resources:
            limits:
              cpu: 450m
              memory: 1024Mi
            requests:
              cpu: 400m
              memory: 1024Mi
          env:
            - name: TZ
              value: Asia/Shanghai
            - name: JAVA_OPT_EXT
              value: "-Dserver.servlet.session.timeout=7200 "
            - name: SERVER_HOST
              valueFrom:
                configMapKeyRef:
                  name: sentinel-cm
                  key: sentinel.server.host
            - name: SERVER_PORT
              valueFrom:
                configMapKeyRef:
                  name: sentinel-cm
                  key: sentinel.server.port
            - name: USERNAME
              valueFrom:
                  configMapKeyRef:
                    name: sentinel-cm
                    key: sentinel.dashboard.auth.username
            - name: PASSWORD
              valueFrom:
                  configMapKeyRef:
                    name: sentinel-cm
                    key: sentinel.dashboard.auth.password
          ports:
            - containerPort: 8858
            - containerPort: 8719

      imagePullSecrets:
        - name: harbor-secret

配置sentinel-svc.yaml

apiVersion: v1
kind: Service
metadata:

  name: sentinel
  labels:
    app: sentinel
spec:
  type: ClusterIP
  ports:
    - port: 8858
      targetPort: 8858
      name: web
    - port: 8719
      targetPort: 8719
      name: api
  selector:
    app: sentinel

配置sentinel-web-svc.yaml暴露端口


apiVersion: v1
kind: Service
metadata:
  labels:
    app: sentinel
  name: sentinel-web-svc
  namespace: ibs-selling
spec:
  type: NodePort
  ports:
    - name: "web"
      port: 8858
      targetPort: 8858
      nodePort: 30280
  selector:
    app: sentinel

随后使用下面代码进行执行,等待一段时间后我们的程序便可以执行。

kubectl apply -f 上面的文件名

经过以上配置后我们就可以在k8s的可视化界面中登录sentinel界面了 注意上面的端口配置要一致

2、在springboot集成nacos实现持久化

代码依赖,我的springboot版本是2.7.18 依赖配置可以完美适配

 <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

            <version>2021.0.6.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>2021.0.6.0</version>
        </dependency>
        <!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.1.4</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2021.0.6.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.csp/sentinel-datasource-nacos -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
            <version>1.8.7</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

接下来是application.yml的配置  这里有个循环依赖 配置好最后一项后就可以了

spring:
  application:
    name: sentinel
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        file-extension: yaml
        namespace: api-manager
        group: SENTINEL_FLOW_GROUP

    sentinel:
      eager: true
      transport:
        dashboard: localhost:8858
        port: 8719
      datasource:
        ds1:
          nacos:
            server-addr: localhost:8848
            namespace: api-manager
            group-id: SENTINEL_FLOW_GROUP
            data-id: sentinel-flow-rules
            rule-type: flow
            data-type: json
            username: nacos
            password: nacos
   main:
    allow-circular-references: true
    

然后是bootstrap.yaml文件配置用于发现服务

spring:
  application:
    name: sentinel
  cloud:
    nacos:
      # 服务器地址
      server-addr: ${NACOS_ADDR:nacos-custom-svc.pubtools:8848}
      # 用户名
      username: ${NACOS_USERNAME:nacos}
      # 密码
      password: ${NACOS_PASSWORD:nacos}

      discovery:
        username: nacos
        password: nacos
        server-addr: localhost:8848
        enabled: true
      config:
        server-addr: localhost:8848
        username: nacos
        password: nacos
        file-extension: yaml
        namespace: api-manager
        group: SENTINEL_FLOW_GROUP
    sentinel:
      eager: true
      transport:
        dashboard: localhost:8858
        port: 8719
#      enabled: true

3、nacos上配置对应的文件信息

这里巨坑!!!!注意这里自己配置的时候要去掉后面的注释 否则无法加载

配置文件名是上面的group-id名称 箭头的位置要和上面配置的相同 完成后刷新sentinel 重启服务连接接口就可以了

[
  {
    "resource": "/test", // 资源名
    "limitApp": "default", // // 针对来源,若为 default 则不区分调用来源
    "grade": 1, // 限流阈值类型(1:QPS;  0:并发线程数)
    "count": 1, // 阈值
    "clusterMode": false, // 是否是集群模式
    "controlBehavior": 0, // 流控效果 (0:快速失败;  1:Warm Up(预热模式);  2:排队等待)
    "strategy": 0,  // 流控模式(0:直接; 1:关联; 2:链路)
    "warmUpPeriodSec": 10, // 预热时间(秒,预热模式需要此参数)
    "maxQueueingTimeMs": 500, // 超时时间(排队等待模式需要此参数)
    "refResource": "rrr" // 关联资源、入口资源(关联、链路模式)
  }
]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值