全部產品
Search
文件中心

Application Real-Time Monitoring Service:通用Kubernetes環境自動安裝探針

更新時間:Aug 08, 2024

藉助ARMS應用監控,您可以對通用Kubernetes環境的應用進行應用拓撲、介面調用、異常事務和慢事務監控、SQL分析等監控。本文將協助您將通用Kubernetes環境中的應用接入ARMS應用監控。

說明

如果您使用的Kubernetes叢集由Container ServiceACK提供,本文不適用,ACK叢集接入ARMS的操作請參見Container ServiceACK環境自動安裝探針

前提條件

  • 請確保您的Kubernetes叢集版本為1.18或以上。

  • 如果您的Kubernetes叢集沒有部署在阿里雲,請確保叢集連通公網,或者通過雲企業網等方式打通阿里雲VPC和叢集之間的串連。

  • 檢查您的JDK版本。具體要求,請參見支援的JDK版本

  • 進程最大堆記憶體需大於256 MB。

(推薦)方式一:通過ACK註冊叢集接入ARMS

使用ACK註冊叢集的優勢:

  • 更高效的營運支援。

  • 獲得更多Container ServiceACK叢集擴充能力,包括:監控、日誌、備份恢複、安全、雲上彈性資源等。更多資訊,請參見註冊叢集概述

  1. 將Kubernetes叢集接入ACK One。具體操作,請參見通過控制台建立註冊叢集

  2. 為註冊叢集安裝ack-onepilot組件。具體操作,請參見將應用即時監控服務ARMS接入註冊叢集

方式二:直接接入ARMS

步驟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.2.2.tgz'
  2. 執行以下命令解壓ack-onepilot安裝包。

    tar xvf ack-onepilot-3.2.2.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 ID和AccessKey Secret。擷取方法,請參見建立AccessKey

      重要

      請確認對應的阿里雲帳號(主帳號)已包含AliyunARMSFullAccessAliyunSTSAssumeRoleAccess許可權。

    • 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"    #如果需要接入應用安全,則需要配置此參數。
    說明

    如果您需要在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控制台應用監控 > 應用列表頁面中且有資料上報,則說明接入成功。