K8s 简单集成 SkyWalking
  TEZNKK3IfmPf 2023年11月14日 13 0

本文记录最简单的一个过程要点。

搭建 ES7

参考这里:Install Elasticsearch with Docker

搭建单节点时需要注意配置环境变量:discovery.type=single-node

配置本地存储(例如 hostPath方式)需要注意配置权限:

mkdir esdatadir
chmod g+rwx esdatadir
chgrp

搭建 skywalking-oap-server 服务

官方镜像:apache/skywalking-oap-server:8.1.0-es7

ConfigMap 或环境变量配置,指定存储和 ES7 地址(这里也发现个 BUG,必须指定端口,否则根据 : 分割获取 [1] 端口部分会数组越界)。

apiVersion: v1
data:
  SW_STORAGE: elasticsearch7
  SW_STORAGE_ES_CLUSTER_NODES: elasticsearch-master:9200
kind: ConfigMap
metadata:
  name: skywalking-oap-server
  namespace:

搭建 skywalking-ui 服务

官方镜像:apache/skywalking-ui:8.1.0

ConfigMap 或环境变量配置,主要是指定 oap 服务和端口。

apiVersion: v1
data:
  SW_OAP_ADDRESS: skywalking-oap-server:12800
  SW_TIMEOUT: "20000"
kind: ConfigMap
metadata:
  name: skywalking-ui
  namespace:

配置 java agent

上面3步大家服务端是最简单的,agent 的配置也没那么麻烦,只是看怎么更简单。

下载官方二进制压缩包:

https://www.ctyun.cn/portal/link.html?target=https%3A%2F%2Fwww.apache.org%2Fdyn%2Fcloser.cgi%2Fskywalking%2F8.1.0%2Fapache-skywalking-apm-es7-8.1.0.tar.gz

上面是 下载页面 ,不是具体的文件。这里下载的 es7 版本。

解压后主要看 agent 目录。

想要使用 skywalking, 你需要的是整个 agent 目录,不是其中的某几个 jar 。 放在 pluginsactivations 目录的是激活的插件,这些插件的原理基本上就是查找某个 java class,如果存在就在运行时修改这个类,使得这个类被代理的接口方法调用时能给 skywalking 发送数据。

为了使用skywalking,将 agent 打包到所有镜像中是一个办法,但不是最好的办法。如果 k8s 集群有 nfs,nas 类的存储,可以放一份,然后所有容器挂载目录使用,如果没有共享存储,使用 hostPath,在每个节点的相同位置存放也能一起使用。我这里使用的 hostPath 方式。

先看 agent/config/agent.config 配置,这个目录就一个配置文件,所以如果想要在 hostPath 的基础上统一控制,可以对这个文件使用 ConfigMap 挂载卷。

修改配置中的关键几项内容:

agent.service_name=${SW_AGENT_NAME:Undefined}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:skywalking-oap-server:11800}
logging.file_name=${SW_AGENT_NAME:skywalking-api}.log

为了减少配置,我这里直接让日志名和服务名一致。

假设将 agent 放到了所有节点的 /data/skywalking-agent 目录。

写个批量脚本对所有服务执行下面的更新操作:

kubectl patch deployments service1 --patch '
spec:
  template:
    spec:
      containers:
      - name: service1
        env:
        - name: JAVA_OPTS
          value: -javaagent:/skywalking-agent/skywalking-agent.jar
        - name: SW_AGENT_NAME
          value: service1
        volumeMounts:
        - mountPath: /skywalking-agent
          name: vol1
      volumes:
      - hostPath:
          path: /data/skywalking-agent
          type: ""
        name:

前提,你的 java 服务需要支持 JAVA_OPTS 环境变量。

通过上面的代码会给所有服务挂载 hostPath,并且配置了服务名和 javaagent,服务启动成功后在 skywalking 就能看到服务的信息了。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
TEZNKK3IfmPf