k8s 部署skywalking与dockerfile接入agent
文章目录1. 介绍1.2 效果图2. 部署2.1 部署skywalking2.1.1 创建configmap2.1.2 创建deployment2.1.3 添加service2.2 部署ui2.2.1 创建deployment2.2 创建service3. 使用(应用集成agent)复制agent到项目目录4. 踩坑1. 介绍skywalking分为四个部分:Agent(也叫Probe):代理或者
文章目录
1. 介绍
skywalking分为四个部分:
- Agent(也叫Probe):代理或者探针,集成在被监测的应用中(SDK形式或者动态注入),采集应用的数据发送给后端(OAP)。
- UI:自带的Web页面。
- OAP:后端,接收Agent的数据并进行分析。Agent和OAP通信走的是gRPC,端口号默认为11800;UI和OAP通信走的是HTTP接口,端口号默认为12800。
- Storage:后端存储,OAP处理后的数据存储在这里。生产比较常用的是MySQL和ES。
部署思路是先部署存储(es)、再部署OAP、UI 最后将Agent整合到应用中
其中es环境上有(部署文档也写过),这里不记录。直接从OAP开始。
1.2 效果图
2. 部署
2.1 部署skywalking
2.1.1 创建configmap
# kubectl create configmap skywalking-cm --from-file=skywalking-cm --namespace=xxx
kubectl apply -f skywalking-cm
apiVersion: v1
kind: ConfigMap
metadata:
name: skywalking-cm
namespace: xxx
data:
CLUSTER: 'nacos'
CLUSTER_NACOS_HOST_PORT: '172.26.124.40:31948'
STORAGE: 'elasticsearch7'
STORAGE_ES_CLUSTER_NODES: '172.26.124.40:32039'
CORE_GRPC_PORT: '11800'
CORE_REST_PORT: '12800'
ES_USER: ‘用户名’
ES_PASSWORD: ‘密码’
2.1.2 创建deployment
kubectl create -f skwalking.yaml --namespace=xxx --record
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: skywalking
name: skywalking
namespace: xxx
spec:
replicas: 2
selector:
matchLabels:
app: skywalking
template:
metadata:
labels:
app: skywalking
spec:
containers:
- envFrom:
- prefix: SW_
configMapRef:
name: skywalking-cm
image: apache/skywalking-oap-server:8.5.0-es7
imagePullPolicy: IfNotPresent
name: skywalking
ports:
- containerPort: 12800
name: http
protocol: TCP
- containerPort: 11800
name: grpc
protocol: TCP
resources:
limits:
cpu: '2'
memory: 2Gi
requests:
cpu: '1'
memory: 2Gi
volumeMounts:
- mountPath: /etc/localtime
name: volume-localtime
volumes:
- hostPath:
path: /etc/localtime
type: ''
name: volume-localtime
2.1.3 添加service
kubectl create -f skywalking-service.yaml --namespace=xxx --record
apiVersion: v1
kind: Service
metadata:
name: skywalking
namespace: xxx
labels:
app: skywalking
spec:
type: ClusterIP
ports:
- name: http
port: 12800
protocol: TCP
targetPort: 12800
- name: grpc
port: 11800
protocol: TCP
targetPort: 11800
selector:
app: skywalking
2.2 部署ui
2.2.1 创建deployment
kubectl create -f skywalking-service.yaml --namespace=xxx --record
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: skywalking-ui
name: skywalking-ui
namespace: xxx
spec:
replicas: 1
selector:
matchLabels:
app: skywalking-ui
template:
metadata:
labels:
app: skywalking-ui
spec:
containers:
- env:
- name: SW_OAP_ADDRESS
value: "skywalking:12800"
image: apache/skywalking-ui:8.5.0
imagePullPolicy: IfNotPresent
name: skywalking-ui
ports:
- containerPort: 8080
name: http
protocol: TCP
resources:
limits:
cpu: '2'
memory: 1Gi
requests:
cpu: '1'
memory: 1Gi
volumeMounts:
- mountPath: /etc/localtime
name: volume-localtime
volumes:
- hostPath:
path: /etc/localtime
type: ''
name: volume-localtime
2.2 创建service
kubectl create -f skywalking-service.yaml --namespace=xxx --record
apiVersion: v1
kind: Service
metadata:
name: skywalking-ui
namespace: xxx
labels:
app: skywalking-ui
spec:
type: NodePort
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: skywalking-ui
3. 使用(应用集成agent)
agent的使用需要将/agent整个目录拷贝到对应需要监控的服务器上,并修改/agent/config下的agent.config配置
我们使用docker构建镜像,总体思路:
- 是把skywalking-agent.jar复制到容器里
- 启动命令加上-javaagent:/agent/skywalking-agent.jar -Dskywalking.agent.service_name=databench-task
复制agent到项目目录
-
下载对应版本skywalking,我这边用的是8.5 下载地址
-
解压,并复制文件到项目中
huanghuiyaodeMacBook-Pro:apache-skywalking-apm-bin-es7 huanghuiyao$ ls
LICENSE README.txt bin config-examples oap-libs webapp
NOTICE agent config licenses tools
# 进入agent目录
huanghuiyaodeMacBook-Pro:apache-skywalking-apm-bin-es7 huanghuiyao$ cd agent
huanghuiyaodeMacBook-Pro:agent huanghuiyao$ ls
activations logs plugins
bootstrap-plugins optional-plugins skywalking-agent.jar
config optional-reporter-plugins
-
复制agent/skywlking-agent.jar和 agent/config/agent.config到项目目录
结构如下
-
修改dockerfile
FROM openjdk:8-jdk-alpine
EXPOSE 7000
#RUN mkdir -p /usr/local/agent
#ARG JAR_FILE
# 新增
COPY agent /agent/
ADD target/xxxk-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-javaagent:/agent/skywalking-agent.jar","-Dskywalking.agent.service_name=databench-task","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
改动点1:加了一行
COPY agent /agent/
改动点2:修改了一行
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#改为
ENTRYPOINT ["java","-javaagent:/agent/skywalking-agent.jar","-Dskywalking.agent.service_name=databench-task","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
-
修改配置
agent.config 对collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:ip:port}
里面对ip:port做了修改,改为刚部署的 -
完成
4. 踩坑
一开始,对dockerfile的语法理解不够深刻,容器启动总是失败,报错:
Error opening zip file or JAR manifest missing : /agent/skywalking-agent.jar
Error occurred during initialization of VM
agent library failed to init: instrument
思路:
- 先确定文件是不是到容器里
因为容器启动失败,不能直接进入容器看。所以暂时把dockerfile的ENTRYPOINT行注释,因为只add/copy文件,这个镜像总不会错。改完,直接build,然后run
docker run --rm -it hub.xx.com/xxx/x:hhy1.2.25 /bin/sh
确认容器的/agent/skywalking-agent.jar文件存在。
2. 确认命令是否正确
直接在容器里执行java -javaagent xxx
命令
结果:可以运行
3. 确认dockerfile里ENTRYPOINT行的正确性。
一开始的错就是多个参数没有用逗号隔开,被我写成:
ENTRYPOINT ["java","-javaagent:/agent/skywalking-agent.jar -Dskywalking.agent.service_name=databench-task -Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
更多推荐
所有评论(0)