K8s简单集成SkyWalking
本⽂记录最简单的⼀个过程要点。
搭建 ES7
参考这⾥:
搭建单节点时需要注意配置环境变量:pe=single-node
配置本地存储(例如 hostPath⽅式)需要注意配置权限:
mkdir esdatadir
chmod g+rwx esdatadir
chgrp 0 esdatadir
搭建 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: efk
搭建 skywalking-ui 服务
官⽅镜像:apache/skywalking-ui:8.1.0
java设置环境变量的方法代码
ConfigMap 或环境变量配置,主要是指定 oap 服务和端⼝。
apiVersion: v1
data:
SW_OAP_ADDRESS: skywalking-oap-server:12800
SW_TIMEOUT:"20000"
kind: ConfigMap
metadata:
name: skywalking-ui
namespace: efk
配置 java agent
上⾯3步⼤家服务端是最简单的,agent 的配置也没那么⿇烦,只是看怎么更简单。
下载官⽅⼆进制压缩包:
上⾯是下载页⾯,不是具体的⽂件。这⾥下载的 es7 版本。
解压后主要看 agent ⽬录。
想要使⽤ skywalking, 你需要的是整个 agent ⽬录,不是其中的某⼏个 jar 。 放在 plugins 和 activations ⽬录的是激活的插件,这些插件的原理基本上就是查某个 java class,如果存在就在运⾏时修改这个类,使得这个类被代理的接⼝⽅法调⽤时能给 skywalking 发送数据。
为了使⽤skywalking,将 agent 打包到所有镜像中是⼀个办法,但不是最好的办法。如果 k8s 集有 nfs,nas 类的存储,可以放⼀份,然后所有容器挂载⽬录使⽤,如果没有共享存储,使⽤ hostPath,在每个节点的相同位置存放也能⼀起使⽤。我这⾥使⽤的 hostPath ⽅式。
先看 agent/fig 配置,这个⽬录就⼀个配置⽂件,所以如果想要在 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: vol1'
前提,你的 java 服务需要⽀持 JAVA_OPTS 环境变量。
通过上⾯的代码会给所有服务挂载 hostPath,并且配置了服务名和 javaagent,服务启动成功后在 skywalking 就能看到服务的信息了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。