开始监控单 Pod 多容器应用

Sidecar场景下,一个pod中可能会有多个容器,并且这些容器中运行的应用所使用的编程语言可能不同,本文将提供在Sidecar场景下通过ack-onepilot组件接入多语言应用的最佳实践。

前提条件

ack-onepilot版本不低于4.2.0。

操作步骤

  1. 参考以下文档安装ack-onepilot并为其授予正确的资源访问权限。

  2. 为工作负载添加相关标签。

    应用示例YAML

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: multicontainer          
      name: multicontainer
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: multicontainer
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: multicontainer
            apsara.apm/container.test-java.app-language: java
            apsara.apm/container.test-java.armsPilotAutoEnable: 'on'
            apsara.apm/container.test-java.armsPilotCreateAppName: multilanguage-java
            apsara.apm/container.test-go.app-language: golang
            apsara.apm/container.test-go.armsPilotAutoEnable: 'on'
            apsara.apm/container.test-go.armsPilotCreateAppName: multilanguage-go
            apsara.apm/container.test-python.app-language: python
            apsara.apm/container.test-python.armsPilotAutoEnable: 'on'
            apsara.apm/container.test-python.armsPilotCreateAppName: multilanguage-python
        spec:
          containers:
            - command:
                - sleep
                - '360000'
              image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest
                # 替换为你实际的Java应用镜像
              imagePullPolicy: Always
              name: test-java
              resources:
                requests:
                  cpu: 250m
                  memory: 512Mi
            - command:
                - sleep
                - '3600000'
              image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest
                # 替换为实际的Go应用镜像
              imagePullPolicy: Always
              name: test-go
              resources:
                requests:
                  cpu: 500m
                  memory: 512Mi
            - command:
                - sleep
                - '3600000'
              image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/alinux3:latest
                # 替换为实际的Python应用镜像
              imagePullPolicy: Always
              name: test-python
              resources:
                requests:
                  cpu: 500m
                  memory: 512Mi

    以上YAML是一个同时使用Java,Golang以及Python三种编程语言的复杂应用,应用中有三个不同编程语言的容器,容器名分别为test-java、test-go、test-python。

    将该应用中的三个容器分别接入到三个不同的ARMS应用中以达到数据隔离,具体操作如下:

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

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

    3. 无状态页面的目标应用右侧选择image > YAML 编辑

      如需创建一个新应用,单击使用YAML创建资源

    4. YAML文件中将以下labels添加到spec.template.metadata层级下,然后单击更新

      labels:
        # 请将${containerName}替换为实际的容器名称
        apsara.apm/container.${containerName}.app-language: java # 替换为该容器实际的编程语言
        apsara.apm/container.${containerName}.armsPilotAutoEnable: 'on'
        apsara.apm/container.${containerName}.armsPilotCreateAppName: "<your-deployment-name>"    # 请将<your-deployment-name>替换为您的应用名称。
  3. 若应用出现在ARMS控制台应用监控 > 应用列表页面中且有数据上报,则说明接入成功。

    image