k8s上运行我们的springboot服务之——skywalking监控我们的springboot
整体思路
在k8s中运行的springboot项目通过skywalking来作为链路追踪中间件。springboot 项目启动时结合skywalking提供的agent来实现链路追踪,没有任何代码入侵
skywalking和elasticsearch直接安装在物理机环境没有部署到k8s环境
springboot是打包成docker镜像后才通过yaml在k8s运行的,使用skywalking agent是其实就是将agent包拷贝到每一个springboot镜像,通过java -jar 命令启动springboot就完成链路追踪查看
我们直接把skywalking的agent打包成镜像,通过yaml deployment发布springboot项目时通过initContainers等完成agent拷贝
安装elasticsearch7
略
安装skywalking
下载配置skywalking
$tar -zxvf apache-skywalking-apm-es7-8.1.0.tar.gz
web访问端口 8080->38080 (本机8080已被其它服务占用)
$vi /home/spark/skywalking/apache-skywalking-apm-bin-es7/webapp/webapp.yml
server:
port: 38080
$/home/spark/skywalking/apache-skywalking-apm-bin-es7/config/application.yml
storage:
selector: ${SW_STORAGE:elasticsearch7}
elasticsearch7:
nameSpace: ${
SW_NAMESPACE:"my-application"} #通过访问192.168.10.58:9200 即可获得就是cluster_name的值
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.10.58:9200}
启动skywalking
$/usr/local/src/apache-skywalking-apm-bin-es7/bin/startup.sh
加到开机启动
#cat “/usr/local/src/apache-skywalking-apm-bin-es7/bin/startup.sh” >> /etc/rc.d/rc.local
#chmod +x /etc/rc.d/rc.local
通过浏览器访问:
192.168.10.59:38080
打包agent的镜像
#cd /home/spark/skywalking/apache-skywalking-apm-bin-es7
#vi Dockerfile
FROM busybox:latest
ENV LANG=C.UTF-8
RUN set -eux && mkdir -p /opt/skywalking/agent/
ADD agent/ /opt/skywalking/agent/
WORKDIR /
#docker build -t=“frame/skywalking-agent:v1” .
若报路径找不到,可新建路径复制对应文件到报错路径即可
登录harbor
#docker login 192.168.10.59:8080
打包tag
#docker tag frame/skywalking-agent:v1 192.168.10.59:8080/frame/skywalking-agent:v1
推送到私服
#docker push 192.168.10.59:8080/frame/skywalking-agent:v1
服务启动yaml
原yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: demo-istio
service: demo-istio
name: demo-istio
namespace: default
spec:
ports:
- name: demo-istio
port: 8070
selector:
app: demo-istio
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: demo-istio
version: v1
name: demo-istio-v1
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: demo-istio
version: v1
template:
metadata:
annotations:
prometheus.io/scrape: false
prometheus.io/path: /actuator/prometheus
prometheus.io/port: 8070
labels:
app: demo-istio
version: v1
spec:
containers:
- env:
- name: LIMITS_MEMORY
valueFrom:
resourceFieldRef:
divisor: 1Mi
resource: limits.memory
- name: JAVA_OPTS
value: -Xmx$(LIMITS_MEMORY)m -XshowSettings:vm -Duser.timezone=Asia/Shanghai
image: 192.168.10.59:8080/frame/demo-frame-istio:1.0.RELEASE
imagePullPolicy: Always
name: demo-istio
ports:
- containerPort: 8070
resources:
limits:
cpu: 2048m
memory: 2048Mi
requests:
cpu: 1024m
memory: 1024Mi
hostAliases:
- hostnames:
- www.zipkin.com
ip: 192.168.10.80
imagePullSecrets:
- name: regsecret
新yaml
使用skywalking需对deployment做如下修改
和普通yaml主要区别在于deployment中:
新增了initContainers
在containers新增了volumeMounts
spec中新增了volumes: