
# 通过安装Helm的方式接入APM
如果使用通用的开源Kubernetes部署应用，可以通过安装Helm方式接入APM，即可在指标、调用链界面上查看应用情况。
#### 前提条件
- 确保接入的节点与APM服务网络连通。可使用**curl -kv** 命令测试目标机器与APM服务器网络是否连通。
  例如，以检查华北-北京四区域，且接入方式选择"增强型探针"的连通性为例，请登录应用所部署的机器，并输入命令curl -kv 100.125.12.108:41333，其他区域地址请参考[探针接入地址](https://support.huaweicloud.com/usermanual-apm2/apm_07_1008.html)。
  
- 请确保您的Kubernetes集群版本 ≥ 1.19。
- 进程所需最大堆内存250 MB，最大CPU使用0.25 Core。
 
#### 安装Helm并接入APM
1. 安装Helm3。 
   - 执行使用脚本安装。
     ```
     curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
     ```
     
   
   - 二进制版本安装。
     1. 下载[版本](https://github.com/helm/helm/releases)。
     
     2. 执行如下命令，解压。
        ```
        tar -zxvf helm-v3.0.0-linux-amd64.tar.gz
        ```
        
     
     3. 在解压目录中找到helm程序，移动到需要的目录中。
        ```
        mv linux-amd64/helm /usr/local/bin/helm
        ```
        
      
   
   
   
   
2. 安装探针。 
   本方案支持无状态和有状态应用接入，以下步骤以无状态为例。
   1. 下载apm-operator安装包。
      ```
      wget 'https://apm2-javaagent-cn-north-4.obs.cn-north-4.myhuaweicloud.com/apm-operator-stable.tar.gz'
      ```
      
   
   2. 解压apm-operator安装包。
      ```
      tar -xvf apm-operator-stable.tar.gz
      ```
      
   
   3. 编辑安装包下的operatorK8s/apm-operator/values.yaml，根据实际情况修改参数后进行保存。
      ```
      accessKeyId: ""
      accessKeySecret: ""
      masterAddress: ""
      swrAddress: ""
      agentVersion: ""
      operatorVersion: ""
      namespace: "apm-operator"
      targetPort: "9443"
      selfCheckPort: "9445"
      ```
      表1编辑安装包参数说明 
      | 参数名称            | 是否必填 | 说明                                                                                                                                      |
      |:---|:---|:---|
      | accessKeyId     | 是    | APM的上报AK，获取请参考[管理APM访问密钥](https://support.huaweicloud.com/usermanual-apm2/apm_07_0034.html)。                                            |
      | accessKeySecret | 是    | APM的上报SK，获取请参考[管理APM访问密钥](https://support.huaweicloud.com/usermanual-apm2/apm_07_0034.html)。                                            |
      | masterAddress   | 是    | 探针上报地址，获取请参考[探针接入地址](https://support.huaweicloud.com/usermanual-apm2/apm_07_1008.html)。例如：上海一的masterAddress为https://100.125.4.27:41333。 |
      | swrAddress      | 是    | 探针镜像地址。组成方式为swr.{regionId}.myhuaweicloud.com，例如：上海一的swrAddress为swr.cn-east-3.myhuaweicloud.com。                                         |
      | agentVersion    | 是    | 探针版本。参考[JavaAgent更新说明](https://support.huaweicloud.com/productdesc-apm2/apm_01_0093.html)，比如：2.4.8-x86_64。                              |
      | operatorVersion | 是    | apm-operator版本，非必要不修改，使用stable。                                                                                                         |
      | namespace       | 是    | 命名空间，默认为apm-operator，非必要不修改。                                                                                                            |
      | targetPort      | 是    | 目标端口，默认为9443，非必要不修改。                                                                                                                    |
      | selfCheckPort   | 是    | 检测端口，默认为9445，非必要不修改。                                                                                                                    |
         
      
   
   4. 使用脚本安装。
      ```
      cd operatorK8s 
      chmod 550 apm-operator-install.sh 
      ./apm-operator-install.sh
      ```
      
    
   
   
3. 修改应用YAML文件。 
   1. 编辑应用的YAML文件。
      ```
      kubectl edit deployment {Deployment名称} -o yaml
      ```
      
   
   2. 在spec.template.metadata层级下添加以下内容。
      ```
      labels:
        apmJavaAgentEnable: "on"
        apmAppName: "<appName>"
        apmBusiness: "<apmBusiness>"
        apmEnv: "<apmEnv>"
        apmJavaAgentVersion: "<agentVersion>"
      ```
      表2spec.template.metadata层级参数说明 
      | 参数名称                | 是否必填 | 说明                                                     |
      |:---|:---|:---|
      | apmJavaAgentEnable  | 是    | 如果需要接入APM探针，需要配置此参数，且设置为"on"。                          |
      | apmAppName          | 是    | 组件名称，请将\<appName\>替换为组件名称。                             |
      | apmBusiness         | 否    | 所属应用名称，默认为default，请将\<apmBusiness\>替换为应用名称。            |
      | apmEnv              | 否    | 环境名称，用于区分所属环境，可用于搜索和配置。默认为default，请将\<apmEnv\>替换为环境名称。 |
      | apmJavaAgentVersion | 否    | 默认继承values.yaml 中的 agentVersion，也可显式指定。                |
         
      
   
   3. 保存配置，应用将自动重启，可以查询YAML确保配置生效。
      ```
      kubectl get deployment {Deployment名称} -o yaml
      ```
      
   
   
   
   
4. 通过APM管理应用。 
   应用启动后，等待3分钟应用数据就会呈现在APM界面。此时登录APM，您可以在APM进行应用性能优化。
   
   
 
#### 常见问题
- 如果kubectl没有配置成功，helm install时会出现如下报错。
  ```
  # helm install prometheus/ --generate-name 
  WARNING: This chart is deprecated 
  Error: Kubernetes cluster unreachable: Get "http://localhost:8080/version?
  timeout=32s": dial tcp [::1]:8080: connect: connection refused
  ```
  解决办法：给节点配置kubeconfig，配置方法请参见[使用kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)。
  
- 同一个集群下需要安装不同的Agent版本，需要怎么处理？ 解决办法：通过labels中的apmJavaAgentVersion指定版本实现。
  
 
