如何使用 Skywalking Agent ? 如果你還不知道 Skywalking agent 是什麼, "請點擊這裡查看 Probe" 或者 "這裡查看快速瞭解agent" ,由於我這邊大部分都是 JAVA 服務,所以下文以 Java 中使用 agent 為例,提供了以下三種方式供你選擇 三種方 ...
如何使用 Skywalking Agent ?
如果你還不知道 Skywalking agent 是什麼,請點擊這裡查看 Probe 或者這裡查看快速瞭解agent,由於我這邊大部分都是 JAVA 服務,所以下文以 Java 中使用 agent 為例,提供了以下三種方式供你選擇
三種方式:
- 使用官方提供的基礎鏡像
- 將 agent 包構建到已經存在的基礎鏡像中
- sidecar 模式掛載 agent
1.使用官方提供的基礎鏡像
查看官方 docker hub 提供的基礎鏡像,只需要在你構建服務鏡像是 From 這個鏡像即可,直接集成到 Jenkins 中可以更加方便
2.將 agent 包構建到已經存在的基礎鏡像中
提供這種方式的原因是:官方的鏡像屬於精簡鏡像,並且是 openjdk ,可能很多命令沒有,需要自己二次安裝,以下是我構建的過程
下載 oracle jdk
這個現在 oracle 有點噁心了,wget 各種不行,然後我放棄了,直接從官網下載了
下載 skywalking 官方發行包,並解壓(以6.3.0為例)
wget https://www.apache.org/dyn/closer.cgi/skywalking/6.3.0/apache-skywalking-apm-6.3.0.tar.gz && tar -zxvf apache-skywalking-apm-6.3.0.tar.gz
通過以下 dockerfile 構建基礎鏡像
FROM alpine:3.8 ENV LANG=C.UTF-8 RUN set -eux && \ apk update && apk upgrade && \ wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&\ wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk &&\ apk --no-cache add unzip vim curl git bash ca-certificates glibc-2.30-r0.apk file && \ rm -rf /var/lib/apk/* &&\ mkdir -p /usr/skywalking/agent/ # A streamlined jre ADD jdk1.8.0_221/ /usr/java/jdk1.8.0_221/ ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/ # set env ENV JAVA_HOME /usr/java/jdk1.8.0_221 ENV PATH ${PATH}:${JAVA_HOME}/bin # run container with base path:/ WORKDIR / CMD bash
這裡由於 alpine 是基於mini lib 的,但是 java 需要 glibc ,所以加入了 glibc 相關的東西,最後構建出的鏡像大小在 490M 左右,應為加了挺多命令還是有點大,僅供參考,同樣構建出的鏡像也可以直接配置到 jenkins 中。
3.sidecar 模式掛載 agent
如果你們的服務是部署在 Kubernetes 中,你還可以使用這種方式來使用 Skywalking Agent ,這種方式的好處在與不需要修改原來的基礎鏡像,也不用重新構建新的服務鏡像,而是以sidecar 模式,通過共用volume的方式將agent 所需的相關文件掛載到已經存在的服務鏡像中
構建 skywalking agent sidecar 鏡像的方法
下載skywalking 官方發行包,並解壓
wget https://www.apache.org/dyn/closer.cgi/skywalking/6.3.0/apache-skywalking-apm-6.3.0.tar.gz && tar -zxvf apache-skywalking-apm-6.3.0.tar.gz
通過以下 dockerfile 進行構建
FROM busybox:latest ENV LANG=C.UTF-8 RUN set -eux && mkdir -p /usr/skywalking/agent/ ADD apache-skywalking-apm-bin/agent/ /usr/skywalking/agent/ WORKDIR /
註意:這裡我沒有在dockerfile中下載skywalking 發行包是因為保證構建出的 sidecar 鏡像保持最小,bosybox 只有700 k左右,加上 agent 最後大小小於20M
如何使用 sidecar 呢?
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
name: demo-sw
name: demo-sw
spec:
replicas: 1
selector:
matchLabels:
name: demo-sw
template:
metadata:
labels:
name: demo-sw
spec:
initContainers:
- image: registry-hz.rubikstack.com/library/sidecar-sw:latest
name: sw-agent-sidecar
imagePullPolicy: IfNotPresent
command: ['sh']
args: ['-c','mkdir -p /skywalking/agent && cp -r /usr/skywalking/agent/* /skywalking/agent']
volumeMounts:
- mountPath: /skywalking/agent
name: sw-agent
containers:
- image: nginx:1.7.9
name: nginx
volumeMounts:
- mountPath: /usr/skywalking/agent
name: sw-agent
ports:
- containerPort: 80
volumes:
- name: sw-agent
emptyDir: {}
以上是掛載 sidecar 的 deployment.yaml 文件,以nginx 作為服務為例,主要是通過共用 volume 的方式掛載 agent,首先 initContainers 通過 sw-agent 捲掛載了 sw-agent-sidecar 中的 /skywalking/agent ,並且將上面構建好的鏡像中的 agent 目錄 cp 到了 /skywalking/agent 目錄,完成之後 nginx 啟動時也掛載了 sw-agent 捲,並將其掛載到了容器的 /usr/skywalking/agent 目錄,這樣就完成了共用過程。
總結
這樣除去 ServiceMesh 以外,我能想到的方式就介紹完了,希望可以幫助到你。最後給 Skywalking 一個 Star 吧,國人的驕傲。