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" // 关联资源、入口资源(关联、链路模式)
}
]