1.思路如下:

1.sykwalking的安装配置(k8s集群部署配置)

2.sykwalking-agent探针的集成到微服务项目(是打成基础镜像里,然后指定参数(configMap中配置java项目的环境变量)运行,还是以sideCar边车的方式运行?还是直接集成到微服务项目中?)项目中集成sykwalking相关的包

3.基础镜像构建和项目的Dockerfile的编写

4.私有Hub的安装部署、jenkins的安装部署、jenkins流水线脚本的编写

5.构建项目并运行看最终的结果

注意:服务器或虚拟机(配置好网络)上需要提前安装docker和k8s、

熟悉docker/jenkins/k8s/java/linux等

1.1-构建带有skywalking-agent的应用基础镜像

路径:

[root@ecs-01-0002 temp]# pwd
/opt/temp

Dockerfile文件如下:

ROM openjdk:8-jre-alpine
VOLUME /tmp
ADD ./agent/ /agent/
#下面两个是指定语言和安装字体相关的包
ENV LANG en_US.UTF-8
RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig && rm -rf /var/cache/apk/*

第一行的ROM的基础镜像可以使用自己制作的基础镜像也是可以的,前提是需要带有java的环境jre是最小的运行环境或者是装有JDK的环境配置

在该路径下执行如下命令:


1.docker build -t openjdk:8-jre-alpine-apm-8.11 .
在当前路径下构建应用的基础镜像,名称为:openjdk:8-jre-alpine-apm-8.112.docker tag  openjdk:8-jre-alpine-apm-8.11
仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11推送私有hub仓库打的tag
3.docker push 仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11

推送应用基础镜像
下面两步骤可以不用执行,除非此服务是安装了jenkins的服务器且有构建记录,需要把之前构建的openjdk:8-jre-alpine-apm-8.11这个镜像删除,否则jenkins构建项目是默认使用本地已经存在的镜像,就不会去远端私有镜像仓库中拉取docker rmi -f 镜像id--xxxxx
4.docker pull 仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11重新从私有仓库拉取openjdk:8-jre-alpine-apm-8.11
5.docker tag  仓库地址或域名/项目名/openjdk:8-jre-alpine-apm-8.11 openjdk:8-jre-alpine-apm-8.11如果没有tag为openjdk:8-jre-alpine-apm-8.11的镜像需要重新给拉取的镜像打tag为openjdk:8-jre-alpine-apm-8.11

注意该jenkiens服务器上需要配置hub推送免密登录的配置,这个就自行百度了

1.2-java的微服务项目配置

项目中的Dockerfile文件如下

FROM openjdk:8-jre-alpine
VOLUME /tmp
ADD target/*.jar app.jar
RUN echo "Asia/Shanghai" > /etc/timezone
ENTRYPOINT java ${JAVA_OPTS} ${JAVA_PARAMETERS} ${SERVER_NAME} -jar /app.jar

<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-logback-1.x</artifactId><version>8.4.0</version>
</dependency>
<dependency><groupId>org.apache.skywalking</groupId><artifactId>apm-toolkit-trace</artifactId><version>8.4.0</version>
</dependency>

1.3-jenkins流水线脚本配置

pipeline {agent anyenvironment {image_tag="xxxx"git_address="xxxx"git_branch="xxxx"git_auth="xxxxx"registry_name="xxxx"registry_pwd="xxx"container_name="xxxx"JAVA_OPTS="-Xms512m -Xmx512m -Xss256K"}stages {stage("拉取代码") {steps {git branch: "${git_branch}", credentialsId: "${git_auth}",url: "${git_address}"}}stage('质量扫描') {steps {echo '跳过扫描'}}stage('maven编译') {steps {sh 'mvn -B -f ./pom.xml clean install -DskipTests'}}stage('编译镜像') {steps {sh '''cp target/*.jar ./docker build -t ${image_tag} .'''sh 'docker login --username=${registry_name} --password=${registry_pwd} harbor.yndysc.com'sh 'docker push ${image_tag}'sh 'docker rmi ${image_tag}'}}}
}

1.3.4-部署服务器上的部署yml文件编写

xxxx-server.yml

apiVersion: apps/v1 #版本
kind: Deployment #k8s资源类型是Deployment
metadata: #Deployment 的元数据name: xxx #资源名称 (xxx-deployment)namespace: xxxxx #资源所属namespacelabels:#绑定要选择镜像的标签
app: xxxxx #容器名字
spec:replicas: 4 #容器发布的副本个数selector:#标签选择器matchLabels:app: xxxx #容器名字template: #模板配置metadata: #模板元数据labels:#模板标签(标签选择器)app: xxxx #容器名字spec:#副本containers: #数组可以有多个- name: xxxx #镜像名字image: xxxxx #镜像名称(tag:版本)imagePullPolicy: Always  #镜像拉取策略(总是拉取)ports:- containerPort: 80 #容器端口env: #容器运行的环境变量配置(是一个数组可以有多个)- name: JAVA_OPTS #java启动参数环境变量配置valueFrom: #环境变量的值来自于configMap的资源configMapKeyRef:name: nacos-elk-configmapkey: JAVA_OPTS- name: JAVA_PARAMETERSvalueFrom:configMapKeyRef:name: nacos-elk-configmapkey: JAVA_PARAMETERS- name: SERVER_NAMEvalue: -Dskywalking.agent.service_name=[链路追踪的服务名称xxx]livenessProbe:#应用探活配置(探针)httpGet:path: /actuator/healthport: 80initialDelaySeconds: 50timeoutSeconds: 2readinessProbe:#读取探活配置(探针)httpGet:path: /actuator/healthport: 80initialDelaySeconds: 50timeoutSeconds: 2resources:#pod资源限制配置requests:ephemeral-storage: "1Gi"memory: "1Gi"cpu: 200mlimits:ephemeral-storage: "10Gi"memory: "2Gi"cpu: 1000mimagePullSecrets: #镜像拉取策略- name: secret-name-harbor #私服拉取dnsConfig: #dns配置options:- name: ndotsvalue: "5"
kubectl create -f  xxxx-server.yml发布服务

Pod服务启动后进入容器:

1.3.5-k8s的ConfigMap编写

参看:

https://www.cnblogs.com/shaozhiqi/p/12442065.html

https://www.cnblogs.com/ricklz/p/14930801.html#%E7%90%86%E8%A7%A3configmap


lkubectl get configmap nacos-elk-configmap -n xxx-system -o yaml

lnacos-elk-configmap:config的名字

lxxx-system 是configMap资源所属的nameSpace

查看configMap的yml

apiVersion: v1
data:JAVA_OPTS: -Xms512m -Xmx512mJAVA_PARAMETERS: -javaagent:/agent/skywalking-agent.jar -Dskywalking.trace.ignore_path=/,Lettuce/**,Jedis/scriptLoad,/Lettuce/INFO,/actuator/**,/**/actuator/health,Redisson/AUTH-Dspring.profiles.active=prod -Dcloud.nacos_url=nacous注册中心的地址-Dcloud.nacos_namespace=nacous中的namespace的id    -Delk.logger.destination=elk的地址 -Dskywalking.collector.backend_service=skywalking服务server的ip:port
kind: ConfigMap

