跳到主要内容

安装部署

前提条件

  • Kubernetes版本大于等于1.11 或 OpenShift版本大于等于3.10。

  • Kubernetes集群必须安装kubectl,所有命令都需要在kubectl控制节点执行。OpenShift集群必须安装oc,所有命令都需要在oc控制节点执行。

  • 集群必须开启MutatingAdmissionWebhook插件(OpenShift 3.x平台默认是关闭的)。

  • 集群内空闲的资源必须大于探针需要最小消耗的资源:4Core CPU、16GB内存。

    说明

    • Kubernetes UniAgent已经集成了Agent Collector,因此部署前不需要部署Agent Collector。
    • 由于 Agent Collector 消耗的资源比较高,为了不影响业务应用Pod的运行,建议通过nodeSelector将Agent Collector固定到一些特定的Node上。

部署概述

  1. 先确定探针最新版本,并将探针镜像上传到私有仓库,具体步骤见私有镜像仓库部署

  2. 生成部署探针的yaml文件

  3. 使用kubectl命令或oc命令部署yaml文件,并查看探针Pod状态是否正常

  4. 对应用所在的namespace打tingyun-injection=enabled标签, 对应用Pod打tingyun-agent-injected: "true"标签

  5. 重启应用Pod,验证监控数据

部署探针:生成yaml文件

  1. 登录基调听云观云平台。

  2. 在左侧导航栏中选择全部应用>部署状态

  3. UniAgents页面的右上角单击新增,新部署UniAgent。

  4. 选择Kubernetes或OpenShift部署平台。

    OpenShift平台下仅支持部署APM探针,不支持部署Infra探针。

  5. 配置Kubernetes基础信息。

    k8s-install.png

    • 集群名称:UniAgent 将部署到的 Kubernetes 集群名称。下方的 部署环境业务系统 会自动同步此信息。

    • Kubernetes 版本:默认选择 1.18+,可选版本包括 1.18+1.14–1.171.11–1.13。请确保所选版本与实际使用的 Kubernetes 版本一致。

    • 私有仓库地址:需要将探针镜像上传至私有镜像仓库。详细步骤请参考 私有镜像仓库部署

    • Namespace:UniAgent 部署所在的命名空间。默认值为 tingyun。可自定义命名,但建议使用独立的 Namespace 以避免冲突。

    • 部署环境:Kubernetes 集群所在的环境名称。默认与 集群名称 联动,也可单独填写。名称可包含字母、数字、下划线 (_) 和中划线 (-)。

    • 业务系统:监控数据所属的业务系统。默认与 集群名称 联动,也可单独填写。
      UniAgent 监控的应用将默认归属此业务系统。若填写的业务系统不存在,听云报表系统会自动创建一个同名业务系统。名称可包含字母、数字、下划线 (_) 和中划线 (-)。

    • APM 激进模式

      • 关闭时:需要先为 Namespace 打标签,再为 Deployment 打标签,才能注入 APM 探针。
      • 开启时:会自动为所有已打标签的 Namespace 下的应用注入 APM 探针。
    • 启用 Infra 功能:启用后可监控节点级资源(如 CPU、内存、文件系统用量)及应用日志。此功能需以特权模式运行。

    • 监控文件系统:需挂载 Node 节点的根目录,并开启读取权限。

    • 监控应用日志:需挂载 Node 节点根目录,并开启对 /opt/.position.json 的写入权限。

    • Collector 副本数:默认启用 1 个副本。若集群内 Trace 流量较高,请参考 Collector 部署 调整副本数量。

  6. 选用以下方式下载UniAgent yaml文件。

    • 方法一:单击点击生成,系统会生成安装命令,单击右侧的copy按钮将安装命令拷贝到剪切板,以备在目标服务器上执行这条命令。
    • 方法二:网络不通时,可直接单击右侧下载按钮下载yaml文件,可以将yaml文件传到目标服务器。

部署探针:使用kubectl命令或oc命令部署yaml文件

  1. 如果在第5步信息配置中填写的Namespace(例如:tingyun)在Kubernetes集群中不存在,则需要在Kubernetes中创建Namespace,如果已经存在该Namespace,则忽略这一步。

    kubectl create namespace tingyun
  2. 在Kubernetes中执行下载的yaml文件, 并备份yaml,这个yaml无论将来配置更新,升级镜像还是卸载探针都用的到。

    kubectl apply -f tingyunagent.yaml

    安装探针需要 MutatingWebhookConfiguration、ClusterRoleBinding和ClusterRole权限。如果权限不足,请联系Kubernetes集群管理员进行操作,可参见常见问题

  3. 验证安装是否成功,确认所有Pod均处在Running状态。

    kubectl get pods -n tingyun

    如果状态异常请查看常见问题

