背景
在应用程序中添加 SkyWalking Agent,就可以将接口、服务、数据库、MQ等进行追踪,将追踪结果通过 HTTP 或 gRPC 发送到 OAPServer,经过分析和聚合,将结果存储到 Elasticsearch 或 H2,SkyWalking 同时提供了一个 SkyWalking UI 的可视化界面,UI 以 GraphQL + HTTP 方式获取存储数据进行展示。
要想为微服务添加SkyWalking Agent需要引入SkyWalking 组件中 agent目录,并修改启动配置。
实现思路
如果为每一个微服务生成镜像的时候都将SkyWalking 组件中 agent目录打入镜像中,镜像文件将明显增大。
所以通过以下方式来实现:
- 单独为SkyWalking agent目录制作一个镜像
- 修改k8s的deployment配置文件,在微服务容器初始时启动SkyWalking Agent镜像,将gent目录复制到微服务容器中到启动微服务容器。(initContainers)
实现步骤
生成SkyWalking agent镜像
- 通过官网下载组件包。
- 解压组件包,复制组件包下的agent目录
- 编写Dockerfile文件
FROM busybox:latest
ADD /agent //agent
- 执行Dockerfile,生成镜像
docker build -t skywalking-agent:6.0.0 .
修改微服务的deployment配置文件
apiVersion: extensions/v1beta1
kind: Deployment
... ...
spec:
initContainers:
- name: skywalking-agent-gateway
image: skywalking-agent:6.0.0
command: ["cp", "-rf", "/agent", "/tmp"]
volumeMounts:
- mountPath: /tmp
name: sky-agent-volume
containers:
- name: user-center-containers
image: user-center:latest
imagePullPolicy: IfNotPresent
ports:
- containerPort: 7000
env:
- name: SW_AGENT_NAMESPACE
value: #namespace name
- name: SW_AGENT_NAME
value: #app name
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: #skywalking aop server
volumeMounts:
- mountPath: /tmp
name: tmp
- mountPath: /skywalking
name: sky-agent-volume
volumes:
- name: tmp
hostPath:
path: /home/k8s/containers/tmp/user-center
- name: sky-agent-volume
emptyDir: {}