k8s部署skywalking(helm)

官方文档

  • 官方文档说明:Backend setup | Apache SkyWalking
  • 官方helm源码:apache/skywalking-helm
  • 官方下载(包括agent、apm):Downloads | Apache SkyWalking

部署

根据官方helm提示,选择你自己部署的方式,是放到私有仓库还是采用官方镜像仓库

在这里插入图片描述

服务端部署

helm配置文件

这里我们有现成的es,所以设置为false,不在部署新的es;

oap:image:repository: skywalking.docker.scarf.sh/apache/skywalking-oap-servertag: 9.7.0  # Must be set explicitlypullPolicy: AlwaysstorageType: elasticsearchenv:SW_CORE_RECORD_DATA_TTL: "7" # 设置记录数据的保留时间SW_CORE_METRICS_DATA_TTL: "7" # 经过聚合处理的指标数据的保留时间# 官方健康监测默认值是10s,太短了,会认为一直失败,导致重启startupProbe:tcpSocket:port: 12800failureThreshold: 9periodSeconds: 30resources:limits:cpu: 8memory: 8Girequests:cpu: 8memory: 4Gi
ui:image:repository: skywalking.docker.scarf.sh/apache/skywalking-uitag: 9.7.0  # Must be set explicitlypullPolicy: Alwaysingress:enabled: truepath: /hosts:- sky.example.com
elasticsearch:enabled: falseconfig:               # For users of an existing elasticsearch cluster,takes effect when `elasticsearch.enabled` is falsehost: es.xx.xxx.comport:http: 80user: "xxx"         # [optional]password: "xxx"     # [optional]

如果没有现成的es,需要部署新的,配置文件如下:

oap:
image:repository: skywalking.docker.scarf.sh/apache/skywalking-oap-servertag: 9.7.0  # Must be set explicitlypullPolicy: Always
storageType: elasticsearch
env:SW_CORE_RECORD_DATA_TTL: "7" # 设置记录数据的保留时间SW_CORE_METRICS_DATA_TTL: "7" # 经过聚合处理的指标数据的保留时间
# 官方健康监测默认值是10s,太短了,会认为一直失败,导致重启
startupProbe:tcpSocket:port: 12800failureThreshold: 9periodSeconds: 30
resources:limits:cpu: 8memory: 8Girequests:cpu: 8memory: 4Gi
ui:
image:repository: skywalking.docker.scarf.sh/apache/skywalking-uitag: 9.7.0  # Must be set explicitlypullPolicy: Always
ingress:enabled: truepath: /hosts:- sky.example.com
elasticsearch:enabled: truereplicas: 1minimumMasterNodes: 1nodeGroup: "single-node"persistence: enabled: trueinitResources:requests:memory: 2GiclusterHealthCheckParams: "wait_for_status=yellow&timeout=1s"volumeClaimTemplate:accessModes: [ "ReadWriteOnce" ]storageClassName: pvc-esresources:requests:storage: 512Gi

注意调整这两个参数,SW_CORE_RECORD_DATA_TTL和SW_CORE_METRICS_DATA_TTL。官方默认的是时间分别为3和7

开始部署

这里建议采用私有仓库部署,一方面是网络开销小,另一方面公有仓库存在一些问题(下面回答),这里只做demo演示,先暂时采用公有仓库部署

# helm chat 的版本
export SKYWALKING_RELEASE_VERSION=4.5.0
# helm 的 release name
export SKYWALKING_RELEASE_NAME=skywalking
# k8s 的命名空间
export SKYWALKING_RELEASE_NAMESPACE=tools# 部署
helm install "${SKYWALKING_RELEASE_NAME}" \oci://registry-1.docker.io/apache/skywalking-helm \--version "${SKYWALKING_RELEASE_VERSION}" \-n "${SKYWALKING_RELEASE_NAMESPACE}" -f ./values.yaml

这个时候,你会在k8s后台看到2个服务,一个是oap的,一个是ui的

Java项目集成

因为Java项目集成skywalking是通过agent集成的,所以需要从官网上下载agent包,对于部署方式,也存在下面几种种方式:

  • agent打入dockerfile镜像;
  • k8s sidecar方式,需要申请共享磁盘;
  • 当然,还有一种是本地开发环境连接线上服务端的场景。

