阶段六:微服务项目运维实践之链路追踪

部署链路追踪SkyWalking

ES数据库

image
image

YAML 保存位置: ~/k8s-manifests/skywalking/es-cluster-svc.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/skywalking
cd ~/k8s-manifests/skywalking
vi es-cluster-svc.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: v1
kind: Service
metadata:
  name: es-cluster-svc
  namespace: skywalking
spec:
  clusterIP: None
  selector:
    app: elasticsearch
  ports:
    - name: http            #客户端访问端口
      port: 9200
    - name: transport       #集群之间通信端口  
      port: 9300
      targetPort: 9300
---
# es-cluster.yaml
apiVersion: apps/v1 
kind: StatefulSet
metadata:
  name: es-cluster
  namespace: skywalking
spec:
  serviceName: es-cluster-svc
  replicas: 1               #设置副本数
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels: 
        app: elasticsearch  #Pod标签
    spec:
      imagePullSecrets:
        - name: registry
      initContainers:
        - name: fix-permissions
          image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32
          command: ['sh', '-c', 'chown -R 1000:1000 /usr/share/elasticsearch/data']
          securityContext:
            runAsUser: 0
          volumeMounts:
            - name: elasticsearch-data
              mountPath: /usr/share/elasticsearch/data
        - name: vm-max-map-count
          image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32
          #通过容器部署es,官方要求修改系统内核参数“vm.max_map_count”这个参数控制一个进程可以拥有的最大内存映射区域的数量,通常在运行需要大量内存映射的应用(如 Elasticsearch)时需要调整
          #容器使用 sysctl 命令设置 Linux 内核参数
          command: ["sysctl", "-w", "vm.max_map_count=262144"]
          securityContext:                    #初始容器安全上下文(访问权限)
            privileged: true                  #设置为特权模式,即拥有主机上的root权限



        - name: ulimit
          image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32
          command: ["sh", "-c", "ulimit -n 65536"]
          securityContext:
            privileged: true
      containers:
        - name: es-container
          image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/elasticsearch:7.8.1
          ports:
            # 容器内端口
            - name: http
              containerPort: 9200
            - name: transport
              containerPort: 9300
           #限制CPU数量
          resources:               
            limits:
              cpu: 1000m
            requests:
              cpu: 100m 
          # 设置挂载目录
          volumeMounts:
            - name: elasticsearch-data
              mountPath: /usr/share/elasticsearch/data
          # 设置环境变量
          env:
            - name: TZ
              value: "Asia/Shanghai"
            # 自定义集群名
            - name: cluster.name
              value: k8s-es
            # 定义节点名,使用metadata.name名称
            - name: node.name                 #当前节点在集群名称
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name    #名称通过该属性下定义的值获取,即:es-cluster-0,es-cluster-1,es-cluster-2
            - name: cluster.initial_master_nodes
              # 对应metadata.name名称加编号,编号从0开始
              value: "es-cluster-0"
            # 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
            - name: discovery.seed_hosts
              value: "es-cluster-svc"
            - name: ES_JAVA_OPTS
              value: "-Xms1g -Xmx1g"
  volumeClaimTemplates:
    - metadata:
        name: elasticsearch-data
      spec:
        # 存储卷访问权限为读写
        accessModes: [ "ReadWriteOnce" ]
        # 动态存储名称
        storageClassName: "alicloud-disk-topology-alltype" 
        # 申请资源的大小
        resources:
          requests:
            storage: 20Gi

配置详解:

需要改的项为什么改
namespace: skywalking与实际命名空间一致;使用默认命名空间时可不写。
port: 9200对外暴露的 Service 端口;调用方按此端口访问。
port: 9300对外暴露的 Service 端口;调用方按此端口访问。
targetPort: 9300必须与容器实际监听端口一致。
replicas: 1按可用性和资源容量设置副本数。
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/busybox:1.32替换为实际可拉取的镜像地址和版本。

注意事项:

部署skywalking-oap-server和skywalking-ui服务

YAML 保存位置: ~/k8s-manifests/skywalking/skywalking-oap.yaml

先在 Kubernetes 管理节点执行:

mkdir -p ~/k8s-manifests/skywalking
cd ~/k8s-manifests/skywalking
vi skywalking-oap.yaml

把下方 YAML 全部复制进去;红色字段按当前环境修改;按 Esc 后输入 :wq 保存退出。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: skywalking-oap
  namespace: skywalking
  labels:
    app: skywalking-oap
spec:
  selector:
    matchLabels:
      app: skywalking-oap
  template:
    metadata:
      labels:
        app: skywalking-oap
      annotations:
        sidecar.istio.io/inject: "false"
    spec:
      imagePullSecrets:
        - name: registry
      containers:
        - name: skywalking-oap
          image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/skywalking-oap-server:10.2.0
          env:
            - name: SW_STORAGE
              value: "elasticsearch"
            - name: SW_STORAGE_ES_CLUSTER_NODES
              value: "es-cluster-svc:9200"
            # - name: SW_ES_USER
            #   value: "elastic"
            # - name: SW_ES_PASSWORD
            #   value: "your_password"
            - name: SW_HEALTH_CHECKER
              value: default
            - name: SW_CORE_GRPC_HOST
              value: "0.0.0.0"
            - name: SW_CORE_REST_HOST
              value: "0.0.0.0"