1.3.6-k8s探针配置

微服务项目的pom文件中需要加入如下pom依赖


<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId><version>2.3.2.RELEASE</version>
</dependency>

Nacos中加入配置:


management:endpoints:web:exposure:#设置health端点include: "health"

curl 172.16.0.38:9001/actuator/health

curl pod的ip:应用的端口,看到如下打印信息是只有health断点暴露了,没有其它的断点暴露

1.3.7-K8s常用命令


kubectl  logs  pod名称  -n xxxx-system -f | grep 'xxx2' -C 200 #搜索日志中含有xxx2日志的前后200行输出
k -n xxx-system get po -o wide | grep xxxxx #简写查pod信息
Kubectl  logs  pod名称  -n  xxxx-system -f #查日志
kubectl  delete pod  pod名称-n xxxx-system #删除pod后重新拉取一个新的pod
kubectl  get pod -n xxxx-system | grep xxxx
kubectl  exec -it  pod名称 -n  xxx-system sh  #进入pod中
kubectl  cp  xxx-system/pod名称:/xxx-server.jar  /root/xxx_yaml/xx-server.jar
将从某个nameSpace/pod中的某个路径下的某个文件 拷贝到 服务的某路径下的某文件kubectl get configmap  configmap的  -n  xxxx-system -o yaml 参看conMap的yml信息

