小工具知识网

当前位置: 首页 > 行业知识 > 在K8S集群中部署SkyWalking

行业知识

在K8S集群中部署SkyWalking

2026-11-10 18:45:43 来源:互联网转载

1. 环境准备

  • K8S 集群
  • kubectl
  • helm

    2. 为什么要部署SkyWalking?

    ���也不道啊,老板说要咱就得上啊。咦,好像可以看到服务的各项指标,像SLA,Apdex这些,主要是能够进行请求的链路追踪,bug排查的利器。

    总之就是不管三七二十一,先整上去。

    3. 部署

    部署其实很简单,参考这个仓库的内容

    https://github.com/apache/skywalking-helm

    3.1 准备配置文件:

    oap:  image:    tag: 9.7.0  storageType: elasticsearch  replicas: 1  env:     SW_CORE_RECORD_DATA_TTL: "10" # 设置记录数据的保留时间    SW_CORE_METRICS_DATA_TTL: "10" # 经过聚合处理的指标数据的保留时间    SW_TELEMETRY: "prometheus"    SW_HEALTH_CHECKER: "default"    SW_ENABLE_UPDATE_UI_TEMPLATE: "true"  readinessProbe:     tcpSocket:      port: 12800    initialDelaySeconds: 50    periodSeconds: 10    failureThreshold: 30  resources:    requests:      memory: 2.6Giui:  image:    tag: 9.7.0elasticsearch:  enabled: true  replicas: 1  minimumMasterNodes: 1  nodeGroup: "single-node"  persistence:     enabled: true  initResources:    requests:      memory: 1.5Gi  clusterHealthCheckParams: "wait_for_status=yellow&timeout=1s"  volumeClaimTemplate:    accessModes: [ "ReadWriteOnce" ]    storageClassName: ebs-hdd    resources:      requests:        storage: 512Gi

    本来我的Skywalking版本是 9.6.0 但是有个bug,Endpoints 页面如果涉及的Endpoint过多就会报错 后面我升级了 9.7.0 版本。

    底层的存储组件使用 单节点ES,存储卷我用的是hdd的,因为是测试的,就省着用。对性能有要求的同学可以使用多节点,挂载SSD类型的磁盘。

    注意调整这两个参数,SW_CORE_RECORD_DATA_TTL和SW_CORE_METRICS_DATA_TTL。

    我使用机械盘,保持10天的数据就到顶了。如果这个值加大,会比较慢。这个根据自己的需求来确定。

    3.2 开始部署

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

    执行需要一些时间,完成后可以在K8S中看到

    ES 的 Stateful Sets

    SkyWalking 的 Deployments

    3.3 更新

    修改配置文件时,需要更新 对应的 helm release

    export HELM_EXPERIMENTAL_OCI=1export SKYWALKING_RELEASE_VERSION=4.5.0helm upgrade -f ./values-my-es.yaml "skywalking" oci://registry-1.docker.io/apache/skywalking-helm --version "${SKYWALKING_RELEASE_VERSION}" -n skywalking

    4. 项目集成

    接入采用initContainer无侵入方式在K8s集成,原理是共享磁盘。

    4.1 增加挂载点

    - name: skywalking-agent  emptyDir: {}

    4.2 创建initContainer

    initContainers:- name: agent-container      image: apache/skywalking-java-agent:9.1.0-alpine      imagePullPolicy: IfNotPresent      volumeMounts:      - name: skywalking-agent      mountPath: /agent      command: [ "/bin/sh" ]      args: [ "-c", "cp -R /skywalking/agent /agent/" ]- name: skywalking-agent      emptyDir: {}

    4.3 Container 增加skywalking的配置

    containers:  - name:   image:   ports:  - containerPort:   env:  - name: VA_OPTS    value: "-Dfile.encoding=utf-8 -Duser.timezone=UTC"  - name: JAVA_TOOL_OPTIONS    value: "-javaagent:/skywalking/agent/skywalking-agent.jar"  - name: SW_AGENT_NAMESPACE    value: "dev"  - name: SW_AGENT_NAME    value: "dev::example-name"  - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES    value: "skywalking-skywalking-helm-oap.skywalking.svc.cluster.local:11800"    volumeMounts:- name: skywalking-agent  mountPath: /skywalking

    这样配置之后,启动 deployment 时,会先初始化一个 initContainer,然后在启动核心的 container pod。

    完美

    Ref

    apache/skywalking-helm: Apache SkyWalking Kubernetes Deployment Helm Chart (github.com)

上一篇:微信支付夺宝攻略,全面指南与便捷支付操作指南

下一篇:怎么样使用谷歌服务器?