Kubernetes中SpirngBoot应用接入SkyWalking-agent探针实现追踪

主要思路是将配置好的agent打成镜像,通过k8s的初始化容器initContainers将agent目录挂载到所运行的pod中去,在pod中的容器就能访问到agent目录,从而实现接入探针,收集数据。

1、在skywalking的agent目录的同级目录下编写dockerfile用于把agent探针打包成镜像,可以单独建一个目录来放agent和dockerfile,看起来比较清晰。Dockerfile内容如下:

FROM busybox:latest
COPY ./agent/ /skywalking/agent/

这里是以busybox为基础镜像将agent打包成镜像。没有busybox的可以先docker pull busybox拉取基础镜像。
运行dockerfile,将agent打成镜像:

docker build -t reg.harbor.com/skw/skywalking-agent:6.4.0 .

将镜像push到你的镜像仓库(dockerhub、harbor等)中供k8s拉取:

docker push reg.harbor.com/skw/skywalking-agent:6.4.0

2、修改SpringBoot程序dockerfile和kubernetes的yml文件。

修改每个应用的dockerfile的endtypoint。***(不要把路径搞混)***

ENTRYPOINT [“java”, “-javaagent:/opt/agent/skywalking-agent.jar”, “-jar”, “/usr/app/demoApplication.jar”]

这里-javaagent的路径要和kubernetes的yml文件挂载的路径要搞清楚。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: demo-app-deployment
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: demo-app
    spec:
      initContainers:
        - name: skywalking-agent
          image: reg.harbor.com/skw/skywalking-agent:latest
          command: ['cp','-rf','/skywalking/agent','/tmp']
          volumeMounts:
            - mountPath: /tmp
              name: skw-agent-volume
      containers:
        - name: demo-app
          image: reg.harbor.com/demos/demo-app:test
          ports:
            - containerPort: 8001
          env:
            - name: TZ
              value: Asia/Shanghai
          volumeMounts:
            - mountPath: /opt
              name: skw-agent-volume
      imagePullSecrets:
        - name: demo-app-secret
      volumes:
        - name: skw-agent-volume
          emptyDir: {}

上面的k8s的deployment的配置中挂载了一个name为skw-agent-volume的volumes空目录,悉k8s的都知道pod内的容器都能共享这个volumes目录。
这里定义了一个名为skywalking-agent的初始化容器initContainers,他的任务就是拉取agent镜像,把该镜像内/skywalking/agent目录拷贝到/tmp内,/tmp目录内就有了agent目录。
通过volumeMounts把skw-agent-volume挂载到初始化容器的的/tmp目录下。demo-app容器把skw-agent-volume挂载到/opt目录下。
skw-agent-volume这时里面共享了/opt目录和/tmp目录下的所有内容。
上面修改的dockerfile的执行参数-javaagent:/opt/agent/skywalking-agent.jar,在demo-app容器内,就能访问到/opt/agent/skywalking-agent.jar拿到探针。
执行:

kubectl apply -f demo-app-deployment.yml

正常执行的话,打开skywalking的UI就能看到有数据了。
向服务发一次请求,在拓扑图里能看到应用的拓扑图。
Kubernetes中SpirngBoot应用接入SkyWalking-agent探针实现追踪_第1张图片

你可能感兴趣的:(SkyWalking)