基SkyWalking实现对k8s集群中微服务的链路追踪相关推荐

  1. 通过memcached来实现对tomcat集群中Session的共享策略 .

    近期在做一套集群的实现,实现的方案是在Linux下完成对Apache + Tomcat 负载均衡的功能. 但是实现了该集群后,发现登陆系统后,每次都会被拦截回登录页面,造成该现象的原因是Session ...

  2. 通过Memcached来实现对Tomcat集群中Session的共享策略

    大家必须要确保两件事情已经完成: 第一:首先确认memcached是否已经启动,可以通过 netstat -lp | grep memcached 来查看是否有11211的进程存在. 注意:11211 ...

  3. 终于解决 k8s 集群中部署 nodelocaldns 的问题

    终于解决 k8s 集群中部署 nodelocaldns 的问题 参考文章: (1)终于解决 k8s 集群中部署 nodelocaldns 的问题 (2)https://www.cnblogs.com/ ...

  4. K8S集群中Pod挂载Storageclass存储卷异常排查思路

    K8S集群中Pod挂载Storageclass存储卷异常排查思路 故障描述: Jenkins是在K8S集群中部署的,Jenkins使用的各种资源以及全部创建了,但是Jenkins的Pod依旧无法启动, ...

  5. K8S集群中Pod资源处于CrashLoopBackOff状态排查思路

    K8S集群中Pod资源处于CrashLoopBackOff状态排查思路 文章目录 K8S集群中Pod资源处于CrashLoopBackOff状态排查思路 1.Pod资源处于CrashLoopBackO ...

  6. K8S集群中Pod与Pod之间网络故障排查思路

    K8S集群中Pod与Pod之间网络故障排查思路 文章目录 K8S集群中Pod与Pod之间网络故障排查思路 1.Pod与Pod之间通信故障 2.Pod与Pod之间网络通信故障排查思路 1.Pod与Pod ...

  7. K8S集群中Pod资源常见的异常状态以及排查思路

    K8S集群中Pod资源常见的异常状态以及排查思路 1.Pod资源的结构 Pod资源中会有一个基础容器Pause容器,每一个Pod资源下都会有一个Pause容器,Pause容器负责创建一个虚拟网络和存储 ...

  8. K8S集群中Pod资源数据丢包排查思路

    K8S集群中Pod资源数据丢包排查思路 Pod资源可能会由于网络原因产生丢包的现象. 当Pod资源存在丢包的现象时,会出现下面的报错: Connect to 100.111.156.74 port 5 ...

  9. K8S集群中Pod资源处于Terminating或Unknown状态排查思路

    K8S集群中Pod资源处于Terminating或Unknown状态排查思路 文章目录 K8S集群中Pod资源处于Terminating或Unknown状态排查思路 1.Pod资源处于Terminat ...

最新文章

  1. 实战:人脸识别的Arcface实现 | CSDN博文精选
  2. 10个免费在线逻辑关系图表图形设计制作工具
  3. python协程学习——写个并发获取网站标题的工具
  4. 《架构漫谈》阅读笔记
  5. 获取namespace
  6. c语言指针数组 难点总结,C语言之指针与数组总结
  7. 校招启动 | 2021 神策未来星全面启航,只差 1 个你!
  8. 深度学习之基于Tensorflow2.0实现Xception网络
  9. C语言之sprintf使用总结
  10. 多次点击android版本出现棒棒糖,android – 为前棒棒糖设备创建循环显示
  11. 啥?!BM25 比语义向量检索效果好?
  12. NO.109 禅道“红火”新年小礼,祝大家2014红红火火~~
  13. 中国移动手机支付开放平台网站服务协议
  14. Payment支付平台API接口文档
  15. 网易云音乐 最美的评论
  16. tp在计算机软件方面是什么意思,tp屏幕什么意思
  17. 题8:二叉树的下一个结点
  18. python中turtle库基本函数
  19. @Select注解动态sql语句
  20. 如何通过结构分析法分析数据?

热门文章

  1. android 11 获取Imeid,Iccid
  2. (R语言)离差阵 和 一些图的画法
  3. ue4如何链接html5设备,UE4怎么对接Steam
  4. 一套日本软件开发的详细设计说明书格式(二) (转)
  5. 三种常用SoC片上总线的分析与比较
  6. js身份证号有效性验证
  7. GCD的一些测试和总结
  8. 家用中央空调保养与不保养的区别在哪里?
  9. 2022年数维杯数学建模A题银行效率评价与破产成因分析求解全过程文档及程序
  10. 关于io操作关闭的几种方式