基于k8s部署带skywalking agent的微服务工程

背景

在应用程序中添加 SkyWalking Agent,就可以将接口、服务、数据库、MQ等进行追踪,将追踪结果通过 HTTP 或 gRPC 发送到 OAPServer,经过分析和聚合,将结果存储到 Elasticsearch 或 H2,SkyWalking 同时提供了一个 SkyWalking UI 的可视化界面,UI 以 GraphQL + HTTP 方式获取存储数据进行展示。


image.png

要想为微服务添加SkyWalking Agent需要引入SkyWalking 组件中 agent目录,并修改启动配置。

实现思路

如果为每一个微服务生成镜像的时候都将SkyWalking 组件中 agent目录打入镜像中,镜像文件将明显增大。
所以通过以下方式来实现:

  • 单独为SkyWalking agent目录制作一个镜像
  • 修改k8s的deployment配置文件,在微服务容器初始时启动SkyWalking Agent镜像,将gent目录复制到微服务容器中到启动微服务容器。(initContainers)

实现步骤

生成SkyWalking agent镜像

image.png
  • 通过官网下载组件包。
  • 解压组件包,复制组件包下的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: {}          

你可能感兴趣的:(基于k8s部署带skywalking agent的微服务工程)