
# Deployment应用接入APM
在运行中始终不保存任何数据或状态的工作负载称为"无状态工作负载（deployment）"。如果已使用CCE或开源Kubernetes部署Deployment应用，启动配置脚本可以将Deployment应用接入APM，即可在拓扑、事务界面上查看应用情况。
#### 前提条件
- 请参见[通过Kubectl连接集群](https://support.huaweicloud.com/usermanual-cce/cce_10_0107.html)配置kubectl命令，使ECS连接集群。
- 已使用CCE或开源Kubernetes部署应用。
 
#### 操作流程
![](https://support.huaweicloud.com/qs-apm/zh-cn_image_0228755159.png "点击放大")
#### 步骤一：开通APM
请参考[开通和购买](https://support.huaweicloud.com/qs-apm/apm_00_0003.html)。
#### 步骤二：安装ICAgent
![](https://support.huaweicloud.com/qs-apm/public_sys-resources/note_3.0-zh-cn.png)
- 如果CCE中已绑定ICAgent，则CCE无需安装ICAgent，跳过此步骤。查询CCE中绑定的ICAgent，步骤如下。 CCE中是否已经绑定了ICAgent，此时您可以通过以下步骤查询。
  1. 登录CCE控制台。
  
  2. 单击"集群管理"，选择对应的集群。
  
  3. 单击"工作负载-\>命名空间：kube-system-\>守护进程集"。
  
  4. 在"工作负载名称"列，如果包含"ICAgent"，则说明CCE已经绑定了ICAgent。如果不包含"ICAgent"，则说明CCE没有绑定了ICAgent。
   
 
1. 获取AK/SK。
2. 登录**[应用性能管理](https://console.huaweicloud.com/apm/?locale=zh-cn)**。
3. 在左侧导航栏中选择"采集管理 \> Agent管理"。
4. 单击"安装ICAgent"，选择"主机类型"为"华为云主机"、"安装系统"为"Linux"。
5. 选择"安装方式"为"获取AK/SK凭证"，在文本框中输入已获取的AK/SK，生成ICAgent安装命令，单击"复制命令"，复制ICAgent安装命令。
   ![](https://support.huaweicloud.com/qs-apm/public_sys-resources/note_3.0-zh-cn.png)
   请确保输入正确的AK/SK，否则将无法安装ICAgent。
   ![](https://support.huaweicloud.com/qs-apm/zh-cn_image_0229423898.png "点击放大")
   
6. 使用ECS提供的远程登录功能以**root** 用户登录ECS，执行ICAgent安装命令进行安装。
   当显示"ICAgent install success"时，表示安装成功，ICAgent已安装在了"/opt/oss/servicemgr/"目录。
   
 
#### 步骤三：修改权限（可选）
若您使用非**root**用户启动程序，则您开启应用监控前需要执行如下命令修改探针文件与输出目录权限。
```
chmod -R 777 /opt/oss/servicemgr/ICAgent/pinpoint/
mkdir -p /opt/apm-container 
chmod -R 777 /opt/apm-container
```
#### 步骤四：开启应用监控
1. 在ECS或CCE上，配置Deployment应用的启动脚本：在[yaml](https://support.huaweicloud.com/usermanual-cce/cce_10_0047.html)描述文件中增加如下示例中加粗配置。
   执行如下命令编辑yaml文件：
   ```
   vi xxx.yaml
   ```
   其中xxx为文件名称，是您在创建Deployment应用时自定义的应用描述文件。如下为示例，Deployment的详细说明请参见[kubernetes官方文档](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/)。
   ```
   kind: Deployment 
   apiVersion: apps/v1 
   metadata: 
     name: user-service 
     namespace: default 
     selfLink: /apis/apps/v1/namespaces/default/deployments/user-service 
     uid: b231788d-9abd-11e8-80a5-fa163e3a2cc7 
     resourceVersion: '50972062' 
     generation: 13 
     creationTimestamp: '2018-08-08T03:46:56Z' 
     labels: 
       app: user-service 
       stack-name: auto-test 
     annotations: 
       deployment.kubernetes.io/revision: '5' 
       description: '' 
     enable: true 
   spec: 
     replicas: 1 
     selector: 
       matchLabels: 
         app: user-service 
     template: 
       metadata: 
         creationTimestamp: null 
         labels: 
           app: user-service 
         enable: true 
       spec: 
         #容器外主机上的挂载目录，包括数据输出路径、Java探针包路径 
         volumes: 
           - name: paas-apm 
             hostPath:  
               path: /opt/apm-container 
           - name: pinpoint-pkg 
             hostPath:  
               path: /opt/oss/servicemgr/ICAgent/pinpoint 
         containers: 
           - name: user-service 
             image: '100.125.0.198:20202/zhyyy/user-service:v1' 
             ports: 
               - containerPort: 8080 
                 protocol: TCP 
             env: 
               - name: PAAS_APP_NAME 
                 #工作负载名称（服务名称） 
                 value: user-service 
               - name: PAAS_NAMESPACE 
                 #CCE集群namespace，如果非CCE集群则不填该环境变量 
                 value: default 
               - name: PAAS_PROJECT_ID 
                 #租户项目projectId 
                 value: d698369a975645bfb35f8437d11c5a12 
               - name: PAAS_CLUSTER_ID 
                 #CCE集群ID，可以在CCE界面通过f12查看，如果非CCE集群则不填该环境变量 
                 value: 89b49857-5433-11e8-941c-0255ac101f3e 
                - name: PAAS_POD_ID
                              valueFrom:
                                fieldRef:
                                  fieldPath: metadata.uid
               - name: PAAS_MONITORING_GROUP 
                 #应用名称（监控组），建议完成一个功能的多个服务填写相同应用名称 
                 value: shoppingmall 
               - name: JAVA_TOOL_OPTIONS 
                 value: -javaagent:/opt/oss/servicemgr/ICAgent/pinpoint/pinpoint-bootstrap.jar -Dapm_container=true 
             resources: {} 
             #挂载进容器内数据输出路径、Java探针包路径 
             volumeMounts: 
               - name: paas-apm 
                 mountPath: /paas-apm/collectors/pinpoint 
               - name: pinpoint-pkg 
                 mountPath: /opt/oss/servicemgr/ICAgent/pinpoint 
             terminationMessagePath: /dev/termination-log 
             terminationMessagePolicy: File 
             imagePullPolicy: Always 
         restartPolicy: Always 
         terminationGracePeriodSeconds: 30 
         dnsPolicy: ClusterFirst 
         securityContext: {} 
         schedulerName: default-scheduler 
     strategy: 
       type: RollingUpdate 
       rollingUpdate: 
         maxUnavailable: 0 
         maxSurge: 1 
     revisionHistoryLimit: 10 
     progressDeadlineSeconds: 600 
   status: 
     observedGeneration: 13 
     replicas: 1 
     updatedReplicas: 1 
     readyReplicas: 1 
     availableReplicas: 1 
     conditions: 
       - type: Progressing 
         status: 'True' 
         lastUpdateTime: '2018-09-02T13:25:46Z' 
         lastTransitionTime: '2018-08-08T03:46:56Z' 
         reason: NewReplicaSetAvailable 
         message: ReplicaSet "user-service-f584f46b7" has successfully progressed. 
       - type: Available 
         status: 'True' 
         lastUpdateTime: '2018-12-21T11:01:33Z' 
         lastTransitionTime: '2018-12-21T11:01:33Z' 
         reason: MinimumReplicasAvailable 
         message: Deployment has minimum availability.
   ```
   
2. 使用修改后的Deployment重启应用，开启应用性能监控。
 
#### 步骤五：在APM上管理应用
应用启动后，等待3分钟应用数据就会呈现在APM界面中，此时登录APM，您可以在APM上通过拓扑、调用链等进行应用性能优化，详细操作请参考[用户指南](https://support.huaweicloud.com/usermanual-apm/apm_02_0006.html)。
![](https://support.huaweicloud.com/qs-apm/zh-cn_image_0169439931.png "点击放大")