在这里我们说一下第一种方式和本地调试。

Dockerfile

准备内容:

  • 从官方网站下载agent包到本地
  • 可执行的Java web项目
FROM  openjdk:8-jdk # 你们项目自身的环境,比如openjdk-8
LABEL maintainer="xx.xx@xxx.com"
COPY skywalking-agent-9.2.0 /opt/skywalking-agent-9.2.0# 时区问题
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/shanghai" > /etc/timezoneVOLUME /tmp
ADD spring-web-demo-1.0.0.jar app.jar
RUN sh -c 'touch /app.jar'
RUN ls -l
RUN ls -l /opt
RUN ls -l /opt/skywalking-agent-9.2.0/ENTRYPOINT ["sh", "-c", "java -javaagent:/opt/skywalking-agent-9.2.0/skywalking-agent.jar -Dskywalking.agent.service_name=sky-demo -Dskywalking.collector.backend_service=skywalking-skywalking-helm-oap.tools:11800 -Djava.security.egd=file:/dev/./urandom -jar /app.jar"]

参数解释:

-javaagent:/opt/skywalking-agent-9.2.0/skywalking-agent.jar:agent jar包

-Dskywalking.agent.service_name=sky-demo:skywalking中显示的服务名称

-Dskywalking.collector.backend_service=skywalking-skywalking-helm-oap.tools:11800:skywalking 服务端收集的端口

上述参数也可以通过k8s环境变量的方式实现,如下:

containers:  
- name: <example-name>image: <image>ports:- containerPort: <port>env:- name: VA_OPTSvalue: "-Dfile.encoding=utf-8 -Duser.timezone=UTC"- name: JAVA_TOOL_OPTIONSvalue: "-javaagent:/skywalking/agent/skywalking-agent.jar"- name: SW_AGENT_NAMESPACEvalue: "dev"- name: SW_AGENT_NAMEvalue: "dev::example-name"- name: SW_AGENT_COLLECTOR_BACKEND_SERVICESvalue: "skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800"
k8s yaml文件
apiVersion: apps/v1
kind: Deployment
metadata:name: sky-demonamespace: toolslabels:app: sky-demo
spec:replicas: 1selector:matchLabels:app: sky-demotemplate:metadata:labels:app: sky-demospec:containers:- name: sky-demoimage: xxx/sky-demo:v1.5imagePullPolicy: IfNotPresentports:- containerPort: 9020resources:requests:memory: "512Mi"cpu: "200m"limits:memory: "4Gi"cpu: "2000m"

部署成功,即可在skywalking页面显示,下面来说另一种方式

本地调试

idea启动

以端口号为9020的商品服务为例,添加以下JVM启动参数

# skywalking客户端路径
-javaagent:E:\skywalking\skywalking-agent\skywalking-agent.jar
# 服务名称
-Dskywalking.agent.service_name=sky-demo
-Dskywalking.collector.backend_service=skywalking-skywalking-helm-oap.tools:11800

如图所示:

在这里插入图片描述

最终效果

在这里插入图片描述

该页面中包含四个标签页:Service、Topology、Trace、Log。

  • Service:微服务列表。类比eureka服务端的服务列表。在该列表中,发现其表格中包含了以下几列

    • Service Groups:服务分组。

      当我们启动服务时,在JVM启动参数中为其添加了skywalking的服务名称-Dskywalking.agent.service_name=sky-demo,如果需要为该服务指定分组,则需要以 分组名::服务名 配置服务名称。

      例如我们需要将商品服务的分组设置为test,则将该参数修改为-Dskywalking.agent.service_name=test::sky-demo。

    • Service Names:服务名称。

    • Load(calls/min):平均每分钟调用次数。

    • Success Rate(%):调用成功率。

    • Latency(ms):延迟。

    • apdex:应用性能指数。

  • Topology:服务拓扑图。

  • Trace:服务调用链路。

  • Log:服务调用日志。

查看服务实例

在这里插入图片描述

修改实例名称

由于skywalking生成的实例名称有默认规则,我们可以对其进行修改,以增加各个服务实例的辨识度。

在项目的JVM启动参数中添加配置:-Dskywalking.agent.instance_name=实例名称,且可以发现实例名称支持中文

