1. 前言
Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。
Sentinel 的使用分为两个部分:
- 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对Dubbo /Spring Cloud 等框架也有较好的支持。
- 控制台(Dashboard):主要负责管理推送规则、监控、管理机器信息等
本篇文章不涉及客户端使用方面的讲解,只讲解dashboard在k8s环境中的部署。
Dashboard官方文档:https://sentinelguard.io/zh-cn/docs/dashboard.html
客户端的使用详见:https://sentinelguard.io/zh-cn/docs/quick-start.html
2. 部署流程
步骤可分为以下2部分
- 编写Dockerfile,官网下载jar包,编译镜像
- 编写K8S文件及部署
下载jar包官网:Releases · alibaba/Sentinel · GitHub
3. 编译镜像
sentinel没有官方编译的镜像,一般做法是手动从官方下载源码编译成jar包或直接下载jar包,通过dockerfile打包成镜像,推送到私有镜像仓库进行使用。
因此,需要什么版本,可自行控制
3.1 Dockerfile文件
FROM openjdk:8-jdk
# 环境变量
ENV LC_ALL=zh_CN.utf8
ENV LANG=zh_CN.utf8
ENV LANGUAGE=zh_CN.utf8
WORKDIR /app
# HTTP端口
EXPOSE 8080
# 客户端通信端口
EXPOSE 8719
#下载jar
ADD https://github.com/alibaba/Sentinel/releases/download/1.8.5/sentinel-dashboard-1.8.5.jar ./sentinel-dashboard.jar
# 时间同步设置
# 设置权限 chown 用户:所在组 文件目录 0表示root用户所在的组标识;1001是指定了一个用户标识
# chmod 读取权限 r = 4,写入权限 w = 2,执行权限 x = 1
# 3个数字分别代表 拥有者,组用户,其他用户的权限
# 775中的第一个7表示4+2+1 表示拥有者拥有读写执行权限
# 第二个7当前用户所在组中的用户拥有者拥有读写执行权限
# 第三个5表示其他用户有读和执行的权限 没有写的权限
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone \
&& chown 1001:0 -R /app \
&& chmod 775 -R /app
# java启动jar包
ENTRYPOINT ["java","-Dfile.encoding=UTF8","-Dsun.jnu.encoding=UTF8","-jar","sentinel-dashboard.jar"]
3.2 编译镜像
docker build -t harbor.test.cn/sentinel-dashboard:latest
docker push harbor.test.cn/sentinel-dashboard:latest
4. 部署
k8s deployment.yaml文件如下,注意替换image为自己打包的镜像地址
apiVersion: v1
kind: Service
metadata:
name: sentinel
labels:
app: sentinel
spec:
ports:
- port: 8080
name: http
targetPort: 8080
- port: 8719
name: api-port
targetPort: 8719
selector:
app: sentinel
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: sentinel
spec:
serviceName: sentinel
replicas: 1
template:
metadata:
labels:
app: sentinel
annotations:
pod.alpha.kubernetes.io/initialized: "true"
spec:
s:
- name: sentinel
imagePullPolicy: Always
image: harbor.test.cn/sentinel-dashboard:latest
resources:
limits:
memory: 1024Mi
cpu: 1000m
requests:
cpu: 200m
memory: 1024Mi
ports:
-Port: 8080
name: http
-Port: 8719
name: api-port
env:
- name: TZ
value: Asia/Shanghai
- name: JAVA_OPTS
value: "-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=sentinel -Dserver.servlet.session.timeout=7200"
selector:
matchLabels:
app: sentinel
部署命令
kubectl apply -f deployment.yaml
#查看部署状态
kubectl get sts
注意,sentinel控制台目前只能单机部署,控制台提供通用的鉴权接口 AuthService,所以只引入基本的登录功能,无用户管理功能,需要自行二次开发,默认帐号密码可在java启动参数时配置,在deployment.yaml环境变量JAVA_OPTS中进行修改,默认帐号密码设为sentinel,注意发布到生产时记得改一下密码再发布
"-Dserver.port=8080 -Dcsp.sentinel.dashboard.server=localhost:8080 -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboard.auth.password=sentinel -Dserver.servlet.session.timeout=7200"
5. 配置ingress,实现web访问
ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sentinel
spec:
ingressClassName: nginx
rules:
- host: sentinel.test.cn
http:
paths:
- backend:
service:
name: sentinel
port:
number: 8080
path: /
pathType: Prefix
部署
kubectl apply -f ingress.yaml
然后就可以通过域名:http://sentinel.test.cn
然后就可以通过接入客户端进行规则 配置管理了,配置客户端时,在K8S集群内部的应用可以通过地址:sentinel.<namespace>.svc: 8719进行接入(namespace以实际 部署在的命名空间为准),外部接入的话,需要新建一个service,并通过nodeport的方式将8719这个接口映射到外部进行访问。
觉得有用点个收藏 吧~