将应用实时监控服务ARMS接入注册集群

应用实时监控服务ARMS能够对应用进行全方位的监控,帮助您全面掌握应用的运行状态。您可以在注册集群中安装ARMS应用监控组件,将ARMS服务安装到已注册的Kubernetes集群中,使用ARMS对集群中的应用进行监控。

前提条件

步骤一:安装ARMS应用监控组件

通过onectl安装

  1. 在本地安装配置onectl。具体操作,请参见通过onectl管理注册集群

  2. 执行以下命令,为ack-onepilot组件配置RAM权限。

    onectl ram-user grant --addon ack-onepilot

    预期输出:

    Ram policy ack-one-registered-cluster-policy-ack-onepilot granted to ram user **** successfully.
  3. 执行以下命令,安装ack-onepilot组件。

    onectl addon install ack-onepilot

    预期输出:

    Addon ack-onepilot, version **** installed.

通过控制台安装

  1. 配置RAM权限。在注册集群中安装组件前,您需要在接入集群中设置AccessKey用来获取访问云服务的权限。

    1. 创建RAM用户。具体操作,请参见创建RAM用户

    2. 创建自定义权限策略。具体操作,请参见创建自定义权限策略

      ack-onepilot组件需要的权限策略内容如下:

      {
          "Version": "1",
          "Statement": [
              {
                  "Action": "arms:*",
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ]
      }
    3. 为RAM用户授权,将上一步骤创建的自定义权限策略授予RAM用户。具体操作,请参见为RAM用户授权

    4. 为RAM用户创建AccessKey。具体操作,请参见创建AccessKey

    5. 使用AccessKey在注册集群中创建名为alibaba-addon-secret的Secret资源。

      执行以下命令,创建ack-onepilot组件使用的Secret。

      说明

      执行命令前,需要将命令中的access-key-idaccess-key-secret的参数值替换为您在上一步骤中创建的AccessKey ID和AccessKey Secret。

      kubectl -n ack-onepilot create secret generic alibaba-addon-secret --from-literal='access-key-id=<your AccessKey ID>' --from-literal='access-key-secret=<your AccessKey Secret>'
  2. 安装组件ack-onepilot组件。

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

    3. 组件管理页面,单击日志与监控页签,找到ack-onepilot组件,单击右下角的安装

    4. 安装组件 ack-onepilot对话框中,设置相关配置项,然后单击确定

步骤二:为Java应用开启ARMS应用监控

如需在创建新应用的同时开启ARMS应用监控,请完成以下操作。

  1. 容器服务管理控制台左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理

  2. 无状态页面右上角单击使用YAML创建资源

  3. 选择示例模板,并在模板(YAML格式)中将以下labels添加到spec.template.metadata层级下。

    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"    #请将<your-deployment-name>替换为您的应用名称。
      armsSecAutoEnable: "on"    #如果需要接入应用安全,则需要配置此参数。
    说明

    YAML Example

    创建一个无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:

    展开查看完整示例YAML文件(Java)

    apiVersion: v1
    kind: Namespace
    metadata:
      name: arms-demo
    ---
    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-springboot-demo
      namespace: arms-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: SELF_INVOKE_SWITCH
                  value: "true"
                - name: COMPONENT_HOST
                  value: "arms-demo-component"
                - name: COMPONENT_PORT
                  value: "6666"
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: apps/v1 
    kind: Deployment
    metadata:
      name: arms-springboot-demo-subcomponent
      namespace: arms-demo
      labels:
        app: arms-springboot-demo-subcomponent
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: arms-springboot-demo-subcomponent
      template:
        metadata:
          labels:
            app: arms-springboot-demo-subcomponent
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
        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-subcomponent
              env:
                - name: SELF_INVOKE_SWITCH
                  value: "false"
                - name: MYSQL_SERVICE_HOST
                  value: "arms-demo-mysql"
                - name: MYSQL_SERVICE_PORT
                  value: "3306"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        name: arms-demo-component
      name: arms-demo-component
      namespace: arms-demo
    spec:
      ports:
        # the port that this service should serve on
        - name: arms-demo-component-svc
          port: 6666
          targetPort: 8888
      # label keys and values that must match in order to receive traffic for this service
      selector:
        app: arms-springboot-demo-subcomponent
    ---
    apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
    kind: Deployment
    metadata:
      name: arms-demo-mysql
      namespace: arms-demo
      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
      namespace: arms-demo
    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
    ---

无状态页面的目标应用操作列下方,单击ARMS控制台,可跳转至ARMS控制台对您的应用进行服务治理。

后续操作

  • 为集群下所有应用卸载探针

    通过onectl卸载

    1. 执行以下命令,卸载ack-onepilot组件。

      onectl addon uninstall ack-onepilot

      预期输出:

      Addon ack-onepilot uninstalled.
    2. 重启业务Pod。

    通过控制台卸载

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

    3. 组件管理页面,单击日志与监控页签,找到ack-onepilot组件,单击右下角的卸载

    4. 在弹出对话框中单击确定

    5. 重启业务Pod。

  • 为集群下指定应用卸载探针

    1. 登录容器服务管理控制台,在左侧导航栏选择集群

    2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择工作负载 > 无状态

    3. 无状态页面的目标应用操作列下方,单击更多>查看Yaml,在编辑YAML对话框中,删除上文安装探针步骤二中添加的labels,然后单击更新

    4. 重启业务Pod。