通用Kubernetes环境自动安装探针

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

说明

如果您使用的Kubernetes集群由容器服务ACK提供,本文不适用,ACK集群接入ARMS的操作请参见容器服务ACK环境自动安装探针

前提条件

  • 请确保您的Kubernetes集群版本为1.18或以上。

  • 如果您的Kubernetes集群没有部署在阿里云,请确保集群能够连通公网,或者通过云企业网等方式打通阿里云VPC和集群之间的连接。

  • 检查您的JDK版本。具体要求,请参见支持的JDK版本

  • 进程最大堆内存需大于256 MB。

(推荐)方式一:通过ACK注册集群接入ARMS

使用ACK注册集群的优势:

  • 更高效的运维支持。

  • 获得更多容器服务ACK集群扩展能力,包括:监控、日志、备份恢复、安全、云上弹性资源等。更多信息,请参见注册集群概述

  1. Kubernetes集群接入ACK One。具体操作,请参见创建注册集群

  2. 为注册集群安装ack-onepilot组件。具体操作,请参见将应用实时监控服务ARMS接入注册集群

方式二:直接接入ARMS

重要

该方式未使用ACK注册集群,接入后,容器相关的信息(CPU、内存、Disk、网络)无法关联展示。即在应用实例页面仅展示ARMS自采集版的容器环境数据,且后续无法通过接入可观测监控 Prometheus 版查看Prometheus探针获取的容器数据,更多信息,请参见Java应用实例监控

步骤1:安装Helm3

步骤2:安装探针

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

  1. 执行以下wget命令下载ack-onepilot安装包。

     wget 'https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-onepilot-3.3.3.tgz'
  2. 执行以下命令解压ack-onepilot安装包。

    tar xvf ack-onepilot-3.3.3.tgz                 
  3. 编辑安装包下的values.yaml文件,根据实际情况修改以下参数,然后保存。

    registry: registry-__ACK_REGION_ID__.ack.aliyuncs.com/acs/
    cluster_id: __ACK_CLUSTER_ID__
    accessKey: __ACCESSKEY__
    accessKeySecret: __ACCESSKEY_SECRET__
    uid: "__ACK_UID__"
    region_id: __ACK_REGION_ID__
    • registry:ack-onepilot镜像地址。

    • cluster_id:自定义Kubernetes集群ID,集群的唯一标识。建议格式为<uid>-<clusterid>

    • accessKeyaccessKeySecret:阿里云账号的AccessKey IDAccessKey Secret。获取方法,请参见创建AccessKey

      重要
      • 请确认对应的阿里云账号已包含AliyunARMSFullAccessAliyunSTSAssumeRoleAccess权限。

      • 如果当前操作的是RAM用户,请确认RAM用户也包含AliyunARMSFullAccessAliyunSTSAssumeRoleAccess权限,具体操作,请参见RAM用户授权

    • uid:阿里云账号ID。将鼠标悬浮于阿里云控制台右上角的头像上可以获取。

    • region_id:阿里云地域ID,应用监控支持的地域,请参见开服地域

  4. 执行以下命令安装ack-onepilot。

    请在ack-onepilot安装包外执行此命令。

    helm3 upgrade --install ack-onepilot ack-onepilot --namespace ack-onepilot --create-namespace

步骤3:修改应用的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层级下添加以下内容。

    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"    #请将<your-deployment-name>替换为您的应用名称。
      armsSecAutoEnable: "on"    #如果需要接入应用安全,则需要配置此参数。
    说明
    • 探针接入后,为了确保您的使用体验,在新版本探针发布后,当应用重启时,ack-onepilot将会自动将探针升级到最新版本,如果您不需要跟随ARMS探针的版本发布自动更新挂载的探针,可以自主控制探针版本。具体操作,请参见自主控制探针版本

    • 应用安全详情,请参见什么是应用安全

    • 应用安全计费信息,请参见计费说明

    如果您需要在K8s环境中创建一个新的无状态(Deployment)应用并接入ARMS,则应用的完整YAML文件如下:

    展开查看完整示例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
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo"
        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
    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控制台应用监控 > 应用列表页面中且有数据上报,则说明接入成功。