Skywalking8.0.1在K8s中的使用

港控/mmm° 2022-11-26 07:47 429阅读 0赞

Skywalking8.0.1在K8s中的使用

1. 准备

ElasticSearch 7.5.1
SkyWalking APM 8.0.1

2. ElasticSearch准备

此处es使用helm3部署,地址 https://github.com/elastic/helm-charts/tree/7.8.1/elasticsearch

clone

将 helm-charts clone 到本地

  1. git clone https://github.com/elastic/helm-charts.git
  2. git checkout 7.8.1

edit

按需修改 helm-charts/elasticsearch/values.yaml 中 imageTag,我需要7.5.1

  1. imageTag: "7.5.1"

install

install:

  1. cd helm-charts
  2. helm install es4skywalking .\es4skywalking\ -n fn-rec

check

查看是否正常启动

  1. kubectl get pods -n <your-namespace> -o wide
  2. kubectl describe pod <pod-name> -n <your-namespace>

3. skywalking部署

同样通过helm3来安装。

clone

  1. git clone https://github.com/apache/skywalking-kubernetes.git

使用已有的es部署

  1. $ cd chart
  2. $ helm repo add elastic https://helm.elastic.co
  3. $ helm dep up skywalking
  4. $ helm install <release_name> skywalking -n <namespace> \
  5. --set elasticsearch.enabled=false \
  6. --set elasticsearch.config.host=<es_host> \
  7. --set elasticsearch.config.port.http=<es_port> \
  8. --set elasticsearch.config.user=<es_user> \
  9. --set elasticsearch.config.password=<es_password>

如:

  1. helm install my-skywalking .\skywalking\ -n fn-rec --set elasticsearch.enabled=false --set elasticsearch.config.host=elasticsearch-skywalking-master-headless --set elasticsearch.config.port.http=9200

check

同样检查是否正确

  1. kubectl get pods -n <your-namespace> -o wide
  2. kubectl describe pod <pod-name> -n <your-namespace>

4. 项目接入skywalking agent

修改目标项目的dockerFile

  1. FROM maven:3.6.3-openjdk-14 AS MAVEN_BUILD
  2. ARG PROFILE
  3. COPY pom.xml /build/
  4. COPY src /build/src/
  5. WORKDIR /build/
  6. RUN mvn clean package -P${PROFILE} -Dmaven.test.skip=true
  7. FROM adoptopenjdk/openjdk14-openj9
  8. WORKDIR /app
  9. COPY --from=MAVEN_BUILD /build/target/demo.jar /app
  10. # 加javaagent参数很重要
  11. ENTRYPOINT ["java ", "-javaagent:/sidecar/agent/skywalking-agent.jar", "--enable-preview","-jar", "demo.jar"]

k8s.yaml

注意 : 镜像中没有JAVA_OPTS这个ENV实际上这个地方不会生效,所以在docker中 -javaagent:/sidecar/agent/skywalking-agent.jar 是需要的。

示例

  1. kind: Deployment
  2. apiVersion: apps/v1
  3. metadata:
  4. name: search-zd
  5. labels:
  6. app: search-zd
  7. spec:
  8. replicas: 1
  9. selector:
  10. matchLabels:
  11. app: search-zd
  12. template:
  13. metadata:
  14. labels:
  15. app: search-zd
  16. annotations:
  17. prometheus.io/scrape: 'true'
  18. prometheus.io/path: '/actuator/prometheus'
  19. prometheus.io/port: '8088'
  20. spec:
  21. initContainers:
  22. - name: skywalking-agent
  23. #使用本地打包测试镜像,正式环境可以使用dockerhub或者私服的镜像容器中心的容器
  24. image: 'search-zd/skywalking-agent:v1.8.0.1'
  25. command: ['cp','-rf','/skywalking/agent/','/sidecar']
  26. imagePullPolicy: IfNotPresent
  27. volumeMounts:
  28. - name: sidecar
  29. mountPath: /sidecar
  30. containers:
  31. - name: search-zd
  32. image: 'search-zd/fn-es-search:1.0.0.5'
  33. env:
  34. # 镜像中没有JAVA_OPTS这个ENV实际上这个地方不会生效,所以在docker中 -javaagent:/sidecar/agent/skywalking-agent.jar 是需要的。
  35. - name: JAVA_OPTS
  36. value: -javaagent:/sidecar/agent/skywalking-agent.jar
  37. - name: SW_AGENT_NAME
  38. value: search-zd
  39. - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
  40. value: fn-skywalking-oap:11800
  41. ports:
  42. - name: server
  43. containerPort: 8080
  44. protocol: TCP
  45. - name: management
  46. containerPort: 9080
  47. protocol: TCP
  48. livenessProbe:
  49. tcpSocket:
  50. port: 8080
  51. timeoutSeconds: 5
  52. readinessProbe:
  53. tcpSocket:
  54. port: 8080
  55. timeoutSeconds: 5
  56. resources:
  57. limits:
  58. cpu: 2000m
  59. memory: 4Gi
  60. requests:
  61. cpu: 500m
  62. memory: 2Gi
  63. imagePullPolicy: IfNotPresent
  64. volumeMounts:
  65. - name: sidecar
  66. mountPath: /sidecar
  67. restartPolicy: Always
  68. volumes:
  69. - name: sidecar
  70. emptyDir: {}
  71. ---
  72. apiVersion: v1
  73. kind: Service
  74. metadata:
  75. name: search-zd
  76. spec:
  77. type: ClusterIP
  78. ports:
  79. - name: server
  80. port: 80
  81. targetPort: 8080
  82. - name: management
  83. port: 9080
  84. targetPort: 9080
  85. selector:
  86. app: search-zd

部署

apply:

  1. kubectl apply -f k8s.yaml -n <namespace>

checkout:

  1. kubectl get pods -n <your-namespace> -o wide
  2. kubectl describe pod <pod-name> -n <your-namespace>

简单查看ui:使用 port-forward 转发一下

  1. kubectl port-forward <target-pod> 8080:8080 -n <namespace>

5. 文档

中文文档:https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/8.0.0/README.md
官网:https://skywalking.apache.org/zh/downloads/

发表评论

表情:
评论列表 (有 0 条评论,429人围观)

还没有评论,来说两句吧...

相关阅读

    相关 k8s控制器使用详解

    一、什么是控制器 控制器是管理pod的中间层,只需要告诉Pod控制器,想要创建多少个什么样的Pod,它会创建出满足条件的Pod ; 控制器相当于一个状态机,用

    相关 k8spod使用详解

    一、前言 在之前k8s组件一篇中,我们谈到了pod这个组件,了解到pod是k8s中资源管理的最小单位,可以说Pod是整个k8s对外提供服务的最基础的个体,有必要对Pod做

    相关 k8s】——k8sGC机制

    一、前言       一说到GC,很多人(包括我在内)第一反应是内存的垃圾回收,尤其是javaer们,面试最爱考的八股文就是java的垃圾回收。不过今天要说的这个k8s的