借助ARMS应用监控,您可以对开源Kubernetes环境的应用进行应用拓扑、接口调用、异常事务和慢事务监控、SQL分析等监控。本文将帮助您将开源Kubernetes环境中的应用接入ARMS应用监控。
前提条件
- 确保您的Kubernetes api-server组件接口版本在1.10及以上。
- 确保您的集群连通公网。
- 检查您的JDK版本。ARMS应用监控支持的JDK版本如下:
- JDK 1.7.0+
- JDK 1.8.0_25+
说明
- Kubernetes集群应用部署建议:JDK 1.8.0_191+。
- 如果JDK版本为1.8.0_25或者1.8.0_31,可能会出现无法安装探针的情况,请升级至1.8.X最新版本。
- JDK 11.0.8+
- JDK 17
说明 JDK 1.8及以下版本、JDK 11和JDK 17版本对应的探针安装包不同,请根据不同的JDK版本下载对应的探针安装包或调整应用监控组件ack-onepilot的配置。
方式二:将开源Kubernetes直接接入ARMS
步骤2:安装探针
ARMS应用监控目前仅支持无状态(Deployment)和有状态(StatefulSet)两种类型的应用接入,两种类型的应用接入方法相同。此处以将开源Kubernetes环境中的无状态(Deployment)类型的应用接入ARMS应用监控为例。
- 执行以下
wget
命令下载ack-onepilot安装包。 wget 'https://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/ack-onepilot/ack-onepilot-3.0.6.tgz'
- 执行以下命令解压ack-onepilot安装包。
tar xvf ack-onepilot-3.0.6.tgz
- 编辑安装包下的values.yaml文件,根据实际情况修改以下参数,然后保存。
image: registry-vpc.__ACK_REGION_ID__.aliyuncs.com/ack-onepilot
cluster_id: __ACK_CLUSTER_ID__
accessKey: __ACCESSKEY__
accessKeySecret: __ACCESSKEY_SECRET__
uid: "__ACK_UID__"
region_id: __ACK_REGION_ID__
image
:ack-onepilot镜像地址。
说明 以上示例为VPC环境镜像地址,公网环境镜像获取地址如下:
registry.__ACK_REGION_ID__.aliyuncs.com/ack-onepilot
__ACK_REGION_ID__
:阿里云地域ID,应用监控支持的地域,请参见应用监控目前支持的地域。
__ACK_CLUSTER_ID__
:自定义Kubernetes集群ID,集群的唯一标识。建议格式为<uid>-<clusterid>
。
___ACCESSKEY__
和__ACCESSKEY_SECRET__
:阿里云账号的AccessKey ID和AccessKey Secret。获取方法,请参见获取AccessKey。
__ACK_UID__
:阿里云账号(主账号)ID。将鼠标悬浮于阿里云控制台右上角的头像上可以获取。
说明 如果当前登录账号为RAM用户(子账号),对应的__ACK_UID__
为企业别名。
- 执行以下命令安装ack-onepilot。
helm3 upgrade --install ack-onepilot ack-onepilot --namespace ack-onepilot --create-namespace
步骤3:修改应用的YAML文件
- 执行以下命令查看目标无状态(Deployment)应用的YAML文件。
kubectl get deployment {deployment名称} -o yaml
说明 若您不清楚
{deployment名称}
,请先执行以下命令查看所有无状态(Deployment)应用,在执行结果中找到目标无状态(Deployment)应用,再查看目标无状态(Deployment)应用的YAML文件。
kubectl get deployments --all-namespace
- 启动编辑目标无状态(Deployment)应用的YAML文件。
kubectl edit deployment {Deployment名称} -o yaml
- 在YAML文件中的spec.template.metadata层级下添加以下内容。
labels:
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "<your-deployment-name>" #请将<your-deployment-name>替换为您的应用名称。
one-agent.jdk.version: "OpenJDK11" #如果应用的JDK版本是JDK 11,则需要配置此参数。
one-agent.jdk.version: "OpenJDK17" #如果应用的JDK版本是JDK 17,则需要配置此参数。
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"
one-agent.jdk.version: "OpenJDK11"
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
---
- 保存配置后,应用将自动重启,以上配置生效。
2~5分钟后,若您的应用出现在ARMS控制台的页面中且有数据上报,则说明接入成功。
卸载探针
当您不需要再监控开源Kubernetes环境中的Java应用时,可以卸载ack-onepilot。
- 执行以下命令卸载ack-onepilot。
helm3 uninstall --namespace ack-onepilot ack-onepilot
- 重启您的应用Pod。