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就能看到有數據了。
向服務發一次請求,在拓撲圖裏能看到應用的拓撲圖。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章