踩坑点

本地调试连接不上skywalking 服务端,就是服务怎么都注册不上去!

  • 检查 skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800 host和port是否正确

  • 检查k8s的ingress是否支持grpc,并且需要在ingress和ingress controller开启grpc。

如果开启了还是注册不上去,查看日志报错信息,在java客户端,找到agent的包,里面有个logs文件夹,进去查看具体报错详情。

运行一段时间后,发现服务端起不起来

报错信息为:

table: xxx does not exist. OAP is running in 'no-init' mode, waiting...

如果采用公有的helm部署,大概率会出现这种问题

这个是由于Skywalking的TTL失效bug引起,这种情况是es做了日志保存时间策略,导致数据删除,有两种解决方案:

  • 在es中删除skywalking相应的index和template,然后重启oap服务;

  • helm镜像仓库中添加以下内容:

    ui-deployment.yaml文件下添加:

    apiVersion: apps/v1
    kind: Deployment
    .
    .
    {{- end }}initContainers:{{- include "skywalking.containers.wait-for-storage" . | nindent 6 }}{{- include "skywalking.containers.oap-init-job" . | nindent 6 }}
    

    _helpers.tpl添加:

    # Template for oap init job container 
    {{- define "skywalking.containers.oap-init-job" -}}
    - name: oap-init-jobimage: {{ .Values.oap.image.repository }}:{{ required "oap.image.tag is required" .Values.oap.image.tag }}imagePullPolicy: {{ .Values.oap.image.pullPolicy }}env:- name: JAVA_OPTSvalue: "{{ .Values.oap.javaOpts }} -Dmode=init"{{- include "skywalking.oap.envs.storage" . | nindent 2 }}{{- range $key, $value :=  .Values.oap.env }}- name: {{ $key }}value: {{ $value | quote }}{{- end }}
    {{- end -}}
    

    官方issue:table: alarm_record does not exist. OAP is running in ‘no-init’ mode, waiting… retry 3s later. · Issue #4938 · apache/skywalking (github.com)

k8s服务端启动过程中,每次日志信息还没加载完,就重启,并且日志没有任何报错信息

解决方案:

startupProbe.periodSeconds尽量调大一点

oap:image:repository: skywalking.docker.scarf.sh/apache/skywalking-oap-servertag: 9.7.0  # Must be set explicitlypullPolicy: AlwaysstorageType: elasticsearchenv:SW_CORE_RECORD_DATA_TTL: "7" # 设置记录数据的保留时间SW_CORE_METRICS_DATA_TTL: "7" # 经过聚合处理的指标数据的保留时间# 官方健康监测默认值是10s,太短了,会认为一直失败,导致重启startupProbe:tcpSocket:port: 12800failureThreshold: 9periodSeconds: 30

拓展

sidecar方式

主要讲解在Kubernetes Pod initContainer 中执行Shell指令,将agent复制到共享磁盘里面,并且将 apm-trace-ignore-plugin.jar 插件拷贝至 plugins 文件夹,并配置需要忽略的路径。

apiVersion: apps/v1
kind: Deployment
metadata:namespace: dmp-ns1name: daoshop-user-centerlabels:app: daoshop-user-center
spec:selector:matchLabels:app: daoshop-user-centertemplate:metadata:labels:app: daoshop-user-centerspec:# refs: https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-initialization/initContainers:- name: dx-monitor-agent-sidecarimage: registry.dx.io/daocloud-dmp/dx-monitor-agent-sidecar:release-2.3.0-0b0cbd1imagePullPolicy: IfNotPresent# 将trace-ignore插件拷贝至`plugins`目录下。# 添加相关配置,这里将忽略追踪 `/api/sail/**` 为前缀的URL。command: - "sh"- "-c"- > mv /sidecar/skywalking/agent/optional-plugins/apm-trace-ignore-plugin-6.5.0-SNAPSHOT.jar /sidecar/skywalking/agent/plugins; echo 'trace.ignore_path=${TRACE_IGNORE_PATH:/eureka/**,/api/sail/**}' >> /sidecar/skywalking/agent/config/apm-trace-ignore-plugin.config; cp -r /sidecar /target; volumeMounts:- name: sidecarmountPath: /targetcontainers:- image: {{ daoshop-user-center.image }}name: daoshop-user-centerresources:requests:memory: "2048Mi"cpu: "500m"limits:memory: "2048Mi"cpu: "500m"ports:- containerPort: 18081env:- name: JAVA_OPTSvalue: "-javaagent:/sidecar/sidecar/skywalking/agent/skywalking-agent.jar" - name: SW_AGENT_NAMEvalue: apm-demo- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES  value: dx-skywalking-oap-ng.dx-pilot.svc:11800volumeMounts:- name: sidecarmountPath: /sidecarvolumes:- name: sidecar  #共享agent文件夹emptyDir: {}
---
apiVersion: v1
kind: Service
metadata:name: daoshop-user-center
spec:type: NodePortports:- port: 18081selector:app: daoshop-user-center