---
apiVersion: v1
kind: Service
metadata:
  labels:
    name: skywalking-oap
  name: skywalking-oap
  namespace: skywalking
spec:
  ports:
    - port: 11800
      targetPort: 11800
      name: grpc
    - port: 12800
      targetPort: 12800
      name: http-query
  selector:
    app: skywalking-oap
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: skywalking-ui
  namespace: skywalking
  labels:
    app: skywalking-ui
spec:
  selector:
    matchLabels:
      app: skywalking-ui
  template:
    metadata:
      labels:
        app: skywalking-ui
      annotations:
        sidecar.istio.io/inject: "false"
    spec:
      imagePullSecrets:
        - name: registry
      containers:
        - name: skywalking-ui
          image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/skywalking-ui:10.2.0
          env:
            - name: SW_OAP_ADDRESS
              value: http://skywalking-oap:12800
          readinessProbe:
            httpGet:
              path: /
              port: 8080
            initialDelaySeconds: 30
            periodSeconds: 5
---
apiVersion: v1
kind: Service
metadata:
  name: skywalking-ui
  namespace: skywalking
  labels:
    app: skywalking-ui
spec:
  type: NodePort
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
      nodePort: 30824
  selector:
    app: skywalking-ui

配置详解:

需要改的项为什么改
namespace: skywalking与实际命名空间一致;使用默认命名空间时可不写。
image: crpi-u2hnpi6tp166p9nj.cn-beijing.personal.cr.aliyuncs.com/itheima2026/skywalking-oap-server:10.2.0替换为实际可拉取的镜像地址和版本。
SW_STORAGE: elasticsearch按当前环境的实际值确认。
SW_STORAGE_ES_CLUSTER_NODES: es-cluster-svc:9200按当前环境的实际值确认。
SW_HEALTH_CHECKER: default按当前环境的实际值确认。
SW_CORE_GRPC_HOST: 0.0.0.0按当前环境的实际值确认。

注意事项:

探针埋点

[root@node1 data]# mkdir jdk-skywalking-agent && cd jdk-skywalking-agent
#下载
[root@master01 jdk-skywalking-agent]# wget https://downloads01-he-fi.apache.org/skywalking/java-agent/9.6.0/apache-skywalking-java-agent-9.6.0.tgz

#构建java基础镜像
[root@node1 jdk-skywalking-agent]# tar -xv -f apache-skywalking-java-agent-9.6.0.tgz
[root@node1 jdk-skywalking-agent]# vim Dockerfile
FROM harbor.lanqicheng.top/library/jdk11:latest
COPY skywalking-agent  /skywalking-agent

#镜像构建
[root@node1 jdk-skywalking-agent]# docker build -t harbor.lanqicheng.top/library/jdk11:skywalking-agent .

注意事项:

修改所有微服务启动参数

#修改所有服务启动参数,其他服务雷同,参照依次进行修改
[root@node1 ruoyi-system]# vim  entrypoint.sh 
java \
-javaagent:/skywalking-agent/skywalking-agent.jar \
-Dskywalking.agent.service_name=ruoyi::ruoyi-system \
-Dskywalking.collector.backend_service=skywalking-oap.skywalking.svc.cluster.local:11800 \
-Dspring.cloud.nacos.config.file-extension=yml \
-Dspring.cloud.nacos.discovery.server-addr=nacos-svc:8848 \
-Dspring.cloud.nacos.config.server-addr=nacos-svc:8848 \
-jar /ruoyi-system.jar

注意事项:

[root@node1 ruoyi-gateway]# vim Dockerfile
#定义基础镜像
FROM harbor.lanqicheng.top/library/jdk11:skywalking-agent

COPY target/ruoyi-gateway.jar /ruoyi-gateway.jar

COPY Shanghai  /usr/share/zoneinfo/Asia/Shanghai

COPY ./entrypoint.sh /

EXPOSE 9200

CMD /bin/sh /entrypoint.sh

#推送所有代码到仓库
[root@node1 RuoYi-Cloud]# cd /root/RuoYi-Cloud
[root@node1 ruoyi-system]# git add .
[root@node1 ruoyi-system]# git commit -m 'skywalking' .
[root@node1 ruoyi-system]# git push

命令作用:

执行结果:

关键参数:

注意事项:

http://101.201.57.48:30824/(每个人的IP地址不一样)

image
image
image
image

metadata: data: alarm-settings.yml: | rules: service_resp_time_rule:

service_sla_rule:

service_resp_time_percentile_rule:

service_instance_resp_time_rule:

database_access_resp_time_rule:

endpoint_relation_resp_time_rule:

hooks: webhook: default: urls:


**注意事项:**



metadata:
  labels:
spec:
  selector:
    matchLabels:
  template:
    metadata:
      labels:
      annotations:
    spec:
      imagePullSecrets:

      containers:

          env:
          volumeMounts:
      volumes:
          configMap:

注意事项:

本文由飞书云文档同步生成。涉及命令、SQL、配置示例时,请以飞书源文档和实际环境执行结果为准。