k8s部署skywalking之java agent部署(使用daemonset)
创始人
2025-05-29 03:47:53
0

k8s部署java agent

  • 一、需求
  • 二、实现思路
  • 三、步骤
    • 3.1 制作agent镜像
      • 3.1.1 Dockerfile
      • 3.1.2 执行命令
    • 3.2 推送镜像
    • 3.3 部署到k8s环境
      • 3.3.1 daemonset配置文件
      • 3.3.2 运行daemonset
      • 3.3.3 查看daemonset运行情况
    • 3.4 验证是否挂载成功

一、需求

  1. java应用在接入skywalking的时候,需要在启动参数指定 java agent的jar包-javaagent:/usr/local/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent/skywalking-agent.jar
  2. 如果每个java应用制作成容器都需要把agent.jar包放进去,会导致容器太大,而且繁琐。
  3. 希望单独将java agent制作成镜像,并把相关的文件挂载出来。那么下次有新增的java应用时,只需要将-javaagent指向挂载目录的agent包即可

二、实现思路

  1. 挂载方式使用hostPath的方式

hostPath的方式挂载的目录生命周期pod相同。如果容器挂了,目录依然存在

  1. k8s采用daemonset的方式部署agent

使用daemonset会保证每个node节点都会将agent文件挂载到对应的主机目录上

三、步骤

3.1 制作agent镜像

3.1.1 Dockerfile

准备好java agent压缩包:https://dlcdn.apache.org/skywalking/java-agent/8.14.0/apache-skywalking-java-agent-8.14.0.tgz
新建一个Dockerfile文件,内容如下:

# 虽然第一句话看上去没用,但是必须要继承一个基础镜像
# 否则执行docker build 会报错
FROM livingobjects/jre8
RUN mkdir -p /data/paasops/sk/agent
# 复制压缩包并解压
ADD apache-skywalking-java-agent-8.14.0.tgz /data/paasops/sk/agent
# 准备当作挂载目录
RUN mkdir -p /data/paasops/sk/mount/agent

3.1.2 执行命令

docker build -t sk-agent . -> 制作一个名为sk-agent的镜像

3.2 推送镜像

按照自己需求将镜像推送到对应仓库

3.3 部署到k8s环境

3.3.1 daemonset配置文件

新建一个daemonset.yml文件,内容如下:

apiVersion: apps/v1 
kind: DaemonSet  # 类型
metadata:name: agent-daemonset  #daemonset名字namespace: kube-tracing # 指定命名空间
spec: selector: matchLabels: app: agent-daemon-tag  # 标签template:metadata:labels: app: agent-daemon-tag spec:containers:- name: agent-cimage: 192.168.116.xx:18080/monitor-test/sk-agent:8.14  # agent镜像位置imagePullPolicy: Always# 执行多条命令 #1.将agent包拷贝到挂载目录# 2. 执行一个死循环命令,让容器内部有常驻进程,防止容器退出command: [ "/bin/bash", "-c", "--" ]args: [ "cp -r /data/paasops/sk/agent/* /data/paasops/sk/mount/agent;while true; do sleep 30; done;" ]volumeMounts:- name: hostpath-agent-volume # 对应下边的挂载定义 name字段内容mountPath: /data/paasops/sk/mount/agent # 容器的挂载目录volumes: # 挂载方式定义- name: hostpath-agent-volumehostPath: # 挂载类型path: /data/skywalking/agent  # 主机的挂载目录type: DirectoryOrCreate

注意:

  1. 以上配置文件实现容器的/data/paasops/sk/mount/agent目录挂载到主机的/data/skywalking/agent; 如果挂载成功,主机目录的内容会覆盖容器目录内容。也就是说如果进入容器的/data/paasops/sk/mount/agent目录,看到的内容是和主机/data/skywalking/agent目录的内容相同并非容器原本目录的内容

3.3.2 运行daemonset

kubectl apply -f daemontset.yml --> 执行daemontset配置文件

3.3.3 查看daemonset运行情况

kubectl get daemonset -n kube-tracing --> 查看kube-tacing命名空间的daemonset
在这里插入图片描述

NAME              DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
agent-daemonset   5         5         5       5            5                     73m

kubectl get pod -n kube-tracing–> 查看pod的运行情况,看daemonset是否创建pod成功
在这里插入图片描述

NAME                                     READY   STATUS             RESTARTS   AGE
agent-daemonset-6hftx                    1/1     Running            0          73m
agent-daemonset-8bh6f                    1/1     Running            0          73m
agent-daemonset-gft2d                    1/1     Running            0          73m
agent-daemonset-x4hhm                    1/1     Running            0          73m
agent-daemonset-x5gvk                    1/1     Running            0          73m

因为我有5个nodes,每个node对应创建了一个pod,所以共有5个pod,且状态都为RUNNING。表示daemonset成功
在这里插入图片描述

3.4 验证是否挂载成功

连接到node节点服务器上,进入/data/skywalking/agent目录,查看是否有agent包相关内容,如果有,表示挂载成功.
在这里插入图片描述

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...