参考链接

skywalking_理想万岁万万岁的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/321305.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LAMMPS学习】八、基础知识(5.8)LAMMPS 中热化 Drude 振荡器教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

SpringBoot中HandlerInterceptor拦截器的构建详细教程

作用范围&#xff1a;拦截器主要作用于Spring MVC的DispatcherServlet处理流程中&#xff0c;针对进入Controller层的请求进行拦截处理。它基于Java的反射机制&#xff0c;通过AOP&#xff08;面向切面编程&#xff09;的思想实现&#xff0c;因此它能够访问Spring容器中的Bean…

如何解决3D模型变黑或贴图不显示的问题---模大狮模型网

在进行3D建模和视觉渲染时&#xff0c;经常会遇到模型表面变黑或贴图不显示的问题&#xff0c;这可能严重影响最终视觉效果的质量。这些问题通常与材质设置、光照配置或文件路径错误有关。本文将探讨几种常见原因及其解决方法&#xff0c;帮助3D艺术家和开发者更有效地处理这些…

TinyXML-2介绍

1.简介 TinyXML-2 是一个简单、小巧的 C XML 解析库&#xff0c;它是 TinyXML 的一个改进版本&#xff0c;专注于易用性和性能。TinyXML-2 用于读取、修改和创建 XML 文档。它不依赖于外部库&#xff0c;并且可以很容易地集成到项目中。 tinyXML-2 的主要特点包括&#xff1a…

回归预测 | Matlab实现基于CNN-SE-Attention-ITCN多特征输入回归组合预测算法

回归预测 | Matlab实现基于CNN-SE-Attention-ITCN多特征输入回归组合预测算法 目录 回归预测 | Matlab实现基于CNN-SE-Attention-ITCN多特征输入回归组合预测算法预测效果基本介绍程序设计参考资料 预测效果 基本介绍 【模型简介】CNN-SE_Attention结合了卷积神经网络&#xff…

武汉星起航:精准布局,卓越服务——运营交付团队领跑亚马逊

在全球电商浪潮中&#xff0c;亚马逊平台以其独特的商业模式和全球化的市场布局&#xff0c;吸引了无数商家和创业者的目光。在这个充满机遇的市场中&#xff0c;武汉星起航电子商务有限公司凭借其专业的运营交付团队&#xff0c;以其独特的五对一服务体系和精准的战略布局&…

Azure AKS日志查询KQL表达式

背景需求 Azure&#xff08;Global&#xff09; AKS集群中&#xff0c;需要查询部署服务的历史日志&#xff0c;例如&#xff1a;我部署了服务A&#xff0c;但服务A的上一个版本Pod已经被杀掉由于版本的更新迭代&#xff0c;而我在命令行中只能看到当前版本的pod日志&#xff…

Git推送本地项目到gitee远程仓库

Git 是一个功能强大的分布式版本控制系统&#xff0c;它允许多人协作开发项目&#xff0c;同时有效管理代码的历史版本。开发者可以克隆一个公共仓库到本地&#xff0c;进行更改后将更新推送回服务器&#xff0c;或从服务器拉取他人更改&#xff0c;实现代码的同步和版本控制。…

普洱茶泡多少茶叶才算淡茶?

