k8s 部署skywalking与dockerfile接入agent

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构建镜像,总体思路:

  1. 是把skywalking-agent.jar复制到容器里
  2. 启动命令加上-javaagent:/agent/skywalking-agent.jar -Dskywalking.agent.service_name=databench-task

复制agent到项目目录

  1. 下载对应版本skywalking,我这边用的是8.5 下载地址

  2. 解压,并复制文件到项目中

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
  1. 复制agent/skywlking-agent.jar和 agent/config/agent.config到项目目录
    结构如下
    在这里插入图片描述

  2. 修改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"]
  1. 修改配置
    agent.config 对 collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:ip:port}里面对ip:port做了修改,改为刚部署的

  2. 完成

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

思路:

  1. 先确定文件是不是到容器里
    因为容器启动失败,不能直接进入容器看。所以暂时把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"]
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
k8s部署skywalking可按以下步骤进行: 1. 安装K8S集群,可以使用kubeadm进行部署。具体的K8s集群安装步骤可以参考中的文档。 2. 创建命名空间,可以使用kubectl命令创建一个新的命名空间,用于部署skywalking。 3. 给节点打标签,使用kubectl命令给需要部署skywalking的节点打上特定的标签,方便后续的Pod调度。 4. 下载skywalking的配置文件,可以从提供的GitHub链接中获取skywalking的配置文件。这些配置文件包括skywalking-oap.yml和skywalking-ui.yml。 5. 使用kubectl命令部署skywalking的oap服务,可以通过执行kubectl apply命令来部署skywalking-oap.yml文件中定义的服务。 6. 使用kubectl命令部署skywalking的ui服务,可以通过执行kubectl apply命令来部署skywalking-ui.yml文件中定义的服务。 7. 配置访问skywalking,可以通过访问skywalking-ui的IP地址和端口来查看和管理skywalking的监控数据。 你可以参考中的文档和中的GitHub链接获取更详细的部署步骤和配置信息。 引用: 安装K8S集群kubeadm部署K8s集群V1.19.0 https://github.com/loveowie/skywalking-kubernetes<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [K8S部署skywalking](https://blog.csdn.net/anqixiang/article/details/120807866)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [K8S 部署全链路监控skywalking8.7和9.1](https://blog.csdn.net/ice_bird/article/details/122054784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值