部署探针:开启应用监控

  1. 开启应用监控。

    默认情况下,不会对应用Pod嵌入APM探针,如需开启应用监控,还需要以下操作:

    • 给应用Pod所在的Namespace打label。

      kubectl label namespace [应用所在namespace] tingyun-injection=enabled
    • 开启激进嵌码模式情况下,会对打了标签的Namespace下所有应用嵌入APM探针。

    • 未开启激进嵌码模式情况下,给Pod打label,将tingyun-agent-injected设置为true。

      以Tocmat部署的Deployment为例,配置如下:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: demo1
      spec:
      selector:
      matchLabels:
      app: demo1
      template:
      metadata:
      labels:
      tingyun-agent-injected: "true"
      spec:
      containers:
      - name: demo1
      image: tomcat
    • 开启应用安全检查功能:

      若需启用应用安全检查功能,需确保在已有标签 tingyun-agent-injected: enabled或开启激进模式的基础上,新增Pod标签:tingyun-aspm-enabled: enabled

      注意:此功能需 v4.3.0.0 及以上版本探针;暂不支持在激进模式下批量开启应用安全检查功能。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: demo1
      spec:
      selector:
      matchLabels:
      app: demo1
      template:
      metadata:
      labels:
      tingyun-agent-injected: enabled
      tingyun-aspm-enabled: enabled
      spec:
      containers:
      - name: demo1
      image: tomcat
    • 对于Go应用,仅支持启动命令command为应用全路径的Go应用,暂不支持利用sh脚本间接启动的部署方式,不支持激进模式部署(具体适配情况见Go探针支持列表)。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: demo1
      namespace: default
      spec:
      selector:
      matchLabels:
      app: demo1
      template:
      metadata:
      labels:
      tingyun-go-entrypoint: enabled
      spec:
      containers:
      - name: demo1
      image: goapp
      command: ['/app/demo']
    • 如需禁用某个应用监控,需要给Pod打label,将tingyun-agent-injected设置为false。

      以Tocmat部署的Deployment为例,配置如下:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
      name: demo1
      namespace: default
      spec:
      selector:
      matchLabels:
      app: demo1
      template:
      metadata:
      labels:
      tingyun-agent-injected: "false"
      spec:
      containers:
      - name: demo1
      image: tomcat

部署探针:重启应用Pod,验证监控数据

使用以下命令检查应用Pod是否挂载探针镜像文件:

kubectl describe pod [应用pod名] -n [应用所在的namespace] | grep tingyun-oneagent

例如:以下输出为已挂载状态

LD_PRELOAD: /opt/tingyun-oneagent/lib/libinterceptor.so
/opt/tingyun-oneagent from oneagent-volume (rw)

新增UniAgent部署页面最下方,单击查看部署状态按钮,可跳转到UniAgents管理页面,看到上述刚部署的服务器,且在该主机下有进程信息。如果有数据,说明UniAgent部署成功。

在左侧导航栏中单击应用与微服务>业务系统,进入业务系统拓扑页面,左侧操作面板区下方的应用区可以看到新生成的应用。

在左侧导航栏中单击基础设施>主机监控,可以看到新生成的主机信息,Kubernetes集群有多少个Node就会新增多少个主机。

探针所需资源

APM Injector

默认只有一个Pod,可横向扩展,用于自动嵌码应用探针。

limits:
cpu: "0.5"
memory: "200Mi"
requests:
cpu: "0.01"
memory: "10Mi"

APM initContainer

随应用启动的Pod,初始化完毕后销毁,资源属于临时征用。

limits:
cpu: "0.5"
memory: "200Mi"
requests:
cpu: "0.01"
memory: "10Mi"

Collector

默认1个Pod,可横向扩展,用于收集应用的性能数据和基础设施监控数据。

limits:
cpu: "4"
memory: "16Gi"
requests:
cpu: "2"
memory: "8Gi"

Infra Agent

默认每个Node上启动一个Pod,用于基础设施监控。

limits:
cpu: "2"
memory: "1Gi"
requests:
cpu: "0.2"
memory: "200Mi"

Kubelet Metirc

默认每个Node上启动一个Pod,用于基础设施监控。

resources:
limits:
cpu: "200m"
memory: "200Mi"
requests:
cpu: "100m"
memory: "100Mi"

Cluster Metirc

一个Pod,用于基础设施监控。

resources:
limits:
cpu: "200m"
memory: "200Mi"
requests:
cpu: "100m"
memory: "100Mi"