普洱茶淡茶一般放几克茶叶&#xff0c;品深茶官网根据多年专业研究与实践结果&#xff0c;制定了淡茶冲泡标准。在冲泡普洱茶淡茶时&#xff0c;茶叶的投放量是关键因素之一。淡茶冲泡标准旨在保持茶汤的清爽口感&#xff0c;同时充分展现普洱茶的独特风味。 根据《品深淡茶冲…

题目:吃奶酪

问题描述&#xff1a; 解题思路&#xff1a; 枚举每种吃奶酪顺序&#xff0c;并计算其距离&#xff0c;选择最小的距离即答案。v数组&#xff1a;记录顺序。 注意点&#xff1a;1. 每次用于min的s需要重置为0。 2. 实数包括小数&#xff0c;所以结构体内x,y为double类型。 3. 第…

C++变量的作用域与存储类型

一 变量的作用域和存储类型 1 变量的作用域(Scope) 指在源程序中定义变量的位置及其能被读写访问的范围分为局部变量(Local Variable)和全局变量(Global Variable) 1&#xff09;局部变量(Local Variable) 在语句块内定义的变量 形参也是局部变量 特点&#xff1a; 生存期是…

Windows系统和unbtun系统连接usb 3.0海康可见MVS和红外艾睿相机

一.海康可见USB3.0工业面阵相机 海康usb相机需要去海康官网上下载对应系统的MVS客户端及SDK开发包 海康机器人-机器视觉-下载中心 选择Windows系统和unbtun&#xff08;我是linux aarch64,所以选择了对应压缩包解压&#xff09; Windows系统 1.双击安装包进入安装界面&…

代码随想录第52天|300.最长递增子序列 718. 最长重复子数组

300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之子序列问题&#xff0c;元素不连续&#xff01;| LeetCode&#xff1a;300.最长递增子序列_哔哩哔哩_bilibili 给你一个整数数组 nums &#xff0…

数据结构(c):队列

目录 &#x1f37a;0.前言 1.什么是队列 2. 队列的实现 2.1定义队列节点 2.2定义队列 2.3队尾入队列 2.4判断队列是否为空 2.5队头出队列 2.6 队列首元素 2.7队尾元素 2.8队列内的元素个数 2.9销毁队列 3.试运行 &#x1f48e;4.结束语 &#x1f37a;0.前言 言C之…

计算图:深度学习中的链式求导与反向传播引擎

在深度学习的世界中&#xff0c;计算图扮演着至关重要的角色。它不仅是数学计算的图形化表示&#xff0c;更是链式求导与反向传播算法的核心。本文将深入探讨计算图的基本概念、与链式求导的紧密关系及其在反向传播中的应用&#xff0c;旨在为读者提供一个全面而深入的理解。 计…

学习软考----数据库系统工程师24

关系数据库设计基础知识 函数依赖 码 多值依赖 性质

QT creator qt6.0 使用msvc2019 64bit编译报错

qt creator qt6.0报错&#xff1a; D:\Qt6\6.3.0\msvc2019_64\include\QtCore\qglobal.h:123: error: C1189: #error: "Qt requires a C17 compiler, and a suitable value for __cplusplus. On MSVC, you must pass the /Zc:__cplusplus option to the compiler."…

【大模型学习】私有大模型部署(基础知识)

私有大模型 优点 保护内部隐私 缺点 成本昂贵 难以共享 难以更新 大模型底座 基础知识点 知识库 知识库是什么&#xff1f; 知识库的作用是什么&#xff1f; 微调 增强大模型的推理能力 AI Agent 代理&#xff0c;与内部大模型进行交互 开源 and 闭源 是否可以查…

PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM

本文首发于公众号&#xff1a;机器感知 PTQ4SAM、Mamba-Attention、AniTalker、IceFormer、U-DiTs、CogDPM PTQ4SAM: Post-Training Quantization for Segment Anything Segment Anything Model (SAM) has achieved impressive performance in many computer vision tasks. Ho…

Linux\_c输出

第一条Linux_c输出 初界面 : ls # 显示目录下的文件cd # 进入到某个目录 # 比如 我进入了Codels # 发现没有显示, 说明为文件下为空vim cpucdoe.c # 创建一个 .c的源码文件进入到了vim的编辑界面: i # 按i 就可以进行编辑 , 下面显示插入标识在编辑模式下, 可以通…