借助ARMS应用监控,您可以对开源Kubernetes环境的应用进行应用拓扑、接口调用、异常事务和慢事务监控、SQL分析等监控。本文将帮助您将开源Kubernetes环境中的应用接入ARMS应用监控。

前提条件

  • 确保您的Kubernetes api-server组件接口版本在1.10及以上。
  • 确保您的集群连通公网。
  • 检查您的JDK版本。ARMS应用监控支持的JDK版本如下:
    • JDK 1.7.0+
    • JDK 1.8.0_25+
      说明
      • Kubernetes集群应用部署建议:JDK 1.8.0_191+。
      • 如果JDK版本为1.8.0_25或者1.8.0_31,可能会出现无法安装探针的情况,请升级至1.8.X最新版本。
    • JDK 11.0.8+
    说明 JDK 1.8及以下版本和JDK 11版本对应的探针安装包不同,请根据不同的JDK版本下载对应的探针安装包或调整应用监控组件ack-onepilot的配置。

方式一:通过ACK注册集群接入ARMS

  1. 将开源Kubernetes接入ACK One。具体操作,请参见创建注册集群并接入本地数据中心集群
  2. 为注册集群安装ack-onepilot组件。具体操作,请参见将应用实时监控服务ARMS接入注册集群

方式二:将开源Kubernetes直接接入ARMS

步骤1:安装Helm3

步骤2:安装探针

ARMS应用监控目前仅支持无状态(Deployment)和有状态(StatefulSet)两种类型的应用接入,两种类型的应用接入方法相同。此处以将开源Kubernetes环境中的无状态(Deployment)类型的应用接入ARMS应用监控为例。

  1. 执行以下wget命令下载ack-onepilot安装包。
     wget 'https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/ack-onepilot/ack-onepilot-3.0.4.tgz'
  2. 执行以下命令解压ack-onepilot安装包。
    tar xvf ack-onepilot-3.0.4.tgz                 
  3. 编辑安装包下的values.yaml文件,根据实际情况修改以下参数,然后保存。
    image: registry-vpc.__ACK_REGION_ID__.aliyuncs.com/ack-onepilot
    cluster_id: __ACK_CLUSTER_ID__
    accessKey: __ACCESSKEY__
    accessKeySecret: __ACCESSKEY_SECRET__
    uid: "__ACK_UID__"
    region_id: __ACK_REGION_ID__
    • image:ack-onepilot镜像地址。
      说明 以上示例为VPC环境镜像地址,公网环境镜像获取地址如下:
      registry.__ACK_REGION_ID__.aliyuncs.com/ack-onepilot/ack-onepilot
    • __ACK_REGION_ID__:阿里云地域ID,应用监控支持的地域,请参见应用监控目前支持的地域
    • __ACK_CLUSTER_ID__:自定义Kubernetes集群ID,集群的唯一标识。建议格式为<uid>-<clusterid>
    • ___ACCESSKEY____ACCESSKEY_SECRET__:阿里云账号的AccessKey ID和AccessKey Secret。获取方法,请参见获取AccessKey
    • __ACK_UID__:阿里云账号ID。将鼠标悬浮于阿里云控制台右上角的头像上可以获取。
  4. 执行以下命令安装ack-onepilot。
    helm3 upgrade --install ack-onepilot ack-onepilot --namespace ack-onepilot --create-namespace

步骤3:获取License Key

  1. 登录ARMS控制台,在左侧导航栏选择应用监控 > 应用列表
  2. 应用列表页面顶部选择目标地域,然后单击接入应用
  3. 接入中心面板单击Java,然后在STEP2区域获取License Key。
    Section LicenseKey

步骤4:修改应用的YAML文件

  1. 执行以下命令查看目标无状态(Deployment)应用的YAML文件。
    kubectl get deployment {deployment名称} -o yaml                            
    说明 若您不清楚{deployment名称},请先执行以下命令查看所有无状态(Deployment)应用,在执行结果中找到目标无状态(Deployment)应用,再查看目标无状态(Deployment)应用的YAML文件。
    kubectl get deployments --all-namespace                
  2. 启动编辑目标无状态(Deployment)应用的YAML文件。
    kubectl edit deployment {Deployment名称} -o yaml                        
  3. 在YAML文件中的spec.template.metadata层级下添加以下内容。
    ARMSApmAppName: xxx
    ARMSApmLicenseKey: xxx
    one-agent.jdk.version: "OpenJDK11"    //如果应用的JDK版本是JDK11,则需要配置此参数。
    注意
    • 请将xxx分别替换成您的License Key和应用名称,应用名暂不支持中文。
    • 将License Key中的符号@替换为符号_
    如果您需要在开源K8s环境中创建一个新的无状态(Deployment)应用并接入ARMS,则应用的完整YAML文件如下:
    apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-springboot-demo
      labels:
        app: arms-springboot-demo
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo
      template:
        metadata:
          labels:
            app: arms-springboot-demo
            ARMSApmLicenseKey: "xxx_xxx"
            ARMSApmAppName: "arms-k8s-demo"
            one-agent.jdk.version: "OpenJDK11"
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
              imagePullPolicy: Always
              name: arms-springboot-demo
              env:
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-demo-mysql
      labels:
        app: mysql
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mysql
      template:
        metadata:
          labels:
            app: mysql
        spec:
          containers:
            - resources:
                limits:
                  cpu: 0.5
              image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
              name: mysql
              ports:
                - containerPort: 3306
                  name: mysql
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: mysql
      name: arms-demo-mysql
    spec:
      ports:
        # the port that this service should serve on
        - name: arms-mysql-svc
          port: 3306
          targetPort: 3306
      # label keys and values that must match in order to receive traffic for this service
      selector:
        app: mysql
    ---
    
  4. 保存配置后,应用将自动重启,以上配置生效。

    2~5分钟后,若您的应用出现在ARMS控制台的应用监控 > 应用列表页面中且有数据上报,则说明接入成功。

卸载探针

当您不需要再监控开源Kubernetes环境中的Java应用时,可以卸载ack-onepilot。

  1. 执行以下命令卸载ack-onepilot。
    helm3 uninstall --namespace ack-onepilot ack-onepilot
  2. 重启您的应用Pod。